From a75e6c0cb101db1200362598156f5fbdb875c7f5 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Sat, 30 May 2026 20:32:18 -0700 Subject: [PATCH] Bump version to 1.0.37 (#6208) Co-authored-by: Claude Opus 4.7 (1M context) --- packages/skyvern-ui/pyproject.toml | 2 +- pyproject.toml | 2 +- skyvern-ts/client/README.md | 4 +- skyvern-ts/client/package-lock.json | 436 ++++----- skyvern-ts/client/package.json | 13 +- skyvern-ts/client/pnpm-lock.yaml | 847 +++++++++-------- skyvern-ts/client/reference.md | 120 +++ skyvern-ts/client/src/Client.ts | 467 ++++++++- .../client/requests/BulkCancelRunsRequest.ts | 12 + .../requests/CreateBrowserSessionRequest.ts | 47 +- .../client/requests/DownloadFilesRequest.ts | 4 + .../requests/GetWorkflowRunsByIdRequest.ts | 25 + .../requests/ListBrowserProfilesRequest.ts | 9 +- .../src/api/client/requests/LoginRequest.ts | 6 +- .../requests/RetryWorkflowRunRequest.ts | 13 + .../src/api/client/requests/RunTaskRequest.ts | 17 - .../api/client/requests/RunWorkflowRequest.ts | 21 - .../client/requests/TaskRunRequestInput.ts | 157 ++++ .../requests/UpdateBrowserProfileRequest.ts | 12 + .../requests/WorkflowRunRequestInput.ts | 132 +++ .../client/src/api/client/requests/index.ts | 8 +- .../src/api/errors/InternalServerError.ts | 16 + .../api/errors/RangeNotSatisfiableError.ts | 16 + skyvern-ts/client/src/api/errors/index.ts | 2 + skyvern-ts/client/src/api/resources/index.ts | 2 + .../src/api/resources/server/client/Client.ts | 84 ++ .../src/api/resources/server/client/index.ts | 1 + .../client/src/api/resources/server/index.ts | 1 + .../api/resources/workflows/client/Client.ts | 107 +++ .../api/resources/workflows/client/index.ts | 1 + .../src/api/resources/workflows/index.ts | 1 + skyvern-ts/client/src/api/types/Action.ts | 6 + .../client/src/api/types/ActionBlock.ts | 2 + .../client/src/api/types/ActionBlockYaml.ts | 1 + skyvern-ts/client/src/api/types/ActionType.ts | 3 + skyvern-ts/client/src/api/types/Artifact.ts | 4 + .../client/src/api/types/ArtifactType.ts | 1 + skyvern-ts/client/src/api/types/BlockType.ts | 2 + .../client/src/api/types/BrowserProfile.ts | 1 + .../src/api/types/BulkCancelRunsResponse.ts | 8 + skyvern-ts/client/src/api/types/CodeBlock.ts | 1 + .../client/src/api/types/CodeBlockYaml.ts | 1 + .../client/src/api/types/ConditionalBlock.ts | 1 + .../src/api/types/ConditionalBlockYaml.ts | 1 + .../client/src/api/types/DownloadToS3Block.ts | 1 + .../src/api/types/DownloadToS3BlockYaml.ts | 1 + .../client/src/api/types/ExtractionBlock.ts | 2 + .../src/api/types/ExtractionBlockYaml.ts | 1 + .../client/src/api/types/FileDownloadBlock.ts | 2 + .../src/api/types/FileDownloadBlockYaml.ts | 1 + skyvern-ts/client/src/api/types/FileInfo.ts | 4 + .../client/src/api/types/FileParserBlock.ts | 1 + .../src/api/types/FileParserBlockYaml.ts | 1 + .../client/src/api/types/FileUploadBlock.ts | 1 + .../src/api/types/FileUploadBlockYaml.ts | 1 + .../client/src/api/types/ForLoopBlock.ts | 1 + .../api/types/ForLoopBlockLoopBlocksItem.ts | 10 + .../client/src/api/types/ForLoopBlockYaml.ts | 1 + .../types/ForLoopBlockYamlLoopBlocksItem.ts | 17 +- skyvern-ts/client/src/api/types/GeoTarget.ts | 12 +- .../src/api/types/GoogleSheetsReadBlock.ts | 22 + .../GoogleSheetsReadBlockParametersItem.ts | 62 ++ .../api/types/GoogleSheetsReadBlockYaml.ts | 18 + .../src/api/types/GoogleSheetsWriteBlock.ts | 33 + .../GoogleSheetsWriteBlockParametersItem.ts | 62 ++ .../api/types/GoogleSheetsWriteBlockYaml.ts | 29 + .../client/src/api/types/HttpRequestBlock.ts | 1 + .../src/api/types/HttpRequestBlockYaml.ts | 1 + .../src/api/types/HumanInteractionBlock.ts | 2 + .../api/types/HumanInteractionBlockYaml.ts | 1 + skyvern-ts/client/src/api/types/LoginBlock.ts | 2 + .../client/src/api/types/LoginBlockYaml.ts | 1 + .../client/src/api/types/NavigationBlock.ts | 2 + .../src/api/types/NavigationBlockYaml.ts | 1 + .../client/src/api/types/PdfParserBlock.ts | 1 + .../src/api/types/PdfParserBlockYaml.ts | 1 + .../client/src/api/types/PrintPageBlock.ts | 1 + .../src/api/types/PrintPageBlockYaml.ts | 1 + .../client/src/api/types/ProxyLocation.ts | 1 + .../src/api/types/RunWebhookReplayResponse.ts | 24 + .../client/src/api/types/SendEmailBlock.ts | 1 + .../src/api/types/SendEmailBlockYaml.ts | 1 + ...vernSchemasCredentialTypeCredentialType.ts | 10 + .../SkyvernSchemasRunBlocksCredentialType.ts | 10 - skyvern-ts/client/src/api/types/TaskBlock.ts | 2 + .../client/src/api/types/TaskBlockYaml.ts | 1 + .../client/src/api/types/TaskRunListItem.ts | 1 + ...kRunRequest.ts => TaskRunRequestOutput.ts} | 20 +- .../client/src/api/types/TaskRunResponse.ts | 4 +- .../client/src/api/types/TaskV2Block.ts | 1 + .../client/src/api/types/TaskV2BlockYaml.ts | 1 + .../client/src/api/types/TextPromptBlock.ts | 1 + .../src/api/types/TextPromptBlockYaml.ts | 1 + skyvern-ts/client/src/api/types/Thought.ts | 1 + .../client/src/api/types/UploadToS3Block.ts | 1 + .../src/api/types/UploadToS3BlockYaml.ts | 1 + skyvern-ts/client/src/api/types/UrlBlock.ts | 2 + .../client/src/api/types/UrlBlockYaml.ts | 1 + .../client/src/api/types/UserDefinedError.ts | 1 + .../client/src/api/types/ValidationBlock.ts | 2 + .../src/api/types/ValidationBlockYaml.ts | 1 + skyvern-ts/client/src/api/types/WaitBlock.ts | 1 + .../client/src/api/types/WaitBlockYaml.ts | 1 + .../client/src/api/types/WhileLoopBlock.ts | 2 +- .../api/types/WhileLoopBlockLoopBlocksItem.ts | 10 + .../types/WhileLoopBlockYamlLoopBlocksItem.ts | 12 +- skyvern-ts/client/src/api/types/Workflow.ts | 5 + .../api/types/WorkflowCreateYamlRequest.ts | 3 + .../src/api/types/WorkflowDefinition.ts | 2 + .../api/types/WorkflowDefinitionBlocksItem.ts | 10 + .../src/api/types/WorkflowDefinitionYaml.ts | 2 + .../types/WorkflowDefinitionYamlBlocksItem.ts | 10 + .../client/src/api/types/WorkflowRun.ts | 6 + .../client/src/api/types/WorkflowRunBlock.ts | 1 + ...Request.ts => WorkflowRunRequestOutput.ts} | 18 +- .../src/api/types/WorkflowRunResponse.ts | 6 +- .../src/api/types/WorkflowTriggerBlock.ts | 1 + .../src/api/types/WorkflowTriggerBlockYaml.ts | 1 + skyvern-ts/client/src/api/types/index.ts | 14 +- skyvern-ts/client/src/version.ts | 2 +- .../client/tests/wire/artifacts.test.ts | 18 + skyvern-ts/client/tests/wire/main.test.ts | 845 ++++++++++++++++- skyvern-ts/client/tests/wire/server.test.ts | 19 + .../client/tests/wire/workflows.test.ts | 76 ++ skyvern/client/__init__.py | 389 +++++++- skyvern/client/client.py | 683 +++++++++++--- skyvern/client/core/client_wrapper.py | 4 +- skyvern/client/errors/__init__.py | 14 +- .../client/errors/internal_server_error.py | 10 + .../errors/range_not_satisfiable_error.py | 10 + skyvern/client/raw_client.py | 883 +++++++++++++----- skyvern/client/server/__init__.py | 4 + skyvern/client/server/client.py | 99 ++ skyvern/client/server/raw_client.py | 92 ++ skyvern/client/types/__init__.py | 190 +++- skyvern/client/types/action.py | 3 + skyvern/client/types/action_block.py | 2 + skyvern/client/types/action_block_yaml.py | 1 + ..._extraction_schema.py => action_output.py} | 2 +- skyvern/client/types/action_type.py | 3 + skyvern/client/types/artifact.py | 4 + skyvern/client/types/artifact_type.py | 1 + skyvern/client/types/block_type.py | 2 + skyvern/client/types/browser_profile.py | 1 + .../client/types/bulk_cancel_runs_response.py | 27 + skyvern/client/types/code_block.py | 1 + skyvern/client/types/code_block_yaml.py | 1 + skyvern/client/types/conditional_block.py | 1 + .../client/types/conditional_block_yaml.py | 1 + ..._browser_session_request_proxy_location.py | 10 + skyvern/client/types/download_to_s3block.py | 1 + .../client/types/download_to_s3block_yaml.py | 1 + skyvern/client/types/extraction_block.py | 2 + skyvern/client/types/extraction_block_yaml.py | 1 + skyvern/client/types/file_download_block.py | 2 + .../client/types/file_download_block_yaml.py | 1 + skyvern/client/types/file_info.py | 10 + skyvern/client/types/file_parser_block.py | 1 + .../client/types/file_parser_block_yaml.py | 3 +- skyvern/client/types/file_upload_block.py | 1 + .../client/types/file_upload_block_yaml.py | 1 + skyvern/client/types/for_loop_block.py | 12 +- .../types/for_loop_block_loop_blocks_item.py | 236 ++++- skyvern/client/types/for_loop_block_yaml.py | 9 +- .../for_loop_block_yaml_loop_blocks_item.py | 114 ++- skyvern/client/types/geo_target.py | 12 +- skyvern/client/types/get_run_response.py | 58 +- .../client/types/google_sheets_read_block.py | 49 + ...oogle_sheets_read_block_parameters_item.py | 277 ++++++ .../types/google_sheets_read_block_yaml.py | 38 + .../client/types/google_sheets_write_block.py | 53 ++ ...ogle_sheets_write_block_parameters_item.py | 277 ++++++ .../google_sheets_write_block_write_mode.py | 5 + .../types/google_sheets_write_block_yaml.py | 42 + ...ogle_sheets_write_block_yaml_write_mode.py | 5 + skyvern/client/types/http_request_block.py | 1 + .../client/types/http_request_block_yaml.py | 1 + .../client/types/human_interaction_block.py | 2 + .../types/human_interaction_block_yaml.py | 1 + skyvern/client/types/login_block.py | 2 + skyvern/client/types/login_block_yaml.py | 1 + skyvern/client/types/navigation_block.py | 2 + skyvern/client/types/navigation_block_yaml.py | 1 + skyvern/client/types/pdf_parser_block.py | 1 + skyvern/client/types/pdf_parser_block_yaml.py | 1 + skyvern/client/types/print_page_block.py | 1 + skyvern/client/types/print_page_block_yaml.py | 1 + skyvern/client/types/run_engine.py | 3 +- .../types/run_webhook_replay_response.py | 67 ++ skyvern/client/types/send_email_block.py | 1 + skyvern/client/types/send_email_block_yaml.py | 1 + ...chemas_credential_type_credential_type.py} | 2 +- skyvern/client/types/task_block.py | 2 + skyvern/client/types/task_block_yaml.py | 1 + skyvern/client/types/task_run_list_item.py | 2 +- ...un_request_input_data_extraction_schema.py | 7 + ... task_run_request_input_proxy_location.py} | 2 +- ..._request.py => task_run_request_output.py} | 18 +- ...n_request_output_data_extraction_schema.py | 7 + ...task_run_request_output_proxy_location.py} | 4 +- skyvern/client/types/task_run_response.py | 9 +- skyvern/client/types/task_v2block.py | 1 + skyvern/client/types/task_v2block_yaml.py | 1 + skyvern/client/types/text_prompt_block.py | 1 + .../client/types/text_prompt_block_yaml.py | 1 + skyvern/client/types/thought.py | 1 + skyvern/client/types/upload_to_s3block.py | 1 + .../client/types/upload_to_s3block_yaml.py | 1 + skyvern/client/types/url_block.py | 2 + skyvern/client/types/url_block_yaml.py | 1 + skyvern/client/types/user_defined_error.py | 1 + skyvern/client/types/validation_block.py | 2 + skyvern/client/types/validation_block_yaml.py | 1 + skyvern/client/types/wait_block.py | 1 + skyvern/client/types/wait_block_yaml.py | 1 + skyvern/client/types/while_loop_block.py | 21 +- .../while_loop_block_loop_blocks_item.py | 231 ++++- skyvern/client/types/while_loop_block_yaml.py | 9 +- .../while_loop_block_yaml_loop_blocks_item.py | 116 ++- skyvern/client/types/workflow.py | 6 + .../types/workflow_create_yaml_request.py | 4 + skyvern/client/types/workflow_definition.py | 3 + .../types/workflow_definition_blocks_item.py | 158 +++- .../client/types/workflow_definition_yaml.py | 3 + .../workflow_definition_yaml_blocks_item.py | 137 ++- skyvern/client/types/workflow_request.py | 1 + skyvern/client/types/workflow_run.py | 6 + skyvern/client/types/workflow_run_block.py | 1 + ...rkflow_run_request_input_proxy_location.py | 10 + ...uest.py => workflow_run_request_output.py} | 16 +- ...kflow_run_request_output_proxy_location.py | 10 + skyvern/client/types/workflow_run_response.py | 14 +- .../client/types/workflow_trigger_block.py | 1 + .../types/workflow_trigger_block_yaml.py | 1 + skyvern/client/workflows/__init__.py | 4 + skyvern/client/workflows/client.py | 115 +++ skyvern/client/workflows/raw_client.py | 152 +++ tests/unit/test_mcp_block_type_parity.py | 17 +- tests/unit/test_sdk_run_metadata.py | 2 +- uv.lock | 2 +- 240 files changed, 7485 insertions(+), 1430 deletions(-) create mode 100644 skyvern-ts/client/src/api/client/requests/BulkCancelRunsRequest.ts create mode 100644 skyvern-ts/client/src/api/client/requests/GetWorkflowRunsByIdRequest.ts create mode 100644 skyvern-ts/client/src/api/client/requests/RetryWorkflowRunRequest.ts delete mode 100644 skyvern-ts/client/src/api/client/requests/RunTaskRequest.ts delete mode 100644 skyvern-ts/client/src/api/client/requests/RunWorkflowRequest.ts create mode 100644 skyvern-ts/client/src/api/client/requests/TaskRunRequestInput.ts create mode 100644 skyvern-ts/client/src/api/client/requests/UpdateBrowserProfileRequest.ts create mode 100644 skyvern-ts/client/src/api/client/requests/WorkflowRunRequestInput.ts create mode 100644 skyvern-ts/client/src/api/errors/InternalServerError.ts create mode 100644 skyvern-ts/client/src/api/errors/RangeNotSatisfiableError.ts create mode 100644 skyvern-ts/client/src/api/resources/server/client/Client.ts create mode 100644 skyvern-ts/client/src/api/resources/server/client/index.ts create mode 100644 skyvern-ts/client/src/api/resources/server/index.ts create mode 100644 skyvern-ts/client/src/api/resources/workflows/client/Client.ts create mode 100644 skyvern-ts/client/src/api/resources/workflows/client/index.ts create mode 100644 skyvern-ts/client/src/api/resources/workflows/index.ts create mode 100644 skyvern-ts/client/src/api/types/BulkCancelRunsResponse.ts create mode 100644 skyvern-ts/client/src/api/types/GoogleSheetsReadBlock.ts create mode 100644 skyvern-ts/client/src/api/types/GoogleSheetsReadBlockParametersItem.ts create mode 100644 skyvern-ts/client/src/api/types/GoogleSheetsReadBlockYaml.ts create mode 100644 skyvern-ts/client/src/api/types/GoogleSheetsWriteBlock.ts create mode 100644 skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockParametersItem.ts create mode 100644 skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockYaml.ts create mode 100644 skyvern-ts/client/src/api/types/RunWebhookReplayResponse.ts create mode 100644 skyvern-ts/client/src/api/types/SkyvernSchemasCredentialTypeCredentialType.ts delete mode 100644 skyvern-ts/client/src/api/types/SkyvernSchemasRunBlocksCredentialType.ts rename skyvern-ts/client/src/api/types/{TaskRunRequest.ts => TaskRunRequestOutput.ts} (78%) rename skyvern-ts/client/src/api/types/{WorkflowRunRequest.ts => WorkflowRunRequestOutput.ts} (77%) create mode 100644 skyvern-ts/client/tests/wire/server.test.ts create mode 100644 skyvern-ts/client/tests/wire/workflows.test.ts create mode 100644 skyvern/client/errors/internal_server_error.py create mode 100644 skyvern/client/errors/range_not_satisfiable_error.py create mode 100644 skyvern/client/server/__init__.py create mode 100644 skyvern/client/server/client.py create mode 100644 skyvern/client/server/raw_client.py rename skyvern/client/types/{task_run_request_data_extraction_schema.py => action_output.py} (77%) create mode 100644 skyvern/client/types/bulk_cancel_runs_response.py create mode 100644 skyvern/client/types/create_browser_session_request_proxy_location.py create mode 100644 skyvern/client/types/google_sheets_read_block.py create mode 100644 skyvern/client/types/google_sheets_read_block_parameters_item.py create mode 100644 skyvern/client/types/google_sheets_read_block_yaml.py create mode 100644 skyvern/client/types/google_sheets_write_block.py create mode 100644 skyvern/client/types/google_sheets_write_block_parameters_item.py create mode 100644 skyvern/client/types/google_sheets_write_block_write_mode.py create mode 100644 skyvern/client/types/google_sheets_write_block_yaml.py create mode 100644 skyvern/client/types/google_sheets_write_block_yaml_write_mode.py create mode 100644 skyvern/client/types/run_webhook_replay_response.py rename skyvern/client/types/{skyvern_schemas_run_blocks_credential_type.py => skyvern_schemas_credential_type_credential_type.py} (73%) create mode 100644 skyvern/client/types/task_run_request_input_data_extraction_schema.py rename skyvern/client/types/{workflow_run_request_proxy_location.py => task_run_request_input_proxy_location.py} (56%) rename skyvern/client/types/{task_run_request.py => task_run_request_output.py} (84%) create mode 100644 skyvern/client/types/task_run_request_output_data_extraction_schema.py rename skyvern/client/types/{task_run_request_proxy_location.py => task_run_request_output_proxy_location.py} (55%) create mode 100644 skyvern/client/types/workflow_run_request_input_proxy_location.py rename skyvern/client/types/{workflow_run_request.py => workflow_run_request_output.py} (81%) create mode 100644 skyvern/client/types/workflow_run_request_output_proxy_location.py create mode 100644 skyvern/client/workflows/__init__.py create mode 100644 skyvern/client/workflows/client.py create mode 100644 skyvern/client/workflows/raw_client.py diff --git a/packages/skyvern-ui/pyproject.toml b/packages/skyvern-ui/pyproject.toml index 4037f0d4f..14294e42c 100644 --- a/packages/skyvern-ui/pyproject.toml +++ b/packages/skyvern-ui/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "skyvern-ui" -version = "1.0.36" +version = "1.0.37" description = "Prebuilt Skyvern UI assets for the Skyvern CLI" authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }] requires-python = ">=3.11,<3.14" diff --git a/pyproject.toml b/pyproject.toml index 08bd9230f..0e30c6a15 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "skyvern" -version = "1.0.36" +version = "1.0.37" description = "" authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }] requires-python = ">=3.11,<3.14" diff --git a/skyvern-ts/client/README.md b/skyvern-ts/client/README.md index 4ef64c35f..485568451 100644 --- a/skyvern-ts/client/README.md +++ b/skyvern-ts/client/README.md @@ -41,9 +41,7 @@ import { SkyvernClient } from "@skyvern/client"; const client = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); await client.runTask({ "x-user-agent": "x-user-agent", - body: { - prompt: "Find the top 3 posts on Hacker News." - } + prompt: "Find the top 3 posts on Hacker News." }); ``` diff --git a/skyvern-ts/client/package-lock.json b/skyvern-ts/client/package-lock.json index 7d2d6f469..2738c94c9 100644 --- a/skyvern-ts/client/package-lock.json +++ b/skyvern-ts/client/package-lock.json @@ -1,12 +1,12 @@ { "name": "@skyvern/client", - "version": "1.0.32", + "version": "1.0.37", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@skyvern/client", - "version": "1.0.32", + "version": "1.0.37", "dependencies": { "playwright": "^1.48.0" }, @@ -842,9 +842,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", - "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", + "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", "cpu": [ "arm" ], @@ -856,9 +856,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", - "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", + "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", "cpu": [ "arm64" ], @@ -870,9 +870,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", - "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", + "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", "cpu": [ "arm64" ], @@ -884,9 +884,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", - "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", + "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", "cpu": [ "x64" ], @@ -898,9 +898,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", - "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", + "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", "cpu": [ "arm64" ], @@ -912,9 +912,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", - "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", + "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", "cpu": [ "x64" ], @@ -926,9 +926,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", - "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", + "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", "cpu": [ "arm" ], @@ -943,9 +943,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", - "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", + "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", "cpu": [ "arm" ], @@ -960,9 +960,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", - "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", + "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", "cpu": [ "arm64" ], @@ -977,9 +977,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", - "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", + "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", "cpu": [ "arm64" ], @@ -994,9 +994,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", - "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", + "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", "cpu": [ "loong64" ], @@ -1011,9 +1011,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", - "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", + "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", "cpu": [ "loong64" ], @@ -1028,9 +1028,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", - "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", + "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", "cpu": [ "ppc64" ], @@ -1045,9 +1045,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", - "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", + "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", "cpu": [ "ppc64" ], @@ -1062,9 +1062,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", - "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", + "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", "cpu": [ "riscv64" ], @@ -1079,9 +1079,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", - "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", + "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", "cpu": [ "riscv64" ], @@ -1096,9 +1096,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", - "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", + "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", "cpu": [ "s390x" ], @@ -1113,9 +1113,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", - "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", + "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", "cpu": [ "x64" ], @@ -1130,9 +1130,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", - "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", + "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", "cpu": [ "x64" ], @@ -1147,9 +1147,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", - "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", + "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", "cpu": [ "x64" ], @@ -1161,9 +1161,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", - "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", + "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", "cpu": [ "arm64" ], @@ -1175,9 +1175,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", - "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", + "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", - "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", + "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", "cpu": [ "ia32" ], @@ -1203,9 +1203,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", - "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", + "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", "cpu": [ "x64" ], @@ -1217,9 +1217,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", - "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", + "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", "cpu": [ "x64" ], @@ -1255,32 +1255,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -1682,9 +1660,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.25", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.25.tgz", - "integrity": "sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA==", + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1759,9 +1737,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001791", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", - "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", "dev": true, "funding": [ { @@ -1942,9 +1920,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.348", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.348.tgz", - "integrity": "sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==", + "version": "1.5.364", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz", + "integrity": "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==", "dev": true, "license": "ISC" }, @@ -1956,9 +1934,9 @@ "license": "MIT" }, "node_modules/enhanced-resolve": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", - "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz", + "integrity": "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==", "dev": true, "license": "MIT", "dependencies": { @@ -2113,9 +2091,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { @@ -2181,9 +2159,9 @@ "license": "ISC" }, "node_modules/graphql": { - "version": "16.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", - "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.14.0.tgz", + "integrity": "sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==", "dev": true, "license": "MIT", "engines": { @@ -2431,11 +2409,14 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", + "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/outvariant": { "version": "1.4.3", @@ -2489,12 +2470,12 @@ } }, "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.1" + "playwright-core": "1.60.0" }, "bin": { "playwright": "cli.js" @@ -2507,9 +2488,9 @@ } }, "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -2519,9 +2500,9 @@ } }, "node_modules/postcss": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz", - "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "dev": true, "funding": [ { @@ -2539,7 +2520,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -2575,9 +2556,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", - "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz", + "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", "dev": true, "license": "MIT", "dependencies": { @@ -2591,34 +2572,41 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.2", - "@rollup/rollup-android-arm64": "4.60.2", - "@rollup/rollup-darwin-arm64": "4.60.2", - "@rollup/rollup-darwin-x64": "4.60.2", - "@rollup/rollup-freebsd-arm64": "4.60.2", - "@rollup/rollup-freebsd-x64": "4.60.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", - "@rollup/rollup-linux-arm-musleabihf": "4.60.2", - "@rollup/rollup-linux-arm64-gnu": "4.60.2", - "@rollup/rollup-linux-arm64-musl": "4.60.2", - "@rollup/rollup-linux-loong64-gnu": "4.60.2", - "@rollup/rollup-linux-loong64-musl": "4.60.2", - "@rollup/rollup-linux-ppc64-gnu": "4.60.2", - "@rollup/rollup-linux-ppc64-musl": "4.60.2", - "@rollup/rollup-linux-riscv64-gnu": "4.60.2", - "@rollup/rollup-linux-riscv64-musl": "4.60.2", - "@rollup/rollup-linux-s390x-gnu": "4.60.2", - "@rollup/rollup-linux-x64-gnu": "4.60.2", - "@rollup/rollup-linux-x64-musl": "4.60.2", - "@rollup/rollup-openbsd-x64": "4.60.2", - "@rollup/rollup-openharmony-arm64": "4.60.2", - "@rollup/rollup-win32-arm64-msvc": "4.60.2", - "@rollup/rollup-win32-ia32-msvc": "4.60.2", - "@rollup/rollup-win32-x64-gnu": "4.60.2", - "@rollup/rollup-win32-x64-msvc": "4.60.2", + "@rollup/rollup-android-arm-eabi": "4.60.4", + "@rollup/rollup-android-arm64": "4.60.4", + "@rollup/rollup-darwin-arm64": "4.60.4", + "@rollup/rollup-darwin-x64": "4.60.4", + "@rollup/rollup-freebsd-arm64": "4.60.4", + "@rollup/rollup-freebsd-x64": "4.60.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", + "@rollup/rollup-linux-arm-musleabihf": "4.60.4", + "@rollup/rollup-linux-arm64-gnu": "4.60.4", + "@rollup/rollup-linux-arm64-musl": "4.60.4", + "@rollup/rollup-linux-loong64-gnu": "4.60.4", + "@rollup/rollup-linux-loong64-musl": "4.60.4", + "@rollup/rollup-linux-ppc64-gnu": "4.60.4", + "@rollup/rollup-linux-ppc64-musl": "4.60.4", + "@rollup/rollup-linux-riscv64-gnu": "4.60.4", + "@rollup/rollup-linux-riscv64-musl": "4.60.4", + "@rollup/rollup-linux-s390x-gnu": "4.60.4", + "@rollup/rollup-linux-x64-gnu": "4.60.4", + "@rollup/rollup-linux-x64-musl": "4.60.4", + "@rollup/rollup-openbsd-x64": "4.60.4", + "@rollup/rollup-openharmony-arm64": "4.60.4", + "@rollup/rollup-win32-arm64-msvc": "4.60.4", + "@rollup/rollup-win32-ia32-msvc": "4.60.4", + "@rollup/rollup-win32-x64-gnu": "4.60.4", + "@rollup/rollup-win32-x64-msvc": "4.60.4", "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/schema-utils": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", @@ -2640,9 +2628,9 @@ } }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { @@ -2813,9 +2801,9 @@ } }, "node_modules/terser": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz", - "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.48.0.tgz", + "integrity": "sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -2832,9 +2820,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2854,12 +2842,39 @@ "webpack": "^5.1.0" }, "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, "@swc/core": { "optional": true }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, "esbuild": { "optional": true }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, "uglify-js": { "optional": true } @@ -2958,22 +2973,22 @@ } }, "node_modules/tldts": { - "version": "7.0.29", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.29.tgz", - "integrity": "sha512-JIXCerhudr/N6OWLwLF1HVsTTUo7ry6qHa5eWZEkiMuxsIiAACL55tGLfqfHfoH7QaMQUW8fngD7u7TxWexYQg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.0.tgz", + "integrity": "sha512-yHBe+zVfzNZ3QfTPW/Z6KK1G2t340gFjMHqI/4KKSt/abzYydzuCnpqdaF5gCCABby+9Yfbj59oR5F2Fd5CBzg==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.29" + "tldts-core": "^7.4.0" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.29", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.29.tgz", - "integrity": "sha512-W99NuU7b1DcG3uJ3v9k9VztCH3WialNbBkBft5wCs8V8mexu0XQqaZEYb9l9RNNzK8+3EJ9PKWB0/RUtTQ/o+Q==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.1.tgz", + "integrity": "sha512-sc2nGvGbixlJRHwTh/qQdPXTxJU1UDJboGPQm4d/01YUJ9r/u6aeIulQvEaxUlvKDN7hb1qCLjax+jhVAPLa/g==", "dev": true, "license": "MIT" }, @@ -3004,9 +3019,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.7", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.7.tgz", - "integrity": "sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.6.0.tgz", + "integrity": "sha512-dsJO0S+T7grTDWTc4a0nTygXGjKncVUpx8Y+af8EvI/D5WgTJby5UEk5eoMCB9EcLQmnvitqh99MqtjtHgAwFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3020,8 +3035,14 @@ "node": ">=12.0.0" }, "peerDependencies": { + "loader-utils": "*", "typescript": "*", - "webpack": "^5.0.0" + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "loader-utils": { + "optional": true + } } }, "node_modules/type-fest": { @@ -3113,13 +3134,13 @@ } }, "node_modules/vite-node/node_modules/@types/node": { - "version": "25.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", - "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "version": "25.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", + "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", "extraneous": true, "license": "MIT", "dependencies": { - "undici-types": "~7.19.0" + "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/vite-node/node_modules/fdir": { @@ -3169,16 +3190,16 @@ } }, "node_modules/vite-node/node_modules/undici-types": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", - "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "extraneous": true, "license": "MIT" }, "node_modules/vite-node/node_modules/vite": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", - "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.3.tgz", + "integrity": "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==", "dev": true, "license": "MIT", "dependencies": { @@ -3397,9 +3418,9 @@ } }, "node_modules/vitest/node_modules/vite": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", - "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.3.tgz", + "integrity": "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==", "dev": true, "license": "MIT", "dependencies": { @@ -3486,13 +3507,12 @@ } }, "node_modules/webpack": { - "version": "5.106.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", - "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", + "version": "5.107.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.107.2.tgz", + "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", @@ -3502,20 +3522,20 @@ "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.20.0", - "es-module-lexer": "^2.0.0", + "enhanced-resolve": "^5.22.0", + "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "loader-runner": "^4.3.1", + "loader-runner": "^4.3.2", "mime-db": "^1.54.0", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.17", + "terser-webpack-plugin": "^5.5.0", "watchpack": "^2.5.1", - "webpack-sources": "^3.3.4" + "webpack-sources": "^3.5.0" }, "bin": { "webpack": "bin/webpack.js" @@ -3534,9 +3554,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.1.tgz", - "integrity": "sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.0.tgz", + "integrity": "sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==", "dev": true, "license": "MIT", "engines": { diff --git a/skyvern-ts/client/package.json b/skyvern-ts/client/package.json index a49eace1d..ac4cc0381 100644 --- a/skyvern-ts/client/package.json +++ b/skyvern-ts/client/package.json @@ -1,6 +1,6 @@ { "name": "@skyvern/client", - "version": "1.0.32", + "version": "1.0.37", "private": false, "repository": { "type": "git", @@ -73,16 +73,5 @@ "publishConfig": { "access": "public", "provenance": true - }, - "pnpm": { - "overrides": { - "picomatch@2": ">=2.3.2", - "picomatch@4": ">=4.0.4", - "postcss": ">=8.5.10", - "rollup": ">=4.59.0", - "serialize-javascript": ">=7.0.5", - "vite": "^7.3.2", - "webpack": ">=5.104.1" - } } } diff --git a/skyvern-ts/client/pnpm-lock.yaml b/skyvern-ts/client/pnpm-lock.yaml index 8a4dee88e..e98202b0d 100644 --- a/skyvern-ts/client/pnpm-lock.yaml +++ b/skyvern-ts/client/pnpm-lock.yaml @@ -2,20 +2,12 @@ lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - picomatch@2: '>=2.3.2' - picomatch@4: '>=4.0.4' - postcss: '>=8.5.10' - rollup: '>=4.59.0' - serialize-javascript: '>=7.0.5' - vite: ^7.3.2 - webpack: '>=5.104.1' importers: .: dependencies: playwright: specifier: ^1.48.0 - version: 1.59.1 + version: 1.60.0 devDependencies: '@biomejs/biome': specifier: 2.2.5 @@ -28,16 +20,16 @@ importers: version: 2.11.2(@types/node@18.19.130)(typescript@5.7.3) ts-loader: specifier: ^9.5.1 - version: 9.5.7(typescript@5.7.3)(webpack@5.106.2) + version: 9.5.4(typescript@5.7.3)(webpack@5.102.1) typescript: specifier: ~5.7.2 version: 5.7.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@18.19.130)(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(terser@5.46.2) + version: 3.2.4(@types/node@18.19.130)(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(terser@5.44.0) webpack: - specifier: '>=5.104.1' - version: 5.106.2 + specifier: ^5.97.1 + version: 5.102.1 packages: '@biomejs/biome@2.2.5': resolution: {integrity: sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw==} @@ -87,160 +79,160 @@ packages: resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + '@inquirer/ansi@1.0.1': + resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} engines: {node: '>=18'} - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + '@inquirer/confirm@5.1.19': + resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + '@inquirer/core@10.3.0': + resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + '@inquirer/figures@1.0.14': + resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} engines: {node: '>=18'} - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + '@inquirer/type@3.0.9': + resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -267,104 +259,92 @@ packages: resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@rollup/rollup-android-arm-eabi@4.60.2': - resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==} + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.60.2': - resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==} + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.60.2': - resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==} + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.60.2': - resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==} + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.60.2': - resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==} + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.2': - resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==} + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.60.2': - resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.60.2': - resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==} + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.60.2': - resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==} + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.60.2': - resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==} + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.60.2': - resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==} + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.60.2': - resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==} - cpu: [loong64] - os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.60.2': - resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==} + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.60.2': - resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.60.2': - resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==} + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.60.2': - resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==} + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.60.2': - resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==} + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.60.2': - resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==} + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.60.2': - resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==} + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.60.2': - resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==} - cpu: [x64] - os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.60.2': - resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==} + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.60.2': - resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==} + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.2': - resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==} + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.2': - resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==} + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.2': - resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==} + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} cpu: [x64] os: [win32] '@types/chai@5.2.3': @@ -391,7 +371,7 @@ packages: resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: msw: ^2.4.9 - vite: ^7.3.2 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true @@ -446,8 +426,8 @@ packages: engines: {node: '>=10.13.0'} peerDependencies: acorn: ^8.14.0 - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true ajv-formats@2.1.1: @@ -461,8 +441,8 @@ packages: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 - ajv@8.20.0: - resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -472,15 +452,14 @@ packages: assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - baseline-browser-mapping@2.10.27: - resolution: {integrity: sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==} - engines: {node: '>=6.0.0'} + baseline-browser-mapping@2.8.19: + resolution: {integrity: sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==} hasBin: true braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.2: - resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + browserslist@4.27.0: + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-from@1.1.2: @@ -488,16 +467,16 @@ packages: cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - caniuse-lite@1.0.30001791: - resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} @@ -529,19 +508,17 @@ packages: deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} - electron-to-chromium@1.5.349: - resolution: {integrity: sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A==} + electron-to-chromium@1.5.238: + resolution: {integrity: sha512-khBdc+w/Gv+cS8e/Pbnaw/FXcBUeKrRVik9IxfXtgREOWyJhR4tj43n3amkVogJ/yeQUqzkrZcFhtIxIdqmmcQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enhanced-resolve@5.21.0: - resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} - esbuild@0.27.7: - resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} hasBin: true escalade@3.2.0: @@ -564,8 +541,8 @@ packages: events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -575,7 +552,7 @@ packages: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: - picomatch: '>=4.0.4' + picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true @@ -597,8 +574,8 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphql@16.13.2: - resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -618,22 +595,27 @@ packages: engines: {node: '>= 10.13.0'} js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - loader-runner@4.3.2: - resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -649,14 +631,14 @@ packages: mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-releases@2.0.38: - resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} + node-releases@2.0.26: + resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} path-to-regexp@6.3.0: @@ -668,20 +650,25 @@ packages: engines: {node: '>= 14.16'} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - playwright-core@1.59.1: - resolution: {integrity: sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==} + playwright-core@1.60.0: + resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} engines: {node: '>=18'} hasBin: true - playwright@1.59.1: - resolution: {integrity: sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==} + playwright@1.60.0: + resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==} engines: {node: '>=18'} hasBin: true - postcss@8.5.13: - resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -690,17 +677,21 @@ packages: engines: {node: '>=0.10.0'} rettime@0.7.0: resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} - rollup@4.60.2: - resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==} + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} schema-utils@4.3.3: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} signal-exit@4.1.0: @@ -740,17 +731,17 @@ packages: supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - tapable@2.3.3: - resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - terser-webpack-plugin@5.5.0: - resolution: {integrity: sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==} + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' esbuild: '*' uglify-js: '*' - webpack: '>=5.104.1' + webpack: ^5.1.0 peerDependenciesMeta: '@swc/core': optional: true @@ -758,16 +749,16 @@ packages: optional: true uglify-js: optional: true - terser@5.46.2: - resolution: {integrity: sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinypool@1.1.1: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} @@ -778,23 +769,23 @@ packages: tinyspy@4.0.4: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} - tldts-core@7.0.30: - resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==} - tldts@7.0.30: - resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==} + tldts-core@7.0.17: + resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} + tldts@7.0.17: + resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} hasBin: true to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - tough-cookie@6.0.1: - resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} - ts-loader@9.5.7: - resolution: {integrity: sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg==} + ts-loader@9.5.4: + resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' - webpack: '>=5.104.1' + webpack: ^5.0.0 type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -804,8 +795,8 @@ packages: hasBin: true undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -813,8 +804,8 @@ packages: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@7.3.2: - resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} + vite@7.1.11: + resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -879,14 +870,14 @@ packages: optional: true jsdom: optional: true - watchpack@2.5.1: - resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + watchpack@2.4.4: + resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} - webpack-sources@3.4.1: - resolution: {integrity: sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==} + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.106.2: - resolution: {integrity: sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==} + webpack@5.102.1: + resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -949,70 +940,70 @@ snapshots: '@bundled-es-modules/statuses@1.0.1': dependencies: statuses: 2.0.2 - '@esbuild/aix-ppc64@0.27.7': + '@esbuild/aix-ppc64@0.25.11': optional: true - '@esbuild/android-arm64@0.27.7': + '@esbuild/android-arm64@0.25.11': optional: true - '@esbuild/android-arm@0.27.7': + '@esbuild/android-arm@0.25.11': optional: true - '@esbuild/android-x64@0.27.7': + '@esbuild/android-x64@0.25.11': optional: true - '@esbuild/darwin-arm64@0.27.7': + '@esbuild/darwin-arm64@0.25.11': optional: true - '@esbuild/darwin-x64@0.27.7': + '@esbuild/darwin-x64@0.25.11': optional: true - '@esbuild/freebsd-arm64@0.27.7': + '@esbuild/freebsd-arm64@0.25.11': optional: true - '@esbuild/freebsd-x64@0.27.7': + '@esbuild/freebsd-x64@0.25.11': optional: true - '@esbuild/linux-arm64@0.27.7': + '@esbuild/linux-arm64@0.25.11': optional: true - '@esbuild/linux-arm@0.27.7': + '@esbuild/linux-arm@0.25.11': optional: true - '@esbuild/linux-ia32@0.27.7': + '@esbuild/linux-ia32@0.25.11': optional: true - '@esbuild/linux-loong64@0.27.7': + '@esbuild/linux-loong64@0.25.11': optional: true - '@esbuild/linux-mips64el@0.27.7': + '@esbuild/linux-mips64el@0.25.11': optional: true - '@esbuild/linux-ppc64@0.27.7': + '@esbuild/linux-ppc64@0.25.11': optional: true - '@esbuild/linux-riscv64@0.27.7': + '@esbuild/linux-riscv64@0.25.11': optional: true - '@esbuild/linux-s390x@0.27.7': + '@esbuild/linux-s390x@0.25.11': optional: true - '@esbuild/linux-x64@0.27.7': + '@esbuild/linux-x64@0.25.11': optional: true - '@esbuild/netbsd-arm64@0.27.7': + '@esbuild/netbsd-arm64@0.25.11': optional: true - '@esbuild/netbsd-x64@0.27.7': + '@esbuild/netbsd-x64@0.25.11': optional: true - '@esbuild/openbsd-arm64@0.27.7': + '@esbuild/openbsd-arm64@0.25.11': optional: true - '@esbuild/openbsd-x64@0.27.7': + '@esbuild/openbsd-x64@0.25.11': optional: true - '@esbuild/openharmony-arm64@0.27.7': + '@esbuild/openharmony-arm64@0.25.11': optional: true - '@esbuild/sunos-x64@0.27.7': + '@esbuild/sunos-x64@0.25.11': optional: true - '@esbuild/win32-arm64@0.27.7': + '@esbuild/win32-arm64@0.25.11': optional: true - '@esbuild/win32-ia32@0.27.7': + '@esbuild/win32-ia32@0.25.11': optional: true - '@esbuild/win32-x64@0.27.7': + '@esbuild/win32-x64@0.25.11': optional: true - '@inquirer/ansi@1.0.2': {} - '@inquirer/confirm@5.1.21(@types/node@18.19.130)': + '@inquirer/ansi@1.0.1': {} + '@inquirer/confirm@5.1.19(@types/node@18.19.130)': dependencies: - '@inquirer/core': 10.3.2(@types/node@18.19.130) - '@inquirer/type': 3.0.10(@types/node@18.19.130) + '@inquirer/core': 10.3.0(@types/node@18.19.130) + '@inquirer/type': 3.0.9(@types/node@18.19.130) optionalDependencies: '@types/node': 18.19.130 - '@inquirer/core@10.3.2(@types/node@18.19.130)': + '@inquirer/core@10.3.0(@types/node@18.19.130)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@18.19.130) + '@inquirer/ansi': 1.0.1 + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@18.19.130) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 @@ -1020,8 +1011,8 @@ snapshots: yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 18.19.130 - '@inquirer/figures@1.0.15': {} - '@inquirer/type@3.0.10(@types/node@18.19.130)': + '@inquirer/figures@1.0.14': {} + '@inquirer/type@3.0.9(@types/node@18.19.130)': optionalDependencies: '@types/node': 18.19.130 '@jridgewell/gen-mapping@0.3.13': @@ -1052,55 +1043,49 @@ snapshots: is-node-process: 1.2.0 outvariant: 1.4.3 '@open-draft/until@2.1.0': {} - '@rollup/rollup-android-arm-eabi@4.60.2': + '@rollup/rollup-android-arm-eabi@4.52.5': optional: true - '@rollup/rollup-android-arm64@4.60.2': + '@rollup/rollup-android-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-arm64@4.60.2': + '@rollup/rollup-darwin-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-x64@4.60.2': + '@rollup/rollup-darwin-x64@4.52.5': optional: true - '@rollup/rollup-freebsd-arm64@4.60.2': + '@rollup/rollup-freebsd-arm64@4.52.5': optional: true - '@rollup/rollup-freebsd-x64@4.60.2': + '@rollup/rollup-freebsd-x64@4.52.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.2': + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.2': + '@rollup/rollup-linux-arm-musleabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.2': + '@rollup/rollup-linux-arm64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.60.2': + '@rollup/rollup-linux-arm64-musl@4.52.5': optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.2': + '@rollup/rollup-linux-loong64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-loong64-musl@4.60.2': + '@rollup/rollup-linux-ppc64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.2': + '@rollup/rollup-linux-riscv64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.2': + '@rollup/rollup-linux-riscv64-musl@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.2': + '@rollup/rollup-linux-s390x-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.2': + '@rollup/rollup-linux-x64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.2': + '@rollup/rollup-linux-x64-musl@4.52.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.60.2': + '@rollup/rollup-openharmony-arm64@4.52.5': optional: true - '@rollup/rollup-linux-x64-musl@4.60.2': + '@rollup/rollup-win32-arm64-msvc@4.52.5': optional: true - '@rollup/rollup-openbsd-x64@4.60.2': + '@rollup/rollup-win32-ia32-msvc@4.52.5': optional: true - '@rollup/rollup-openharmony-arm64@4.60.2': + '@rollup/rollup-win32-x64-gnu@4.52.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.2': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.2': - optional: true - '@rollup/rollup-win32-x64-gnu@4.60.2': - optional: true - '@rollup/rollup-win32-x64-msvc@4.60.2': + '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true '@types/chai@5.2.3': dependencies: @@ -1129,14 +1114,14 @@ snapshots: '@vitest/utils': 3.2.4 chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(vite@7.3.2(@types/node@18.19.130)(terser@5.46.2))': + '@vitest/mocker@3.2.4(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(vite@7.1.11(@types/node@18.19.130)(terser@5.44.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 0.30.19 optionalDependencies: msw: 2.11.2(@types/node@18.19.130)(typescript@5.7.3) - vite: 7.3.2(@types/node@18.19.130)(terser@5.46.2) + vite: 7.1.11(@types/node@18.19.130)(terser@5.44.0) '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 @@ -1148,7 +1133,7 @@ snapshots: '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.21 + magic-string: 0.30.19 pathe: 2.0.3 '@vitest/spy@3.2.4': dependencies: @@ -1221,18 +1206,18 @@ snapshots: '@xtuc/long': 4.2.2 '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} - acorn-import-phases@1.0.4(acorn@8.16.0): + acorn-import-phases@1.0.4(acorn@8.15.0): dependencies: - acorn: 8.16.0 - acorn@8.16.0: {} - ajv-formats@2.1.1(ajv@8.20.0): + acorn: 8.15.0 + acorn@8.15.0: {} + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.20.0 - ajv-keywords@5.1.0(ajv@8.20.0): + ajv: 8.17.1 + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.20.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 - ajv@8.20.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 fast-uri: 3.1.0 @@ -1243,24 +1228,24 @@ snapshots: dependencies: color-convert: 2.0.1 assertion-error@2.0.1: {} - baseline-browser-mapping@2.10.27: {} + baseline-browser-mapping@2.8.19: {} braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.28.2: + browserslist@4.27.0: dependencies: - baseline-browser-mapping: 2.10.27 - caniuse-lite: 1.0.30001791 - electron-to-chromium: 1.5.349 - node-releases: 2.0.38 - update-browserslist-db: 1.2.3(browserslist@4.28.2) + baseline-browser-mapping: 2.8.19 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.238 + node-releases: 2.0.26 + update-browserslist-db: 1.1.4(browserslist@4.27.0) buffer-from@1.1.2: {} cac@6.7.14: {} - caniuse-lite@1.0.30001791: {} + caniuse-lite@1.0.30001751: {} chai@5.3.3: dependencies: assertion-error: 2.0.1 - check-error: 2.1.3 + check-error: 2.1.1 deep-eql: 5.0.2 loupe: 3.2.1 pathval: 2.0.1 @@ -1268,7 +1253,7 @@ snapshots: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - check-error@2.1.3: {} + check-error@2.1.1: {} chrome-trace-event@1.0.4: {} cli-width@4.1.0: {} cliui@8.0.1: @@ -1286,42 +1271,41 @@ snapshots: dependencies: ms: 2.1.3 deep-eql@5.0.2: {} - electron-to-chromium@1.5.349: {} + electron-to-chromium@1.5.238: {} emoji-regex@8.0.0: {} - enhanced-resolve@5.21.0: + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.3 + tapable: 2.3.0 es-module-lexer@1.7.0: {} - es-module-lexer@2.1.0: {} - esbuild@0.27.7: + esbuild@0.25.11: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.7 - '@esbuild/android-arm': 0.27.7 - '@esbuild/android-arm64': 0.27.7 - '@esbuild/android-x64': 0.27.7 - '@esbuild/darwin-arm64': 0.27.7 - '@esbuild/darwin-x64': 0.27.7 - '@esbuild/freebsd-arm64': 0.27.7 - '@esbuild/freebsd-x64': 0.27.7 - '@esbuild/linux-arm': 0.27.7 - '@esbuild/linux-arm64': 0.27.7 - '@esbuild/linux-ia32': 0.27.7 - '@esbuild/linux-loong64': 0.27.7 - '@esbuild/linux-mips64el': 0.27.7 - '@esbuild/linux-ppc64': 0.27.7 - '@esbuild/linux-riscv64': 0.27.7 - '@esbuild/linux-s390x': 0.27.7 - '@esbuild/linux-x64': 0.27.7 - '@esbuild/netbsd-arm64': 0.27.7 - '@esbuild/netbsd-x64': 0.27.7 - '@esbuild/openbsd-arm64': 0.27.7 - '@esbuild/openbsd-x64': 0.27.7 - '@esbuild/openharmony-arm64': 0.27.7 - '@esbuild/sunos-x64': 0.27.7 - '@esbuild/win32-arm64': 0.27.7 - '@esbuild/win32-ia32': 0.27.7 - '@esbuild/win32-x64': 0.27.7 + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 escalade@3.2.0: {} eslint-scope@5.1.1: dependencies: @@ -1336,12 +1320,12 @@ snapshots: dependencies: '@types/estree': 1.0.8 events@3.3.0: {} - expect-type@1.3.0: {} + expect-type@1.2.2: {} fast-deep-equal@3.1.3: {} fast-uri@3.1.0: {} - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.3 fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -1352,7 +1336,7 @@ snapshots: get-caller-file@2.0.5: {} glob-to-regexp@0.4.1: {} graceful-fs@4.2.11: {} - graphql@16.13.2: {} + graphql@16.11.0: {} has-flag@4.0.0: {} headers-polyfill@4.0.3: {} is-fullwidth-code-point@3.0.0: {} @@ -1364,30 +1348,34 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 js-tokens@9.0.1: {} + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@1.0.0: {} - loader-runner@4.3.2: {} + loader-runner@4.3.1: {} loupe@3.2.1: {} - magic-string@0.30.21: + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 merge-stream@2.0.0: {} micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 4.0.4 - mime-db@1.54.0: {} + picomatch: 2.3.1 + mime-db@1.52.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 ms@2.1.3: {} msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 - '@inquirer/confirm': 5.1.21(@types/node@18.19.130) + '@inquirer/confirm': 5.1.19(@types/node@18.19.130) '@mswjs/interceptors': 0.39.8 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.6 - graphql: 16.13.2 + graphql: 16.11.0 headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 @@ -1395,7 +1383,7 @@ snapshots: picocolors: 1.1.1 rettime: 0.7.0 strict-event-emitter: 0.5.1 - tough-cookie: 6.0.1 + tough-cookie: 6.0.0 type-fest: 4.41.0 yargs: 17.7.2 optionalDependencies: @@ -1403,66 +1391,71 @@ snapshots: transitivePeerDependencies: - '@types/node' mute-stream@2.0.0: {} - nanoid@3.3.12: {} + nanoid@3.3.11: {} neo-async@2.6.2: {} - node-releases@2.0.38: {} + node-releases@2.0.26: {} outvariant@1.4.3: {} path-to-regexp@6.3.0: {} pathe@2.0.3: {} pathval@2.0.1: {} picocolors@1.1.1: {} - picomatch@4.0.4: {} - playwright-core@1.59.1: {} - playwright@1.59.1: + picomatch@2.3.1: {} + picomatch@4.0.3: {} + playwright-core@1.60.0: {} + playwright@1.60.0: dependencies: - playwright-core: 1.59.1 + playwright-core: 1.60.0 optionalDependencies: fsevents: 2.3.2 - postcss@8.5.13: + postcss@8.5.6: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 require-directory@2.1.1: {} require-from-string@2.0.2: {} rettime@0.7.0: {} - rollup@4.60.2: + rollup@4.52.5: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.60.2 - '@rollup/rollup-android-arm64': 4.60.2 - '@rollup/rollup-darwin-arm64': 4.60.2 - '@rollup/rollup-darwin-x64': 4.60.2 - '@rollup/rollup-freebsd-arm64': 4.60.2 - '@rollup/rollup-freebsd-x64': 4.60.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.60.2 - '@rollup/rollup-linux-arm-musleabihf': 4.60.2 - '@rollup/rollup-linux-arm64-gnu': 4.60.2 - '@rollup/rollup-linux-arm64-musl': 4.60.2 - '@rollup/rollup-linux-loong64-gnu': 4.60.2 - '@rollup/rollup-linux-loong64-musl': 4.60.2 - '@rollup/rollup-linux-ppc64-gnu': 4.60.2 - '@rollup/rollup-linux-ppc64-musl': 4.60.2 - '@rollup/rollup-linux-riscv64-gnu': 4.60.2 - '@rollup/rollup-linux-riscv64-musl': 4.60.2 - '@rollup/rollup-linux-s390x-gnu': 4.60.2 - '@rollup/rollup-linux-x64-gnu': 4.60.2 - '@rollup/rollup-linux-x64-musl': 4.60.2 - '@rollup/rollup-openbsd-x64': 4.60.2 - '@rollup/rollup-openharmony-arm64': 4.60.2 - '@rollup/rollup-win32-arm64-msvc': 4.60.2 - '@rollup/rollup-win32-ia32-msvc': 4.60.2 - '@rollup/rollup-win32-x64-gnu': 4.60.2 - '@rollup/rollup-win32-x64-msvc': 4.60.2 + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 fsevents: 2.3.3 + safe-buffer@5.2.1: {} schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.20.0 - ajv-formats: 2.1.1(ajv@8.20.0) - ajv-keywords: 5.1.0(ajv@8.20.0) - semver@7.7.4: {} + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + semver@7.7.3: {} + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 siginfo@2.0.0: {} signal-exit@4.1.0: {} source-map-js@1.2.1: {} @@ -1493,63 +1486,64 @@ snapshots: supports-color@8.1.1: dependencies: has-flag: 4.0.0 - tapable@2.3.3: {} - terser-webpack-plugin@5.5.0(webpack@5.106.2): + tapable@2.3.0: {} + terser-webpack-plugin@5.3.14(webpack@5.102.1): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.2 - webpack: 5.106.2 - terser@5.46.2: + serialize-javascript: 6.0.2 + terser: 5.44.0 + webpack: 5.102.1 + terser@5.44.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 + acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 tinybench@2.9.0: {} tinyexec@0.3.2: {} - tinyglobby@0.2.16: + tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 tinypool@1.1.1: {} tinyrainbow@2.0.0: {} tinyspy@4.0.4: {} - tldts-core@7.0.30: {} - tldts@7.0.30: + tldts-core@7.0.17: {} + tldts@7.0.17: dependencies: - tldts-core: 7.0.30 + tldts-core: 7.0.17 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tough-cookie@6.0.1: + tough-cookie@6.0.0: dependencies: - tldts: 7.0.30 - ts-loader@9.5.7(typescript@5.7.3)(webpack@5.106.2): + tldts: 7.0.17 + ts-loader@9.5.4(typescript@5.7.3)(webpack@5.102.1): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.21.0 + enhanced-resolve: 5.18.3 micromatch: 4.0.8 - semver: 7.7.4 + semver: 7.7.3 source-map: 0.7.6 typescript: 5.7.3 - webpack: 5.106.2 + webpack: 5.102.1 type-fest@4.41.0: {} typescript@5.7.3: {} undici-types@5.26.5: {} - update-browserslist-db@1.2.3(browserslist@4.28.2): + update-browserslist-db@1.1.4(browserslist@4.27.0): dependencies: - browserslist: 4.28.2 + browserslist: 4.27.0 escalade: 3.2.0 picocolors: 1.1.1 - vite-node@3.2.4(@types/node@18.19.130)(terser@5.46.2): + vite-node@3.2.4(@types/node@18.19.130)(terser@5.44.0): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.2(@types/node@18.19.130)(terser@5.46.2) + vite: 7.1.11(@types/node@18.19.130)(terser@5.44.0) transitivePeerDependencies: - '@types/node' - jiti @@ -1563,23 +1557,23 @@ snapshots: - terser - tsx - yaml - vite@7.3.2(@types/node@18.19.130)(terser@5.46.2): + vite@7.1.11(@types/node@18.19.130)(terser@5.44.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - postcss: 8.5.13 - rollup: 4.60.2 - tinyglobby: 0.2.16 + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 18.19.130 fsevents: 2.3.3 - terser: 5.46.2 - vitest@3.2.4(@types/node@18.19.130)(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(terser@5.46.2): + terser: 5.44.0 + vitest@3.2.4(@types/node@18.19.130)(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(terser@5.44.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(vite@7.3.2(@types/node@18.19.130)(terser@5.46.2)) + '@vitest/mocker': 3.2.4(msw@2.11.2(@types/node@18.19.130)(typescript@5.7.3))(vite@7.1.11(@types/node@18.19.130)(terser@5.44.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -1587,18 +1581,18 @@ snapshots: '@vitest/utils': 3.2.4 chai: 5.3.3 debug: 4.4.3 - expect-type: 1.3.0 - magic-string: 0.30.21 + expect-type: 1.2.2 + magic-string: 0.30.19 pathe: 2.0.3 - picomatch: 4.0.4 + picomatch: 4.0.3 std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.16 + tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.2(@types/node@18.19.130)(terser@5.46.2) - vite-node: 3.2.4(@types/node@18.19.130)(terser@5.46.2) + vite: 7.1.11(@types/node@18.19.130)(terser@5.44.0) + vite-node: 3.2.4(@types/node@18.19.130)(terser@5.44.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 18.19.130 @@ -1615,12 +1609,12 @@ snapshots: - terser - tsx - yaml - watchpack@2.5.1: + watchpack@2.4.4: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - webpack-sources@3.4.1: {} - webpack@5.106.2: + webpack-sources@3.3.3: {} + webpack@5.102.1: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -1628,24 +1622,25 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.2 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.27.0 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.21.0 - es-module-lexer: 2.1.0 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - loader-runner: 4.3.2 - mime-db: 1.54.0 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.3 - terser-webpack-plugin: 5.5.0(webpack@5.106.2) - watchpack: 2.5.1 - webpack-sources: 3.4.1 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(webpack@5.102.1) + watchpack: 2.4.4 + webpack-sources: 3.3.3 transitivePeerDependencies: - '@swc/core' - esbuild diff --git a/skyvern-ts/client/reference.md b/skyvern-ts/client/reference.md index 34e2444fe..28e50443b 100644 --- a/skyvern-ts/client/reference.md +++ b/skyvern-ts/client/reference.md @@ -128,6 +128,126 @@ await client.artifacts.getArtifactContent("artifact_id"); + + + + +## Server +
client.server.getVersion() -> Record<string, string> +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns the current Skyvern server version (git SHA for official builds). +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.server.getVersion(); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**requestOptions:** `Server.RequestOptions` + +
+
+
+
+ + +
+
+
+ +## Workflows +
client.workflows.resetWorkflowBrowserProfile(workflowPermanentId) -> void +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Clear the persisted browser profile for a workflow that uses `Save & Reuse Session`. The next run will start from a fresh browser state. Use when a saved profile is corrupted. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```typescript +await client.workflows.resetWorkflowBrowserProfile("wpid_123"); + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**workflowPermanentId:** `string` — The permanent ID of the workflow. Starts with `wpid_`. + +
+
+ +
+
+ +**requestOptions:** `Workflows.RequestOptions` + +
+
+
+
+ +
diff --git a/skyvern-ts/client/src/Client.ts b/skyvern-ts/client/src/Client.ts index 03df4ee4e..9e1905fba 100644 --- a/skyvern-ts/client/src/Client.ts +++ b/skyvern-ts/client/src/Client.ts @@ -4,6 +4,8 @@ import * as Skyvern from "./api/index.js"; import { Artifacts } from "./api/resources/artifacts/client/Client.js"; import { Schedules } from "./api/resources/schedules/client/Client.js"; import { Scripts } from "./api/resources/scripts/client/Client.js"; +import { Server } from "./api/resources/server/client/Client.js"; +import { Workflows } from "./api/resources/workflows/client/Client.js"; import type { BaseClientOptions, BaseRequestOptions } from "./BaseClient.js"; import { mergeHeaders, mergeOnlyDefinedHeaders } from "./core/headers.js"; import * as core from "./core/index.js"; @@ -19,6 +21,8 @@ export declare namespace SkyvernClient { export class SkyvernClient { protected readonly _options: SkyvernClient.Options; protected _artifacts: Artifacts | undefined; + protected _server: Server | undefined; + protected _workflows: Workflows | undefined; protected _scripts: Scripts | undefined; protected _schedules: Schedules | undefined; @@ -30,8 +34,8 @@ export class SkyvernClient { "x-api-key": _options?.apiKey, "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "@skyvern/client", - "X-Fern-SDK-Version": "1.0.32", - "User-Agent": "@skyvern/client/1.0.32", + "X-Fern-SDK-Version": "1.0.37", + "User-Agent": "@skyvern/client/1.0.37", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, }, @@ -44,6 +48,14 @@ export class SkyvernClient { return (this._artifacts ??= new Artifacts(this._options)); } + public get server(): Server { + return (this._server ??= new Server(this._options)); + } + + public get workflows(): Workflows { + return (this._workflows ??= new Workflows(this._options)); + } + public get scripts(): Scripts { return (this._scripts ??= new Scripts(this._options)); } @@ -55,7 +67,7 @@ export class SkyvernClient { /** * Run a task * - * @param {Skyvern.RunTaskRequest} request + * @param {Skyvern.TaskRunRequestInput} request * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. * * @throws {@link Skyvern.BadRequestError} @@ -64,23 +76,21 @@ export class SkyvernClient { * @example * await client.runTask({ * "x-user-agent": "x-user-agent", - * body: { - * prompt: "Find the top 3 posts on Hacker News." - * } + * prompt: "Find the top 3 posts on Hacker News." * }) */ public runTask( - request: Skyvern.RunTaskRequest, + request: Skyvern.TaskRunRequestInput, requestOptions?: SkyvernClient.RequestOptions, ): core.HttpResponsePromise { return core.HttpResponsePromise.fromPromise(this.__runTask(request, requestOptions)); } private async __runTask( - request: Skyvern.RunTaskRequest, + request: Skyvern.TaskRunRequestInput, requestOptions?: SkyvernClient.RequestOptions, ): Promise> { - const { "x-user-agent": userAgent, body: _body } = request; + const { "x-user-agent": userAgent, ..._body } = request; const _headers: core.Fetcher.Args["headers"] = mergeHeaders( this._options?.headers, mergeOnlyDefinedHeaders({ @@ -145,7 +155,7 @@ export class SkyvernClient { /** * Run a workflow * - * @param {Skyvern.RunWorkflowRequest} request + * @param {Skyvern.WorkflowRunRequestInput} request * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. * * @throws {@link Skyvern.BadRequestError} @@ -156,23 +166,21 @@ export class SkyvernClient { * "x-max-steps-override": 1, * "x-user-agent": "x-user-agent", * template: true, - * body: { - * workflow_id: "wpid_123" - * } + * workflow_id: "wpid_123" * }) */ public runWorkflow( - request: Skyvern.RunWorkflowRequest, + request: Skyvern.WorkflowRunRequestInput, requestOptions?: SkyvernClient.RequestOptions, ): core.HttpResponsePromise { return core.HttpResponsePromise.fromPromise(this.__runWorkflow(request, requestOptions)); } private async __runWorkflow( - request: Skyvern.RunWorkflowRequest, + request: Skyvern.WorkflowRunRequestInput, requestOptions?: SkyvernClient.RequestOptions, ): Promise> { - const { template, "x-max-steps-override": maxStepsOverride, "x-user-agent": userAgent, body: _body } = request; + const { template, "x-max-steps-override": maxStepsOverride, "x-user-agent": userAgent, ..._body } = request; const _queryParams: Record = {}; if (template != null) { _queryParams.template = template.toString(); @@ -390,6 +398,86 @@ export class SkyvernClient { } } + /** + * Cancel multiple runs (tasks or workflows) in a single request + * + * @param {Skyvern.BulkCancelRunsRequest} request + * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyvern.UnprocessableEntityError} + * + * @example + * await client.bulkCancelRuns({ + * run_ids: ["run_ids"] + * }) + */ + public bulkCancelRuns( + request: Skyvern.BulkCancelRunsRequest, + requestOptions?: SkyvernClient.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__bulkCancelRuns(request, requestOptions)); + } + + private async __bulkCancelRuns( + request: Skyvern.BulkCancelRunsRequest, + requestOptions?: SkyvernClient.RequestOptions, + ): Promise> { + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyvernEnvironment.Cloud, + "v1/runs/cancel", + ), + method: "POST", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, + maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyvern.BulkCancelRunsResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 422: + throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyvernTimeoutError("Timeout exceeded when calling POST /v1/runs/cancel."); + case "unknown": + throw new errors.SkyvernError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * Get all workflows with the latest version for the organization. * @@ -1406,7 +1494,7 @@ export class SkyvernClient { runId: string, request?: Skyvern.RetryRunWebhookRequest, requestOptions?: SkyvernClient.RequestOptions, - ): core.HttpResponsePromise { + ): core.HttpResponsePromise { return core.HttpResponsePromise.fromPromise(this.__retryRunWebhook(runId, request, requestOptions)); } @@ -1414,7 +1502,7 @@ export class SkyvernClient { runId: string, request?: Skyvern.RetryRunWebhookRequest, requestOptions?: SkyvernClient.RequestOptions, - ): Promise> { + ): Promise> { const _headers: core.Fetcher.Args["headers"] = mergeHeaders( this._options?.headers, mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), @@ -1438,7 +1526,7 @@ export class SkyvernClient { abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return { data: _response.body, rawResponse: _response.rawResponse }; + return { data: _response.body as Skyvern.RunWebhookReplayResponse, rawResponse: _response.rawResponse }; } if (_response.error.reason === "status-code") { @@ -1554,6 +1642,100 @@ export class SkyvernClient { } } + /** + * Retry a workflow run using the original run parameters. + * + * @param {string} workflowRunId - The id of the workflow run to retry. + * @param {Skyvern.RetryWorkflowRunRequest} request + * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyvern.BadRequestError} + * @throws {@link Skyvern.NotFoundError} + * @throws {@link Skyvern.UnprocessableEntityError} + * + * @example + * await client.retryWorkflowRun("wr_123", { + * "x-max-steps-override": 1, + * "x-user-agent": "x-user-agent" + * }) + */ + public retryWorkflowRun( + workflowRunId: string, + request: Skyvern.RetryWorkflowRunRequest = {}, + requestOptions?: SkyvernClient.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__retryWorkflowRun(workflowRunId, request, requestOptions)); + } + + private async __retryWorkflowRun( + workflowRunId: string, + request: Skyvern.RetryWorkflowRunRequest = {}, + requestOptions?: SkyvernClient.RequestOptions, + ): Promise> { + const { "x-max-steps-override": maxStepsOverride, "x-user-agent": userAgent } = request; + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ + "x-max-steps-override": maxStepsOverride != null ? maxStepsOverride.toString() : undefined, + "x-user-agent": userAgent != null ? userAgent : undefined, + "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey, + }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyvernEnvironment.Cloud, + `v1/workflows/runs/${core.url.encodePathParam(workflowRunId)}/retry`, + ), + method: "POST", + headers: _headers, + queryParameters: requestOptions?.queryParams, + timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, + maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyvern.WorkflowRunResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyvern.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 404: + throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse); + case 422: + throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyvernTimeoutError( + "Timeout exceeded when calling POST /v1/workflows/runs/{workflow_run_id}/retry.", + ); + case "unknown": + throw new errors.SkyvernError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * @param {Skyvern.GetRunsV2Request} request * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. @@ -1786,6 +1968,127 @@ export class SkyvernClient { } } + /** + * List runs for a specific workflow. + * + * Supports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic. + * + * ### search_key + * + * Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded. + * + * ### error_code + * + * Exact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`. + * + * @param {string} workflowId + * @param {Skyvern.GetWorkflowRunsByIdRequest} request + * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyvern.UnprocessableEntityError} + * + * @example + * await client.getWorkflowRunsById("workflow_id", { + * page: 1, + * page_size: 1, + * search_key: "search_key", + * error_code: "error_code" + * }) + */ + public getWorkflowRunsById( + workflowId: string, + request: Skyvern.GetWorkflowRunsByIdRequest = {}, + requestOptions?: SkyvernClient.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__getWorkflowRunsById(workflowId, request, requestOptions)); + } + + private async __getWorkflowRunsById( + workflowId: string, + request: Skyvern.GetWorkflowRunsByIdRequest = {}, + requestOptions?: SkyvernClient.RequestOptions, + ): Promise> { + const { page, page_size: pageSize, status, search_key: searchKey, error_code: errorCode } = request; + const _queryParams: Record = {}; + if (page != null) { + _queryParams.page = page.toString(); + } + + if (pageSize != null) { + _queryParams.page_size = pageSize.toString(); + } + + if (status != null) { + if (Array.isArray(status)) { + _queryParams.status = status.map((item) => item); + } else { + _queryParams.status = status; + } + } + + if (searchKey != null) { + _queryParams.search_key = searchKey; + } + + if (errorCode != null) { + _queryParams.error_code = errorCode; + } + + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyvernEnvironment.Cloud, + `v1/workflows/${core.url.encodePathParam(workflowId)}/runs`, + ), + method: "GET", + headers: _headers, + queryParameters: { ..._queryParams, ...requestOptions?.queryParams }, + timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, + maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyvern.WorkflowRun[], rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 422: + throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyvernTimeoutError( + "Timeout exceeded when calling GET /v1/workflows/{workflow_id}/runs.", + ); + case "unknown": + throw new errors.SkyvernError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * @param {string} workflowPermanentId * @param {Skyvern.GetWorkflowRequest} request @@ -2062,7 +2365,10 @@ export class SkyvernClient { * * @example * await client.listBrowserProfiles({ - * include_deleted: true + * page: 1, + * page_size: 1, + * include_deleted: true, + * search_key: "search_key" * }) */ public listBrowserProfiles( @@ -2076,12 +2382,24 @@ export class SkyvernClient { request: Skyvern.ListBrowserProfilesRequest = {}, requestOptions?: SkyvernClient.RequestOptions, ): Promise> { - const { include_deleted: includeDeleted } = request; + const { page, page_size: pageSize, include_deleted: includeDeleted, search_key: searchKey } = request; const _queryParams: Record = {}; + if (page != null) { + _queryParams.page = page.toString(); + } + + if (pageSize != null) { + _queryParams.page_size = pageSize.toString(); + } + if (includeDeleted != null) { _queryParams.include_deleted = includeDeleted.toString(); } + if (searchKey != null) { + _queryParams.search_key = searchKey; + } + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( this._options?.headers, mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), @@ -2381,6 +2699,95 @@ export class SkyvernClient { } } + /** + * Update a browser profile's name and/or description + * + * @param {string} profileId - The ID of the browser profile to update. browser_profile_id starts with `bp_` + * @param {Skyvern.UpdateBrowserProfileRequest} request + * @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyvern.NotFoundError} + * @throws {@link Skyvern.ConflictError} + * @throws {@link Skyvern.UnprocessableEntityError} + * + * @example + * await client.updateBrowserProfile("bp_123456") + */ + public updateBrowserProfile( + profileId: string, + request: Skyvern.UpdateBrowserProfileRequest = {}, + requestOptions?: SkyvernClient.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__updateBrowserProfile(profileId, request, requestOptions)); + } + + private async __updateBrowserProfile( + profileId: string, + request: Skyvern.UpdateBrowserProfileRequest = {}, + requestOptions?: SkyvernClient.RequestOptions, + ): Promise> { + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyvernEnvironment.Cloud, + `v1/browser_profiles/${core.url.encodePathParam(profileId)}`, + ), + method: "PATCH", + headers: _headers, + contentType: "application/json", + queryParameters: requestOptions?.queryParams, + requestType: "json", + body: request, + timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, + maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyvern.BrowserProfile, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse); + case 409: + throw new Skyvern.ConflictError(_response.error.body as unknown, _response.rawResponse); + case 422: + throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyvernTimeoutError( + "Timeout exceeded when calling PATCH /v1/browser_profiles/{profile_id}.", + ); + case "unknown": + throw new errors.SkyvernError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + /** * Get all active browser sessions for the organization * @@ -3216,6 +3623,7 @@ export class SkyvernClient { * * @example * await client.login({ + * "x-user-agent": "x-user-agent", * credential_type: "skyvern" * }) */ @@ -3230,9 +3638,13 @@ export class SkyvernClient { request: Skyvern.LoginRequest, requestOptions?: SkyvernClient.RequestOptions, ): Promise> { + const { "x-user-agent": userAgent, ..._body } = request; const _headers: core.Fetcher.Args["headers"] = mergeHeaders( this._options?.headers, - mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + mergeOnlyDefinedHeaders({ + "x-user-agent": userAgent != null ? userAgent : undefined, + "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey, + }), requestOptions?.headers, ); const _response = await core.fetcher({ @@ -3247,7 +3659,7 @@ export class SkyvernClient { contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", - body: request, + body: _body, timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, abortSignal: requestOptions?.abortSignal, @@ -3296,6 +3708,7 @@ export class SkyvernClient { * * @example * await client.downloadFiles({ + * "x-user-agent": "x-user-agent", * navigation_goal: "navigation_goal" * }) */ @@ -3310,9 +3723,13 @@ export class SkyvernClient { request: Skyvern.DownloadFilesRequest, requestOptions?: SkyvernClient.RequestOptions, ): Promise> { + const { "x-user-agent": userAgent, ..._body } = request; const _headers: core.Fetcher.Args["headers"] = mergeHeaders( this._options?.headers, - mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + mergeOnlyDefinedHeaders({ + "x-user-agent": userAgent != null ? userAgent : undefined, + "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey, + }), requestOptions?.headers, ); const _response = await core.fetcher({ @@ -3327,7 +3744,7 @@ export class SkyvernClient { contentType: "application/json", queryParameters: requestOptions?.queryParams, requestType: "json", - body: request, + body: _body, timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, abortSignal: requestOptions?.abortSignal, diff --git a/skyvern-ts/client/src/api/client/requests/BulkCancelRunsRequest.ts b/skyvern-ts/client/src/api/client/requests/BulkCancelRunsRequest.ts new file mode 100644 index 000000000..6d9148ef9 --- /dev/null +++ b/skyvern-ts/client/src/api/client/requests/BulkCancelRunsRequest.ts @@ -0,0 +1,12 @@ +// This file was auto-generated by Fern from our API Definition. + +/** + * @example + * { + * run_ids: ["run_ids"] + * } + */ +export interface BulkCancelRunsRequest { + /** List of run IDs to cancel */ + run_ids: string[]; +} diff --git a/skyvern-ts/client/src/api/client/requests/CreateBrowserSessionRequest.ts b/skyvern-ts/client/src/api/client/requests/CreateBrowserSessionRequest.ts index 6d3217de5..071dc3516 100644 --- a/skyvern-ts/client/src/api/client/requests/CreateBrowserSessionRequest.ts +++ b/skyvern-ts/client/src/api/client/requests/CreateBrowserSessionRequest.ts @@ -24,6 +24,7 @@ export interface CreateBrowserSessionRequest { * - RESIDENTIAL_NZ: New Zealand * - RESIDENTIAL_PH: Philippines * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia * - RESIDENTIAL_ZA: South Africa * - RESIDENTIAL_AR: Argentina * - RESIDENTIAL_AU: Australia @@ -40,8 +41,11 @@ export interface CreateBrowserSessionRequest { * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"}, or a custom proxy URL dict for self-hosted deployments: {"url": "http://user:password@proxy.example.com:8080"} */ - proxy_location?: Skyvern.ProxyLocation; + proxy_location?: CreateBrowserSessionRequest.ProxyLocation; /** A list of extensions to install in the browser session. */ extensions?: Skyvern.Extensions[]; /** The type of browser to use for the session. */ @@ -49,3 +53,44 @@ export interface CreateBrowserSessionRequest { /** ID of a browser profile to load into this session (restores cookies, localStorage, etc.). browser_profile_id starts with `bp_`. */ browser_profile_id?: string; } + +export namespace CreateBrowserSessionRequest { + /** + * + * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. + * + * Available geotargeting options: + * - RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy. + * - RESIDENTIAL_ES: Spain + * - RESIDENTIAL_IE: Ireland + * - RESIDENTIAL_GB: United Kingdom + * - RESIDENTIAL_IN: India + * - RESIDENTIAL_JP: Japan + * - RESIDENTIAL_FR: France + * - RESIDENTIAL_DE: Germany + * - RESIDENTIAL_NZ: New Zealand + * - RESIDENTIAL_PH: Philippines + * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia + * - RESIDENTIAL_ZA: South Africa + * - RESIDENTIAL_AR: Argentina + * - RESIDENTIAL_AU: Australia + * - RESIDENTIAL_BR: Brazil + * - RESIDENTIAL_TR: Turkey + * - RESIDENTIAL_CA: Canada + * - RESIDENTIAL_MX: Mexico + * - RESIDENTIAL_IT: Italy + * - RESIDENTIAL_NL: Netherlands + * - RESIDENTIAL_ISP: ISP proxy + * - US-CA: California (deprecated, routes through RESIDENTIAL_ISP) + * - US-NY: New York (deprecated, routes through RESIDENTIAL_ISP) + * - US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP) + * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) + * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) + * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"}, or a custom proxy URL dict for self-hosted deployments: {"url": "http://user:password@proxy.example.com:8080"} + */ + export type ProxyLocation = Skyvern.ProxyLocation | Skyvern.GeoTarget | Record; +} diff --git a/skyvern-ts/client/src/api/client/requests/DownloadFilesRequest.ts b/skyvern-ts/client/src/api/client/requests/DownloadFilesRequest.ts index 332da04b2..b09d97e00 100644 --- a/skyvern-ts/client/src/api/client/requests/DownloadFilesRequest.ts +++ b/skyvern-ts/client/src/api/client/requests/DownloadFilesRequest.ts @@ -5,10 +5,12 @@ import type * as Skyvern from "../../index.js"; /** * @example * { + * "x-user-agent": "x-user-agent", * navigation_goal: "navigation_goal" * } */ export interface DownloadFilesRequest { + "x-user-agent"?: string; /** Website URL */ url?: string; /** Webhook URL to send status updates */ @@ -27,6 +29,8 @@ export interface DownloadFilesRequest { browser_address?: string; /** Additional HTTP headers to include in requests */ extra_http_headers?: Record; + /** HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. */ + cdp_connect_headers?: Record; /** Maximum number of times to scroll for screenshots */ max_screenshot_scrolling_times?: number; /** Instructions for navigating to and downloading the file */ diff --git a/skyvern-ts/client/src/api/client/requests/GetWorkflowRunsByIdRequest.ts b/skyvern-ts/client/src/api/client/requests/GetWorkflowRunsByIdRequest.ts new file mode 100644 index 000000000..84f3e79a2 --- /dev/null +++ b/skyvern-ts/client/src/api/client/requests/GetWorkflowRunsByIdRequest.ts @@ -0,0 +1,25 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../../index.js"; + +/** + * @example + * { + * page: 1, + * page_size: 1, + * search_key: "search_key", + * error_code: "error_code" + * } + */ +export interface GetWorkflowRunsByIdRequest { + /** Page number for pagination. */ + page?: number; + /** Number of runs to return per page. */ + page_size?: number; + /** Filter by one or more run statuses. */ + status?: Skyvern.WorkflowRunStatus | Skyvern.WorkflowRunStatus[]; + /** Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. A run is returned if any of these fields match. Soft-deleted parameter definitions are excluded from key/description matching. */ + search_key?: string; + /** Exact-match filter on the error_code field inside each task's errors JSON array. A run matches if any of its tasks contains an error with a matching error_code. Error codes are user-defined strings set during workflow execution. */ + error_code?: string; +} diff --git a/skyvern-ts/client/src/api/client/requests/ListBrowserProfilesRequest.ts b/skyvern-ts/client/src/api/client/requests/ListBrowserProfilesRequest.ts index eede6274d..843060ee1 100644 --- a/skyvern-ts/client/src/api/client/requests/ListBrowserProfilesRequest.ts +++ b/skyvern-ts/client/src/api/client/requests/ListBrowserProfilesRequest.ts @@ -3,10 +3,17 @@ /** * @example * { - * include_deleted: true + * page: 1, + * page_size: 1, + * include_deleted: true, + * search_key: "search_key" * } */ export interface ListBrowserProfilesRequest { + page?: number; + page_size?: number; /** Include deleted browser profiles */ include_deleted?: boolean; + /** Case-insensitive substring search across: browser profile name and description. A profile is returned if either field matches. */ + search_key?: string; } diff --git a/skyvern-ts/client/src/api/client/requests/LoginRequest.ts b/skyvern-ts/client/src/api/client/requests/LoginRequest.ts index d13bb9af7..45e15b0bc 100644 --- a/skyvern-ts/client/src/api/client/requests/LoginRequest.ts +++ b/skyvern-ts/client/src/api/client/requests/LoginRequest.ts @@ -5,10 +5,12 @@ import type * as Skyvern from "../../index.js"; /** * @example * { + * "x-user-agent": "x-user-agent", * credential_type: "skyvern" * } */ export interface LoginRequest { + "x-user-agent"?: string; /** Website URL */ url?: string; /** Webhook URL to send status updates */ @@ -27,10 +29,12 @@ export interface LoginRequest { browser_address?: string; /** Additional HTTP headers to include in requests */ extra_http_headers?: Record; + /** HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. */ + cdp_connect_headers?: Record; /** Maximum number of times to scroll for screenshots */ max_screenshot_scrolling_times?: number; /** Where to get the credential from */ - credential_type: Skyvern.SkyvernSchemasRunBlocksCredentialType; + credential_type: Skyvern.SkyvernSchemasCredentialTypeCredentialType; /** Login instructions. Skyvern has default prompt/instruction for login if this field is not provided. */ prompt?: string; /** ID of the Skyvern credential to use for login. */ diff --git a/skyvern-ts/client/src/api/client/requests/RetryWorkflowRunRequest.ts b/skyvern-ts/client/src/api/client/requests/RetryWorkflowRunRequest.ts new file mode 100644 index 000000000..122baa923 --- /dev/null +++ b/skyvern-ts/client/src/api/client/requests/RetryWorkflowRunRequest.ts @@ -0,0 +1,13 @@ +// This file was auto-generated by Fern from our API Definition. + +/** + * @example + * { + * "x-max-steps-override": 1, + * "x-user-agent": "x-user-agent" + * } + */ +export interface RetryWorkflowRunRequest { + "x-max-steps-override"?: number; + "x-user-agent"?: string; +} diff --git a/skyvern-ts/client/src/api/client/requests/RunTaskRequest.ts b/skyvern-ts/client/src/api/client/requests/RunTaskRequest.ts deleted file mode 100644 index 21750ae3e..000000000 --- a/skyvern-ts/client/src/api/client/requests/RunTaskRequest.ts +++ /dev/null @@ -1,17 +0,0 @@ -// This file was auto-generated by Fern from our API Definition. - -import type * as Skyvern from "../../index.js"; - -/** - * @example - * { - * "x-user-agent": "x-user-agent", - * body: { - * prompt: "Find the top 3 posts on Hacker News." - * } - * } - */ -export interface RunTaskRequest { - "x-user-agent"?: string; - body: Skyvern.TaskRunRequest; -} diff --git a/skyvern-ts/client/src/api/client/requests/RunWorkflowRequest.ts b/skyvern-ts/client/src/api/client/requests/RunWorkflowRequest.ts deleted file mode 100644 index 722d838bc..000000000 --- a/skyvern-ts/client/src/api/client/requests/RunWorkflowRequest.ts +++ /dev/null @@ -1,21 +0,0 @@ -// This file was auto-generated by Fern from our API Definition. - -import type * as Skyvern from "../../index.js"; - -/** - * @example - * { - * "x-max-steps-override": 1, - * "x-user-agent": "x-user-agent", - * template: true, - * body: { - * workflow_id: "wpid_123" - * } - * } - */ -export interface RunWorkflowRequest { - template?: boolean; - "x-max-steps-override"?: number; - "x-user-agent"?: string; - body: Skyvern.WorkflowRunRequest; -} diff --git a/skyvern-ts/client/src/api/client/requests/TaskRunRequestInput.ts b/skyvern-ts/client/src/api/client/requests/TaskRunRequestInput.ts new file mode 100644 index 000000000..eccc3f210 --- /dev/null +++ b/skyvern-ts/client/src/api/client/requests/TaskRunRequestInput.ts @@ -0,0 +1,157 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../../index.js"; + +/** + * @example + * { + * "x-user-agent": "x-user-agent", + * prompt: "Find the top 3 posts on Hacker News." + * } + */ +export interface TaskRunRequestInput { + "x-user-agent"?: string; + /** + * The goal or task description for Skyvern to accomplish + */ + prompt: string; + /** + * The starting URL for the task. If not provided, Skyvern will attempt to determine an appropriate URL + */ + url?: string; + /** + * The engine that powers the agent task. The default value is `skyvern-1.0`, which is good for simple tasks like filling a form, or searching for information on Google. `skyvern-2.0` remains available for existing V2 workflows and explicitly requested V2 task runs. The `openai-cua` engine uses OpenAI's CUA model. The `anthropic-cua` uses Anthropic's Claude Sonnet 3.7 model with the computer use tool. + */ + engine?: Skyvern.RunEngine; + /** The title for the task */ + title?: string; + /** + * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. + * + * Available geotargeting options: + * - RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy. + * - RESIDENTIAL_ES: Spain + * - RESIDENTIAL_IE: Ireland + * - RESIDENTIAL_GB: United Kingdom + * - RESIDENTIAL_IN: India + * - RESIDENTIAL_JP: Japan + * - RESIDENTIAL_FR: France + * - RESIDENTIAL_DE: Germany + * - RESIDENTIAL_NZ: New Zealand + * - RESIDENTIAL_PH: Philippines + * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia + * - RESIDENTIAL_ZA: South Africa + * - RESIDENTIAL_AR: Argentina + * - RESIDENTIAL_AU: Australia + * - RESIDENTIAL_BR: Brazil + * - RESIDENTIAL_TR: Turkey + * - RESIDENTIAL_CA: Canada + * - RESIDENTIAL_MX: Mexico + * - RESIDENTIAL_IT: Italy + * - RESIDENTIAL_NL: Netherlands + * - RESIDENTIAL_ISP: ISP proxy + * - US-CA: California (deprecated, routes through RESIDENTIAL_ISP) + * - US-NY: New York (deprecated, routes through RESIDENTIAL_ISP) + * - US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP) + * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) + * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) + * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} + */ + proxy_location?: TaskRunRequestInput.ProxyLocation; + /** + * The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. + */ + data_extraction_schema?: TaskRunRequestInput.DataExtractionSchema; + /** + * Custom mapping of error codes to error messages if Skyvern encounters an error. + */ + error_code_mapping?: Record; + /** + * Maximum number of steps the task can take. Task will fail if it exceeds this number. Cautions: you are charged per step so please set this number to a reasonable value. Contact sales@skyvern.com for custom pricing. + */ + max_steps?: number; + /** + * After a run is finished, send an update to this URL. Refer to https://www.skyvern.com/docs/running-tasks/webhooks-faq for more details. + */ + webhook_url?: string; + /** + * Identifier for the TOTP/2FA/MFA code when the code is pushed to Skyvern. Refer to https://www.skyvern.com/docs/credentials/totp#option-3-push-code-to-skyvern for more details. + */ + totp_identifier?: string; + /** + * URL that serves TOTP/2FA/MFA codes for Skyvern to use during the workflow run. Refer to https://www.skyvern.com/docs/credentials/totp#option-2-get-code-from-your-endpoint for more details. + */ + totp_url?: string; + /** + * Run the task or workflow in the specific Skyvern browser session. Having a browser session can persist the real-time state of the browser, so that the next run can continue from where the previous run left off. + */ + browser_session_id?: string; + /** + * Optional model configuration. + */ + model?: Record; + /** The extra HTTP headers for the requests in browser. */ + extra_http_headers?: Record; + /** HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. */ + cdp_connect_headers?: Record; + /** Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. */ + publish_workflow?: boolean; + /** Whether to include action history when verifying that the task is complete */ + include_action_history_in_verification?: boolean; + /** The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot. */ + max_screenshot_scrolls?: number; + /** The CDP address for the task. */ + browser_address?: string; + /** Whether to run the task with agent or code. Null means use the default. */ + run_with?: string; +} + +export namespace TaskRunRequestInput { + /** + * + * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. + * + * Available geotargeting options: + * - RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy. + * - RESIDENTIAL_ES: Spain + * - RESIDENTIAL_IE: Ireland + * - RESIDENTIAL_GB: United Kingdom + * - RESIDENTIAL_IN: India + * - RESIDENTIAL_JP: Japan + * - RESIDENTIAL_FR: France + * - RESIDENTIAL_DE: Germany + * - RESIDENTIAL_NZ: New Zealand + * - RESIDENTIAL_PH: Philippines + * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia + * - RESIDENTIAL_ZA: South Africa + * - RESIDENTIAL_AR: Argentina + * - RESIDENTIAL_AU: Australia + * - RESIDENTIAL_BR: Brazil + * - RESIDENTIAL_TR: Turkey + * - RESIDENTIAL_CA: Canada + * - RESIDENTIAL_MX: Mexico + * - RESIDENTIAL_IT: Italy + * - RESIDENTIAL_NL: Netherlands + * - RESIDENTIAL_ISP: ISP proxy + * - US-CA: California (deprecated, routes through RESIDENTIAL_ISP) + * - US-NY: New York (deprecated, routes through RESIDENTIAL_ISP) + * - US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP) + * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) + * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) + * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} + */ + export type ProxyLocation = Skyvern.ProxyLocation | Skyvern.GeoTarget | Record; + /** + * + * The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. + */ + export type DataExtractionSchema = Record | unknown[] | string; +} diff --git a/skyvern-ts/client/src/api/client/requests/UpdateBrowserProfileRequest.ts b/skyvern-ts/client/src/api/client/requests/UpdateBrowserProfileRequest.ts new file mode 100644 index 000000000..c07d5d55f --- /dev/null +++ b/skyvern-ts/client/src/api/client/requests/UpdateBrowserProfileRequest.ts @@ -0,0 +1,12 @@ +// This file was auto-generated by Fern from our API Definition. + +/** + * @example + * {} + */ +export interface UpdateBrowserProfileRequest { + /** New name for the browser profile */ + name?: string; + /** New description for the browser profile */ + description?: string; +} diff --git a/skyvern-ts/client/src/api/client/requests/WorkflowRunRequestInput.ts b/skyvern-ts/client/src/api/client/requests/WorkflowRunRequestInput.ts new file mode 100644 index 000000000..c1e62cd84 --- /dev/null +++ b/skyvern-ts/client/src/api/client/requests/WorkflowRunRequestInput.ts @@ -0,0 +1,132 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../../index.js"; + +/** + * @example + * { + * "x-max-steps-override": 1, + * "x-user-agent": "x-user-agent", + * template: true, + * workflow_id: "wpid_123" + * } + */ +export interface WorkflowRunRequestInput { + template?: boolean; + "x-max-steps-override"?: number; + "x-user-agent"?: string; + /** ID of the workflow to run. Workflow ID starts with `wpid_`. */ + workflow_id: string; + /** Parameters to pass to the workflow */ + parameters?: Record; + /** The title for this workflow run */ + title?: string; + /** + * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. + * + * Available geotargeting options: + * - RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy. + * - RESIDENTIAL_ES: Spain + * - RESIDENTIAL_IE: Ireland + * - RESIDENTIAL_GB: United Kingdom + * - RESIDENTIAL_IN: India + * - RESIDENTIAL_JP: Japan + * - RESIDENTIAL_FR: France + * - RESIDENTIAL_DE: Germany + * - RESIDENTIAL_NZ: New Zealand + * - RESIDENTIAL_PH: Philippines + * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia + * - RESIDENTIAL_ZA: South Africa + * - RESIDENTIAL_AR: Argentina + * - RESIDENTIAL_AU: Australia + * - RESIDENTIAL_BR: Brazil + * - RESIDENTIAL_TR: Turkey + * - RESIDENTIAL_CA: Canada + * - RESIDENTIAL_MX: Mexico + * - RESIDENTIAL_IT: Italy + * - RESIDENTIAL_NL: Netherlands + * - RESIDENTIAL_ISP: ISP proxy + * - US-CA: California (deprecated, routes through RESIDENTIAL_ISP) + * - US-NY: New York (deprecated, routes through RESIDENTIAL_ISP) + * - US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP) + * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) + * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) + * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} + */ + proxy_location?: WorkflowRunRequestInput.ProxyLocation; + /** URL to send workflow status updates to after a run is finished. Refer to https://www.skyvern.com/docs/running-tasks/webhooks-faq for webhook questions. */ + webhook_url?: string; + /** + * URL that serves TOTP/2FA/MFA codes for Skyvern to use during the workflow run. Refer to https://www.skyvern.com/docs/credentials/totp#option-2-get-code-from-your-endpoint for more details. + */ + totp_url?: string; + /** + * Identifier for the TOTP/2FA/MFA code when the code is pushed to Skyvern. Refer to https://www.skyvern.com/docs/credentials/totp#option-3-push-code-to-skyvern for more details. + */ + totp_identifier?: string; + /** ID of a Skyvern browser session to reuse, having it continue from the current screen state */ + browser_session_id?: string; + /** ID of a browser profile to reuse for this workflow run */ + browser_profile_id?: string; + /** The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot. */ + max_screenshot_scrolls?: number; + /** Timeout this workflow run after the configured elapsed runtime in minutes. Maximum runtime is 4 hours. */ + max_elapsed_time_minutes?: number; + /** The extra HTTP headers for the requests in browser. */ + extra_http_headers?: Record; + /** HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. */ + cdp_connect_headers?: Record; + /** The CDP address for the workflow run. */ + browser_address?: string; + /** Whether to fallback to AI if the workflow run fails. */ + ai_fallback?: boolean; + /** Whether to run the workflow with agent or code. Null inherits from the workflow setting. */ + run_with?: string; + /** String key/value metadata to attach to this workflow run for analytics tag filtering. */ + run_metadata?: Record; +} + +export namespace WorkflowRunRequestInput { + /** + * + * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. + * + * Available geotargeting options: + * - RESIDENTIAL: the default value. Skyvern Cloud uses a random US residential proxy. + * - RESIDENTIAL_ES: Spain + * - RESIDENTIAL_IE: Ireland + * - RESIDENTIAL_GB: United Kingdom + * - RESIDENTIAL_IN: India + * - RESIDENTIAL_JP: Japan + * - RESIDENTIAL_FR: France + * - RESIDENTIAL_DE: Germany + * - RESIDENTIAL_NZ: New Zealand + * - RESIDENTIAL_PH: Philippines + * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia + * - RESIDENTIAL_ZA: South Africa + * - RESIDENTIAL_AR: Argentina + * - RESIDENTIAL_AU: Australia + * - RESIDENTIAL_BR: Brazil + * - RESIDENTIAL_TR: Turkey + * - RESIDENTIAL_CA: Canada + * - RESIDENTIAL_MX: Mexico + * - RESIDENTIAL_IT: Italy + * - RESIDENTIAL_NL: Netherlands + * - RESIDENTIAL_ISP: ISP proxy + * - US-CA: California (deprecated, routes through RESIDENTIAL_ISP) + * - US-NY: New York (deprecated, routes through RESIDENTIAL_ISP) + * - US-TX: Texas (deprecated, routes through RESIDENTIAL_ISP) + * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) + * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) + * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} + */ + export type ProxyLocation = Skyvern.ProxyLocation | Skyvern.GeoTarget | Record; +} diff --git a/skyvern-ts/client/src/api/client/requests/index.ts b/skyvern-ts/client/src/api/client/requests/index.ts index 532c3571b..6364e6c03 100644 --- a/skyvern-ts/client/src/api/client/requests/index.ts +++ b/skyvern-ts/client/src/api/client/requests/index.ts @@ -1,4 +1,5 @@ export type { BodyUploadFileV1UploadFilePost } from "./BodyUploadFileV1UploadFilePost.js"; +export type { BulkCancelRunsRequest } from "./BulkCancelRunsRequest.js"; export type { CreateBrowserProfileRequest } from "./CreateBrowserProfileRequest.js"; export type { CreateBrowserSessionRequest } from "./CreateBrowserSessionRequest.js"; export type { CreateScriptRequest } from "./CreateScriptRequest.js"; @@ -14,13 +15,16 @@ export type { GetRunArtifactsRequest } from "./GetRunArtifactsRequest.js"; export type { GetRunsV2Request } from "./GetRunsV2Request.js"; export type { GetScriptsRequest } from "./GetScriptsRequest.js"; export type { GetWorkflowRequest } from "./GetWorkflowRequest.js"; +export type { GetWorkflowRunsByIdRequest } from "./GetWorkflowRunsByIdRequest.js"; export type { GetWorkflowRunsRequest } from "./GetWorkflowRunsRequest.js"; export type { GetWorkflowsRequest } from "./GetWorkflowsRequest.js"; export type { GetWorkflowVersionsRequest } from "./GetWorkflowVersionsRequest.js"; export type { ListBrowserProfilesRequest } from "./ListBrowserProfilesRequest.js"; export type { LoginRequest } from "./LoginRequest.js"; +export type { RetryWorkflowRunRequest } from "./RetryWorkflowRunRequest.js"; export type { RunSdkActionRequest } from "./RunSdkActionRequest.js"; -export type { RunTaskRequest } from "./RunTaskRequest.js"; -export type { RunWorkflowRequest } from "./RunWorkflowRequest.js"; +export type { TaskRunRequestInput } from "./TaskRunRequestInput.js"; export type { TotpCodeCreate } from "./TotpCodeCreate.js"; +export type { UpdateBrowserProfileRequest } from "./UpdateBrowserProfileRequest.js"; export type { UpdateWorkflowFolderRequest } from "./UpdateWorkflowFolderRequest.js"; +export type { WorkflowRunRequestInput } from "./WorkflowRunRequestInput.js"; diff --git a/skyvern-ts/client/src/api/errors/InternalServerError.ts b/skyvern-ts/client/src/api/errors/InternalServerError.ts new file mode 100644 index 000000000..6013c4b03 --- /dev/null +++ b/skyvern-ts/client/src/api/errors/InternalServerError.ts @@ -0,0 +1,16 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as core from "../../core/index.js"; +import * as errors from "../../errors/index.js"; + +export class InternalServerError extends errors.SkyvernError { + constructor(body?: unknown, rawResponse?: core.RawResponse) { + super({ + message: "InternalServerError", + statusCode: 500, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, InternalServerError.prototype); + } +} diff --git a/skyvern-ts/client/src/api/errors/RangeNotSatisfiableError.ts b/skyvern-ts/client/src/api/errors/RangeNotSatisfiableError.ts new file mode 100644 index 000000000..2d378b796 --- /dev/null +++ b/skyvern-ts/client/src/api/errors/RangeNotSatisfiableError.ts @@ -0,0 +1,16 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as core from "../../core/index.js"; +import * as errors from "../../errors/index.js"; + +export class RangeNotSatisfiableError extends errors.SkyvernError { + constructor(body?: unknown, rawResponse?: core.RawResponse) { + super({ + message: "RangeNotSatisfiableError", + statusCode: 416, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, RangeNotSatisfiableError.prototype); + } +} diff --git a/skyvern-ts/client/src/api/errors/index.ts b/skyvern-ts/client/src/api/errors/index.ts index 2f175d20e..af0a927fb 100644 --- a/skyvern-ts/client/src/api/errors/index.ts +++ b/skyvern-ts/client/src/api/errors/index.ts @@ -1,5 +1,7 @@ export * from "./BadRequestError.js"; export * from "./ConflictError.js"; export * from "./ForbiddenError.js"; +export * from "./InternalServerError.js"; export * from "./NotFoundError.js"; +export * from "./RangeNotSatisfiableError.js"; export * from "./UnprocessableEntityError.js"; diff --git a/skyvern-ts/client/src/api/resources/index.ts b/skyvern-ts/client/src/api/resources/index.ts index 99ec6b700..bf89d9d16 100644 --- a/skyvern-ts/client/src/api/resources/index.ts +++ b/skyvern-ts/client/src/api/resources/index.ts @@ -3,3 +3,5 @@ export * from "./schedules/client/requests/index.js"; export * as schedules from "./schedules/index.js"; export * from "./schedules/types/index.js"; export * as scripts from "./scripts/index.js"; +export * as server from "./server/index.js"; +export * as workflows from "./workflows/index.js"; diff --git a/skyvern-ts/client/src/api/resources/server/client/Client.ts b/skyvern-ts/client/src/api/resources/server/client/Client.ts new file mode 100644 index 000000000..2eb32c82c --- /dev/null +++ b/skyvern-ts/client/src/api/resources/server/client/Client.ts @@ -0,0 +1,84 @@ +// This file was auto-generated by Fern from our API Definition. + +import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.js"; +import { mergeHeaders, mergeOnlyDefinedHeaders } from "../../../../core/headers.js"; +import * as core from "../../../../core/index.js"; +import * as environments from "../../../../environments.js"; +import * as errors from "../../../../errors/index.js"; + +export declare namespace Server { + export interface Options extends BaseClientOptions {} + + export interface RequestOptions extends BaseRequestOptions {} +} + +export class Server { + protected readonly _options: Server.Options; + + constructor(_options: Server.Options = {}) { + this._options = _options; + } + + /** + * Returns the current Skyvern server version (git SHA for official builds). + * + * @param {Server.RequestOptions} requestOptions - Request-specific configuration. + * + * @example + * await client.server.getVersion() + */ + public getVersion(requestOptions?: Server.RequestOptions): core.HttpResponsePromise> { + return core.HttpResponsePromise.fromPromise(this.__getVersion(requestOptions)); + } + + private async __getVersion( + requestOptions?: Server.RequestOptions, + ): Promise>> { + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyvernEnvironment.Cloud, + "v1/version", + ), + method: "GET", + headers: _headers, + queryParameters: requestOptions?.queryParams, + timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, + maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Record, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyvernTimeoutError("Timeout exceeded when calling GET /v1/version."); + case "unknown": + throw new errors.SkyvernError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } +} diff --git a/skyvern-ts/client/src/api/resources/server/client/index.ts b/skyvern-ts/client/src/api/resources/server/client/index.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/skyvern-ts/client/src/api/resources/server/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/skyvern-ts/client/src/api/resources/server/index.ts b/skyvern-ts/client/src/api/resources/server/index.ts new file mode 100644 index 000000000..914b8c3c7 --- /dev/null +++ b/skyvern-ts/client/src/api/resources/server/index.ts @@ -0,0 +1 @@ +export * from "./client/index.js"; diff --git a/skyvern-ts/client/src/api/resources/workflows/client/Client.ts b/skyvern-ts/client/src/api/resources/workflows/client/Client.ts new file mode 100644 index 000000000..9990acae6 --- /dev/null +++ b/skyvern-ts/client/src/api/resources/workflows/client/Client.ts @@ -0,0 +1,107 @@ +// This file was auto-generated by Fern from our API Definition. + +import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.js"; +import { mergeHeaders, mergeOnlyDefinedHeaders } from "../../../../core/headers.js"; +import * as core from "../../../../core/index.js"; +import * as environments from "../../../../environments.js"; +import * as errors from "../../../../errors/index.js"; +import * as Skyvern from "../../../index.js"; + +export declare namespace Workflows { + export interface Options extends BaseClientOptions {} + + export interface RequestOptions extends BaseRequestOptions {} +} + +export class Workflows { + protected readonly _options: Workflows.Options; + + constructor(_options: Workflows.Options = {}) { + this._options = _options; + } + + /** + * Clear the persisted browser profile for a workflow that uses `Save & Reuse Session`. The next run will start from a fresh browser state. Use when a saved profile is corrupted. + * + * @param {string} workflowPermanentId - The permanent ID of the workflow. Starts with `wpid_`. + * @param {Workflows.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyvern.NotFoundError} + * @throws {@link Skyvern.UnprocessableEntityError} + * @throws {@link Skyvern.InternalServerError} + * + * @example + * await client.workflows.resetWorkflowBrowserProfile("wpid_123") + */ + public resetWorkflowBrowserProfile( + workflowPermanentId: string, + requestOptions?: Workflows.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__resetWorkflowBrowserProfile(workflowPermanentId, requestOptions), + ); + } + + private async __resetWorkflowBrowserProfile( + workflowPermanentId: string, + requestOptions?: Workflows.RequestOptions, + ): Promise> { + const _headers: core.Fetcher.Args["headers"] = mergeHeaders( + this._options?.headers, + mergeOnlyDefinedHeaders({ "x-api-key": requestOptions?.apiKey ?? this._options?.apiKey }), + requestOptions?.headers, + ); + const _response = await core.fetcher({ + url: core.url.join( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyvernEnvironment.Cloud, + `v1/workflows/${core.url.encodePathParam(workflowPermanentId)}/browser_session/reset_profile`, + ), + method: "POST", + headers: _headers, + queryParameters: requestOptions?.queryParams, + timeoutMs: (requestOptions?.timeoutInSeconds ?? this._options?.timeoutInSeconds ?? 60) * 1000, + maxRetries: requestOptions?.maxRetries ?? this._options?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: undefined, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyvern.NotFoundError(_response.error.body as unknown, _response.rawResponse); + case 422: + throw new Skyvern.UnprocessableEntityError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyvern.InternalServerError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyvernError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyvernTimeoutError( + "Timeout exceeded when calling POST /v1/workflows/{workflow_permanent_id}/browser_session/reset_profile.", + ); + case "unknown": + throw new errors.SkyvernError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } +} diff --git a/skyvern-ts/client/src/api/resources/workflows/client/index.ts b/skyvern-ts/client/src/api/resources/workflows/client/index.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/skyvern-ts/client/src/api/resources/workflows/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/skyvern-ts/client/src/api/resources/workflows/index.ts b/skyvern-ts/client/src/api/resources/workflows/index.ts new file mode 100644 index 000000000..914b8c3c7 --- /dev/null +++ b/skyvern-ts/client/src/api/resources/workflows/index.ts @@ -0,0 +1 @@ +export * from "./client/index.js"; diff --git a/skyvern-ts/client/src/api/types/Action.ts b/skyvern-ts/client/src/api/types/Action.ts index 124f49ee9..9e99a928d 100644 --- a/skyvern-ts/client/src/api/types/Action.ts +++ b/skyvern-ts/client/src/api/types/Action.ts @@ -25,7 +25,9 @@ export interface Action { tool_call_id?: string; xpath?: string; errors?: Skyvern.UserDefinedError[]; + terminal_user_errors?: boolean; data_extraction_goal?: string; + output?: Action.Output; file_name?: string; file_url?: string; download?: boolean; @@ -45,3 +47,7 @@ export interface Action { modified_at?: string; created_by?: string; } + +export namespace Action { + export type Output = Record | unknown[] | string; +} diff --git a/skyvern-ts/client/src/api/types/ActionBlock.ts b/skyvern-ts/client/src/api/types/ActionBlock.ts index e7ac06bd1..9cc95a5f3 100644 --- a/skyvern-ts/client/src/api/types/ActionBlock.ts +++ b/skyvern-ts/client/src/api/types/ActionBlock.ts @@ -11,6 +11,7 @@ export interface ActionBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface ActionBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace ActionBlock { diff --git a/skyvern-ts/client/src/api/types/ActionBlockYaml.ts b/skyvern-ts/client/src/api/types/ActionBlockYaml.ts index 23276697d..865650060 100644 --- a/skyvern-ts/client/src/api/types/ActionBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/ActionBlockYaml.ts @@ -9,6 +9,7 @@ export interface ActionBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; url?: string; title?: string; diff --git a/skyvern-ts/client/src/api/types/ActionType.ts b/skyvern-ts/client/src/api/types/ActionType.ts index 3c67b65d8..1cfe539c4 100644 --- a/skyvern-ts/client/src/api/types/ActionType.ts +++ b/skyvern-ts/client/src/api/types/ActionType.ts @@ -18,10 +18,13 @@ export const ActionType = { Extract: "extract", VerificationCode: "verification_code", GotoUrl: "goto_url", + GoBack: "go_back", + GoForward: "go_forward", Scroll: "scroll", Keypress: "keypress", Move: "move", Drag: "drag", LeftMouse: "left_mouse", + ExecuteJs: "execute_js", } as const; export type ActionType = (typeof ActionType)[keyof typeof ActionType]; diff --git a/skyvern-ts/client/src/api/types/Artifact.ts b/skyvern-ts/client/src/api/types/Artifact.ts index 4020019f8..f819dc95e 100644 --- a/skyvern-ts/client/src/api/types/Artifact.ts +++ b/skyvern-ts/client/src/api/types/Artifact.ts @@ -11,14 +11,18 @@ export interface Artifact { artifact_type: Skyvern.ArtifactType; uri: string; bundle_key?: string; + checksum?: string; + file_size?: number; task_id?: string; step_id?: string; workflow_run_id?: string; workflow_run_block_id?: string; run_id?: string; + browser_session_id?: string; observer_cruise_id?: string; observer_thought_id?: string; ai_suggestion_id?: string; signed_url?: string; + archived?: boolean; organization_id: string; } diff --git a/skyvern-ts/client/src/api/types/ArtifactType.ts b/skyvern-ts/client/src/api/types/ArtifactType.ts index 2bf3b0de9..71db94de6 100644 --- a/skyvern-ts/client/src/api/types/ArtifactType.ts +++ b/skyvern-ts/client/src/api/types/ArtifactType.ts @@ -30,5 +30,6 @@ export const ArtifactType = { Pdf: "pdf", StepArchive: "step_archive", TaskArchive: "task_archive", + Download: "download", } as const; export type ArtifactType = (typeof ArtifactType)[keyof typeof ArtifactType]; diff --git a/skyvern-ts/client/src/api/types/BlockType.ts b/skyvern-ts/client/src/api/types/BlockType.ts index f8daa8526..9ba514242 100644 --- a/skyvern-ts/client/src/api/types/BlockType.ts +++ b/skyvern-ts/client/src/api/types/BlockType.ts @@ -26,5 +26,7 @@ export const BlockType = { HumanInteraction: "human_interaction", PrintPage: "print_page", WorkflowTrigger: "workflow_trigger", + GoogleSheetsRead: "google_sheets_read", + GoogleSheetsWrite: "google_sheets_write", } as const; export type BlockType = (typeof BlockType)[keyof typeof BlockType]; diff --git a/skyvern-ts/client/src/api/types/BrowserProfile.ts b/skyvern-ts/client/src/api/types/BrowserProfile.ts index dc7b33619..7f23fab98 100644 --- a/skyvern-ts/client/src/api/types/BrowserProfile.ts +++ b/skyvern-ts/client/src/api/types/BrowserProfile.ts @@ -5,6 +5,7 @@ export interface BrowserProfile { organization_id: string; name: string; description?: string; + source_browser_type?: string; created_at: string; modified_at: string; deleted_at?: string; diff --git a/skyvern-ts/client/src/api/types/BulkCancelRunsResponse.ts b/skyvern-ts/client/src/api/types/BulkCancelRunsResponse.ts new file mode 100644 index 000000000..ea5260bde --- /dev/null +++ b/skyvern-ts/client/src/api/types/BulkCancelRunsResponse.ts @@ -0,0 +1,8 @@ +// This file was auto-generated by Fern from our API Definition. + +export interface BulkCancelRunsResponse { + /** Run IDs that were successfully cancelled */ + cancelled: string[]; + /** Run IDs that could not be cancelled */ + failed: string[]; +} diff --git a/skyvern-ts/client/src/api/types/CodeBlock.ts b/skyvern-ts/client/src/api/types/CodeBlock.ts index 1ce7c2a25..40cbfef12 100644 --- a/skyvern-ts/client/src/api/types/CodeBlock.ts +++ b/skyvern-ts/client/src/api/types/CodeBlock.ts @@ -11,6 +11,7 @@ export interface CodeBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; code: string; parameters?: Skyvern.CodeBlockParametersItem[]; diff --git a/skyvern-ts/client/src/api/types/CodeBlockYaml.ts b/skyvern-ts/client/src/api/types/CodeBlockYaml.ts index 0df2b3f23..806d31f24 100644 --- a/skyvern-ts/client/src/api/types/CodeBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/CodeBlockYaml.ts @@ -7,6 +7,7 @@ export interface CodeBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; code: string; parameter_keys?: string[]; diff --git a/skyvern-ts/client/src/api/types/ConditionalBlock.ts b/skyvern-ts/client/src/api/types/ConditionalBlock.ts index 23f4be5c0..760f7a033 100644 --- a/skyvern-ts/client/src/api/types/ConditionalBlock.ts +++ b/skyvern-ts/client/src/api/types/ConditionalBlock.ts @@ -14,6 +14,7 @@ export interface ConditionalBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; branch_conditions?: Skyvern.BranchCondition[]; } diff --git a/skyvern-ts/client/src/api/types/ConditionalBlockYaml.ts b/skyvern-ts/client/src/api/types/ConditionalBlockYaml.ts index daa058a2d..9fde4a5a7 100644 --- a/skyvern-ts/client/src/api/types/ConditionalBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/ConditionalBlockYaml.ts @@ -9,6 +9,7 @@ export interface ConditionalBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; branch_conditions?: Skyvern.BranchConditionYaml[]; } diff --git a/skyvern-ts/client/src/api/types/DownloadToS3Block.ts b/skyvern-ts/client/src/api/types/DownloadToS3Block.ts index b79656b46..119f20528 100644 --- a/skyvern-ts/client/src/api/types/DownloadToS3Block.ts +++ b/skyvern-ts/client/src/api/types/DownloadToS3Block.ts @@ -11,6 +11,7 @@ export interface DownloadToS3Block { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; url: string; } diff --git a/skyvern-ts/client/src/api/types/DownloadToS3BlockYaml.ts b/skyvern-ts/client/src/api/types/DownloadToS3BlockYaml.ts index 9a92215a5..6cdc042c0 100644 --- a/skyvern-ts/client/src/api/types/DownloadToS3BlockYaml.ts +++ b/skyvern-ts/client/src/api/types/DownloadToS3BlockYaml.ts @@ -7,6 +7,7 @@ export interface DownloadToS3BlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; url: string; } diff --git a/skyvern-ts/client/src/api/types/ExtractionBlock.ts b/skyvern-ts/client/src/api/types/ExtractionBlock.ts index 6d3616575..53dc2820b 100644 --- a/skyvern-ts/client/src/api/types/ExtractionBlock.ts +++ b/skyvern-ts/client/src/api/types/ExtractionBlock.ts @@ -11,6 +11,7 @@ export interface ExtractionBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface ExtractionBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace ExtractionBlock { diff --git a/skyvern-ts/client/src/api/types/ExtractionBlockYaml.ts b/skyvern-ts/client/src/api/types/ExtractionBlockYaml.ts index cd77d833c..825675bc2 100644 --- a/skyvern-ts/client/src/api/types/ExtractionBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/ExtractionBlockYaml.ts @@ -9,6 +9,7 @@ export interface ExtractionBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; data_extraction_goal: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/FileDownloadBlock.ts b/skyvern-ts/client/src/api/types/FileDownloadBlock.ts index 733bf3a8b..f25c6bcde 100644 --- a/skyvern-ts/client/src/api/types/FileDownloadBlock.ts +++ b/skyvern-ts/client/src/api/types/FileDownloadBlock.ts @@ -11,6 +11,7 @@ export interface FileDownloadBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface FileDownloadBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace FileDownloadBlock { diff --git a/skyvern-ts/client/src/api/types/FileDownloadBlockYaml.ts b/skyvern-ts/client/src/api/types/FileDownloadBlockYaml.ts index 908e914b6..d0ab58ecc 100644 --- a/skyvern-ts/client/src/api/types/FileDownloadBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/FileDownloadBlockYaml.ts @@ -9,6 +9,7 @@ export interface FileDownloadBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; navigation_goal: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/FileInfo.ts b/skyvern-ts/client/src/api/types/FileInfo.ts index 642609463..b711735f9 100644 --- a/skyvern-ts/client/src/api/types/FileInfo.ts +++ b/skyvern-ts/client/src/api/types/FileInfo.ts @@ -10,6 +10,10 @@ export interface FileInfo { checksum?: string; /** Original filename */ filename?: string; + /** Size of the file in bytes */ + file_size?: number; /** Modified time of the file */ modified_at?: string; + /** Artifact row id for refresh-on-read */ + artifact_id?: string; } diff --git a/skyvern-ts/client/src/api/types/FileParserBlock.ts b/skyvern-ts/client/src/api/types/FileParserBlock.ts index bd2cbe537..db2495b5a 100644 --- a/skyvern-ts/client/src/api/types/FileParserBlock.ts +++ b/skyvern-ts/client/src/api/types/FileParserBlock.ts @@ -11,6 +11,7 @@ export interface FileParserBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; file_url: string; file_type?: Skyvern.FileType; diff --git a/skyvern-ts/client/src/api/types/FileParserBlockYaml.ts b/skyvern-ts/client/src/api/types/FileParserBlockYaml.ts index 781e3bdfb..542e39391 100644 --- a/skyvern-ts/client/src/api/types/FileParserBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/FileParserBlockYaml.ts @@ -9,6 +9,7 @@ export interface FileParserBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; file_url: string; file_type?: Skyvern.FileType; diff --git a/skyvern-ts/client/src/api/types/FileUploadBlock.ts b/skyvern-ts/client/src/api/types/FileUploadBlock.ts index b7c16bc08..ccc6b969d 100644 --- a/skyvern-ts/client/src/api/types/FileUploadBlock.ts +++ b/skyvern-ts/client/src/api/types/FileUploadBlock.ts @@ -11,6 +11,7 @@ export interface FileUploadBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; storage_type?: Skyvern.FileStorageType; s3_bucket?: string; diff --git a/skyvern-ts/client/src/api/types/FileUploadBlockYaml.ts b/skyvern-ts/client/src/api/types/FileUploadBlockYaml.ts index bb4e804b8..b1a366903 100644 --- a/skyvern-ts/client/src/api/types/FileUploadBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/FileUploadBlockYaml.ts @@ -9,6 +9,7 @@ export interface FileUploadBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; storage_type?: Skyvern.FileStorageType; s3_bucket?: string; diff --git a/skyvern-ts/client/src/api/types/ForLoopBlock.ts b/skyvern-ts/client/src/api/types/ForLoopBlock.ts index 366dc1b97..b09027586 100644 --- a/skyvern-ts/client/src/api/types/ForLoopBlock.ts +++ b/skyvern-ts/client/src/api/types/ForLoopBlock.ts @@ -11,6 +11,7 @@ export interface ForLoopBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; loop_blocks: Skyvern.ForLoopBlockLoopBlocksItem[]; loop_over?: Skyvern.ForLoopBlockLoopOver; diff --git a/skyvern-ts/client/src/api/types/ForLoopBlockLoopBlocksItem.ts b/skyvern-ts/client/src/api/types/ForLoopBlockLoopBlocksItem.ts index c1cfbf307..4f57cdbe0 100644 --- a/skyvern-ts/client/src/api/types/ForLoopBlockLoopBlocksItem.ts +++ b/skyvern-ts/client/src/api/types/ForLoopBlockLoopBlocksItem.ts @@ -12,6 +12,8 @@ export type ForLoopBlockLoopBlocksItem = | Skyvern.ForLoopBlockLoopBlocksItem.FileUpload | Skyvern.ForLoopBlockLoopBlocksItem.FileUrlParser | Skyvern.ForLoopBlockLoopBlocksItem.ForLoop + | Skyvern.ForLoopBlockLoopBlocksItem.GoogleSheetsRead + | Skyvern.ForLoopBlockLoopBlocksItem.GoogleSheetsWrite | Skyvern.ForLoopBlockLoopBlocksItem.GotoUrl | Skyvern.ForLoopBlockLoopBlocksItem.HttpRequest | Skyvern.ForLoopBlockLoopBlocksItem.HumanInteraction @@ -66,6 +68,14 @@ export namespace ForLoopBlockLoopBlocksItem { block_type: "for_loop"; } + export interface GoogleSheetsRead extends Skyvern.GoogleSheetsReadBlock { + block_type: "google_sheets_read"; + } + + export interface GoogleSheetsWrite extends Skyvern.GoogleSheetsWriteBlock { + block_type: "google_sheets_write"; + } + export interface GotoUrl extends Skyvern.UrlBlock { block_type: "goto_url"; } diff --git a/skyvern-ts/client/src/api/types/ForLoopBlockYaml.ts b/skyvern-ts/client/src/api/types/ForLoopBlockYaml.ts index 62e395577..8c25a2f4d 100644 --- a/skyvern-ts/client/src/api/types/ForLoopBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/ForLoopBlockYaml.ts @@ -9,6 +9,7 @@ export interface ForLoopBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; loop_blocks: Skyvern.ForLoopBlockYamlLoopBlocksItem[]; loop_over_parameter_key?: string; diff --git a/skyvern-ts/client/src/api/types/ForLoopBlockYamlLoopBlocksItem.ts b/skyvern-ts/client/src/api/types/ForLoopBlockYamlLoopBlocksItem.ts index 1ea25f3ff..dcf3026a0 100644 --- a/skyvern-ts/client/src/api/types/ForLoopBlockYamlLoopBlocksItem.ts +++ b/skyvern-ts/client/src/api/types/ForLoopBlockYamlLoopBlocksItem.ts @@ -5,6 +5,7 @@ import type * as Skyvern from "../index.js"; export type ForLoopBlockYamlLoopBlocksItem = | Skyvern.ForLoopBlockYamlLoopBlocksItem.Task | Skyvern.ForLoopBlockYamlLoopBlocksItem.ForLoop + | Skyvern.ForLoopBlockYamlLoopBlocksItem.WhileLoop | Skyvern.ForLoopBlockYamlLoopBlocksItem.Code | Skyvern.ForLoopBlockYamlLoopBlocksItem.TextPrompt | Skyvern.ForLoopBlockYamlLoopBlocksItem.DownloadToS3 @@ -26,7 +27,9 @@ export type ForLoopBlockYamlLoopBlocksItem = | Skyvern.ForLoopBlockYamlLoopBlocksItem.HttpRequest | Skyvern.ForLoopBlockYamlLoopBlocksItem.Conditional | Skyvern.ForLoopBlockYamlLoopBlocksItem.PrintPage - | Skyvern.ForLoopBlockYamlLoopBlocksItem.WorkflowTrigger; + | Skyvern.ForLoopBlockYamlLoopBlocksItem.WorkflowTrigger + | Skyvern.ForLoopBlockYamlLoopBlocksItem.GoogleSheetsRead + | Skyvern.ForLoopBlockYamlLoopBlocksItem.GoogleSheetsWrite; export namespace ForLoopBlockYamlLoopBlocksItem { export interface Task extends Skyvern.TaskBlockYaml { @@ -37,6 +40,10 @@ export namespace ForLoopBlockYamlLoopBlocksItem { block_type: "for_loop"; } + export interface WhileLoop extends Skyvern.WhileLoopBlockYaml { + block_type: "while_loop"; + } + export interface Code extends Skyvern.CodeBlockYaml { block_type: "code"; } @@ -124,4 +131,12 @@ export namespace ForLoopBlockYamlLoopBlocksItem { export interface WorkflowTrigger extends Skyvern.WorkflowTriggerBlockYaml { block_type: "workflow_trigger"; } + + export interface GoogleSheetsRead extends Skyvern.GoogleSheetsReadBlockYaml { + block_type: "google_sheets_read"; + } + + export interface GoogleSheetsWrite extends Skyvern.GoogleSheetsWriteBlockYaml { + block_type: "google_sheets_write"; + } } diff --git a/skyvern-ts/client/src/api/types/GeoTarget.ts b/skyvern-ts/client/src/api/types/GeoTarget.ts index e30483d57..29f9e7264 100644 --- a/skyvern-ts/client/src/api/types/GeoTarget.ts +++ b/skyvern-ts/client/src/api/types/GeoTarget.ts @@ -1,17 +1,7 @@ // This file was auto-generated by Fern from our API Definition. /** - * Granular geographic targeting for proxy selection. - * - * Supports country, subdivision (state/region), and city level targeting. - * Uses ISO 3166-1 alpha-2 for countries, ISO 3166-2 for subdivisions, - * and GeoNames English names for cities. - * - * Examples: - * - {"country": "US"} - United States (same as RESIDENTIAL) - * - {"country": "US", "subdivision": "CA"} - California, US - * - {"country": "US", "subdivision": "NY", "city": "New York"} - New York City - * - {"country": "GB", "city": "London"} - London, UK + * Granular proxy geo-targeting request with country, optional subdivision, and optional city. */ export interface GeoTarget { /** ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB', 'DE') */ diff --git a/skyvern-ts/client/src/api/types/GoogleSheetsReadBlock.ts b/skyvern-ts/client/src/api/types/GoogleSheetsReadBlock.ts new file mode 100644 index 000000000..29ff7b074 --- /dev/null +++ b/skyvern-ts/client/src/api/types/GoogleSheetsReadBlock.ts @@ -0,0 +1,22 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../index.js"; + +export interface GoogleSheetsReadBlock { + /** Author-facing identifier for a block; unique within a workflow. */ + label: string; + /** Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted. */ + next_block_label?: string; + output_parameter: Skyvern.OutputParameter; + continue_on_failure?: boolean; + model?: Record; + disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; + next_loop_on_failure?: boolean; + spreadsheet_url: string; + sheet_name?: string; + range?: string; + credential_id?: string; + has_header_row?: boolean; + parameters?: Skyvern.GoogleSheetsReadBlockParametersItem[]; +} diff --git a/skyvern-ts/client/src/api/types/GoogleSheetsReadBlockParametersItem.ts b/skyvern-ts/client/src/api/types/GoogleSheetsReadBlockParametersItem.ts new file mode 100644 index 000000000..764f963fc --- /dev/null +++ b/skyvern-ts/client/src/api/types/GoogleSheetsReadBlockParametersItem.ts @@ -0,0 +1,62 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../index.js"; + +export type GoogleSheetsReadBlockParametersItem = + | Skyvern.GoogleSheetsReadBlockParametersItem.AwsSecret + | Skyvern.GoogleSheetsReadBlockParametersItem.AzureSecret + | Skyvern.GoogleSheetsReadBlockParametersItem.AzureVaultCredential + | Skyvern.GoogleSheetsReadBlockParametersItem.BitwardenCreditCardData + | Skyvern.GoogleSheetsReadBlockParametersItem.BitwardenLoginCredential + | Skyvern.GoogleSheetsReadBlockParametersItem.BitwardenSensitiveInformation + | Skyvern.GoogleSheetsReadBlockParametersItem.Context + | Skyvern.GoogleSheetsReadBlockParametersItem.Credential + | Skyvern.GoogleSheetsReadBlockParametersItem.Onepassword + | Skyvern.GoogleSheetsReadBlockParametersItem.Output + | Skyvern.GoogleSheetsReadBlockParametersItem.Workflow; + +export namespace GoogleSheetsReadBlockParametersItem { + export interface AwsSecret extends Skyvern.AwsSecretParameter { + parameter_type: "aws_secret"; + } + + export interface AzureSecret extends Skyvern.AzureSecretParameter { + parameter_type: "azure_secret"; + } + + export interface AzureVaultCredential extends Skyvern.AzureVaultCredentialParameter { + parameter_type: "azure_vault_credential"; + } + + export interface BitwardenCreditCardData extends Skyvern.BitwardenCreditCardDataParameter { + parameter_type: "bitwarden_credit_card_data"; + } + + export interface BitwardenLoginCredential extends Skyvern.BitwardenLoginCredentialParameter { + parameter_type: "bitwarden_login_credential"; + } + + export interface BitwardenSensitiveInformation extends Skyvern.BitwardenSensitiveInformationParameter { + parameter_type: "bitwarden_sensitive_information"; + } + + export interface Context extends Skyvern.ContextParameter { + parameter_type: "context"; + } + + export interface Credential extends Skyvern.CredentialParameter { + parameter_type: "credential"; + } + + export interface Onepassword extends Skyvern.OnePasswordCredentialParameter { + parameter_type: "onepassword"; + } + + export interface Output extends Skyvern.OutputParameter { + parameter_type: "output"; + } + + export interface Workflow extends Skyvern.WorkflowParameter { + parameter_type: "workflow"; + } +} diff --git a/skyvern-ts/client/src/api/types/GoogleSheetsReadBlockYaml.ts b/skyvern-ts/client/src/api/types/GoogleSheetsReadBlockYaml.ts new file mode 100644 index 000000000..1d6b64739 --- /dev/null +++ b/skyvern-ts/client/src/api/types/GoogleSheetsReadBlockYaml.ts @@ -0,0 +1,18 @@ +// This file was auto-generated by Fern from our API Definition. + +export interface GoogleSheetsReadBlockYaml { + /** Author-facing identifier; must be unique per workflow. */ + label: string; + /** Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]. */ + next_block_label?: string; + continue_on_failure?: boolean; + model?: Record; + ignore_workflow_system_prompt?: boolean; + next_loop_on_failure?: boolean; + spreadsheet_url: string; + sheet_name?: string; + range?: string; + credential_id?: string; + has_header_row?: boolean; + parameter_keys?: string[]; +} diff --git a/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlock.ts b/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlock.ts new file mode 100644 index 000000000..ebd89ae2a --- /dev/null +++ b/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlock.ts @@ -0,0 +1,33 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../index.js"; + +export interface GoogleSheetsWriteBlock { + /** Author-facing identifier for a block; unique within a workflow. */ + label: string; + /** Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted. */ + next_block_label?: string; + output_parameter: Skyvern.OutputParameter; + continue_on_failure?: boolean; + model?: Record; + disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; + next_loop_on_failure?: boolean; + spreadsheet_url: string; + sheet_name?: string; + range?: string; + credential_id?: string; + write_mode?: GoogleSheetsWriteBlock.WriteMode; + values?: string; + column_mapping?: Record; + create_sheet_if_missing?: boolean; + parameters?: Skyvern.GoogleSheetsWriteBlockParametersItem[]; +} + +export namespace GoogleSheetsWriteBlock { + export const WriteMode = { + Append: "append", + Update: "update", + } as const; + export type WriteMode = (typeof WriteMode)[keyof typeof WriteMode]; +} diff --git a/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockParametersItem.ts b/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockParametersItem.ts new file mode 100644 index 000000000..8d7bf0bca --- /dev/null +++ b/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockParametersItem.ts @@ -0,0 +1,62 @@ +// This file was auto-generated by Fern from our API Definition. + +import type * as Skyvern from "../index.js"; + +export type GoogleSheetsWriteBlockParametersItem = + | Skyvern.GoogleSheetsWriteBlockParametersItem.AwsSecret + | Skyvern.GoogleSheetsWriteBlockParametersItem.AzureSecret + | Skyvern.GoogleSheetsWriteBlockParametersItem.AzureVaultCredential + | Skyvern.GoogleSheetsWriteBlockParametersItem.BitwardenCreditCardData + | Skyvern.GoogleSheetsWriteBlockParametersItem.BitwardenLoginCredential + | Skyvern.GoogleSheetsWriteBlockParametersItem.BitwardenSensitiveInformation + | Skyvern.GoogleSheetsWriteBlockParametersItem.Context + | Skyvern.GoogleSheetsWriteBlockParametersItem.Credential + | Skyvern.GoogleSheetsWriteBlockParametersItem.Onepassword + | Skyvern.GoogleSheetsWriteBlockParametersItem.Output + | Skyvern.GoogleSheetsWriteBlockParametersItem.Workflow; + +export namespace GoogleSheetsWriteBlockParametersItem { + export interface AwsSecret extends Skyvern.AwsSecretParameter { + parameter_type: "aws_secret"; + } + + export interface AzureSecret extends Skyvern.AzureSecretParameter { + parameter_type: "azure_secret"; + } + + export interface AzureVaultCredential extends Skyvern.AzureVaultCredentialParameter { + parameter_type: "azure_vault_credential"; + } + + export interface BitwardenCreditCardData extends Skyvern.BitwardenCreditCardDataParameter { + parameter_type: "bitwarden_credit_card_data"; + } + + export interface BitwardenLoginCredential extends Skyvern.BitwardenLoginCredentialParameter { + parameter_type: "bitwarden_login_credential"; + } + + export interface BitwardenSensitiveInformation extends Skyvern.BitwardenSensitiveInformationParameter { + parameter_type: "bitwarden_sensitive_information"; + } + + export interface Context extends Skyvern.ContextParameter { + parameter_type: "context"; + } + + export interface Credential extends Skyvern.CredentialParameter { + parameter_type: "credential"; + } + + export interface Onepassword extends Skyvern.OnePasswordCredentialParameter { + parameter_type: "onepassword"; + } + + export interface Output extends Skyvern.OutputParameter { + parameter_type: "output"; + } + + export interface Workflow extends Skyvern.WorkflowParameter { + parameter_type: "workflow"; + } +} diff --git a/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockYaml.ts b/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockYaml.ts new file mode 100644 index 000000000..7088f1f1c --- /dev/null +++ b/skyvern-ts/client/src/api/types/GoogleSheetsWriteBlockYaml.ts @@ -0,0 +1,29 @@ +// This file was auto-generated by Fern from our API Definition. + +export interface GoogleSheetsWriteBlockYaml { + /** Author-facing identifier; must be unique per workflow. */ + label: string; + /** Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]. */ + next_block_label?: string; + continue_on_failure?: boolean; + model?: Record; + ignore_workflow_system_prompt?: boolean; + next_loop_on_failure?: boolean; + spreadsheet_url: string; + sheet_name?: string; + range?: string; + credential_id?: string; + write_mode?: GoogleSheetsWriteBlockYaml.WriteMode; + values?: string; + column_mapping?: Record; + create_sheet_if_missing?: boolean; + parameter_keys?: string[]; +} + +export namespace GoogleSheetsWriteBlockYaml { + export const WriteMode = { + Append: "append", + Update: "update", + } as const; + export type WriteMode = (typeof WriteMode)[keyof typeof WriteMode]; +} diff --git a/skyvern-ts/client/src/api/types/HttpRequestBlock.ts b/skyvern-ts/client/src/api/types/HttpRequestBlock.ts index 944efb369..0c673be30 100644 --- a/skyvern-ts/client/src/api/types/HttpRequestBlock.ts +++ b/skyvern-ts/client/src/api/types/HttpRequestBlock.ts @@ -11,6 +11,7 @@ export interface HttpRequestBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; method?: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts b/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts index 86d309133..6db4d0cda 100644 --- a/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/HttpRequestBlockYaml.ts @@ -7,6 +7,7 @@ export interface HttpRequestBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; method?: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/HumanInteractionBlock.ts b/skyvern-ts/client/src/api/types/HumanInteractionBlock.ts index bdd5fefdb..05820e8d7 100644 --- a/skyvern-ts/client/src/api/types/HumanInteractionBlock.ts +++ b/skyvern-ts/client/src/api/types/HumanInteractionBlock.ts @@ -22,6 +22,7 @@ export interface HumanInteractionBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -43,6 +44,7 @@ export interface HumanInteractionBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; instructions?: string; positive_descriptor?: string; negative_descriptor?: string; diff --git a/skyvern-ts/client/src/api/types/HumanInteractionBlockYaml.ts b/skyvern-ts/client/src/api/types/HumanInteractionBlockYaml.ts index dffa86abf..59f7ede92 100644 --- a/skyvern-ts/client/src/api/types/HumanInteractionBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/HumanInteractionBlockYaml.ts @@ -7,6 +7,7 @@ export interface HumanInteractionBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; instructions?: string; positive_descriptor?: string; diff --git a/skyvern-ts/client/src/api/types/LoginBlock.ts b/skyvern-ts/client/src/api/types/LoginBlock.ts index 65e835f89..bd001ccba 100644 --- a/skyvern-ts/client/src/api/types/LoginBlock.ts +++ b/skyvern-ts/client/src/api/types/LoginBlock.ts @@ -11,6 +11,7 @@ export interface LoginBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface LoginBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace LoginBlock { diff --git a/skyvern-ts/client/src/api/types/LoginBlockYaml.ts b/skyvern-ts/client/src/api/types/LoginBlockYaml.ts index 3cd9fde4c..c88702f90 100644 --- a/skyvern-ts/client/src/api/types/LoginBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/LoginBlockYaml.ts @@ -9,6 +9,7 @@ export interface LoginBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; url?: string; title?: string; diff --git a/skyvern-ts/client/src/api/types/NavigationBlock.ts b/skyvern-ts/client/src/api/types/NavigationBlock.ts index c81cfb076..128457ca0 100644 --- a/skyvern-ts/client/src/api/types/NavigationBlock.ts +++ b/skyvern-ts/client/src/api/types/NavigationBlock.ts @@ -11,6 +11,7 @@ export interface NavigationBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface NavigationBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace NavigationBlock { diff --git a/skyvern-ts/client/src/api/types/NavigationBlockYaml.ts b/skyvern-ts/client/src/api/types/NavigationBlockYaml.ts index 8681a35d2..e0f73f8b4 100644 --- a/skyvern-ts/client/src/api/types/NavigationBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/NavigationBlockYaml.ts @@ -9,6 +9,7 @@ export interface NavigationBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; navigation_goal: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/PdfParserBlock.ts b/skyvern-ts/client/src/api/types/PdfParserBlock.ts index a209f6d32..a48af9b6b 100644 --- a/skyvern-ts/client/src/api/types/PdfParserBlock.ts +++ b/skyvern-ts/client/src/api/types/PdfParserBlock.ts @@ -15,6 +15,7 @@ export interface PdfParserBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; file_url: string; json_schema?: Record; diff --git a/skyvern-ts/client/src/api/types/PdfParserBlockYaml.ts b/skyvern-ts/client/src/api/types/PdfParserBlockYaml.ts index a40fcd7c8..33b78dcb8 100644 --- a/skyvern-ts/client/src/api/types/PdfParserBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/PdfParserBlockYaml.ts @@ -7,6 +7,7 @@ export interface PdfParserBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; file_url: string; json_schema?: Record; diff --git a/skyvern-ts/client/src/api/types/PrintPageBlock.ts b/skyvern-ts/client/src/api/types/PrintPageBlock.ts index 2babe6230..3c2f41371 100644 --- a/skyvern-ts/client/src/api/types/PrintPageBlock.ts +++ b/skyvern-ts/client/src/api/types/PrintPageBlock.ts @@ -11,6 +11,7 @@ export interface PrintPageBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; include_timestamp?: boolean; custom_filename?: string; diff --git a/skyvern-ts/client/src/api/types/PrintPageBlockYaml.ts b/skyvern-ts/client/src/api/types/PrintPageBlockYaml.ts index d19fdcaf4..4f87327aa 100644 --- a/skyvern-ts/client/src/api/types/PrintPageBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/PrintPageBlockYaml.ts @@ -9,6 +9,7 @@ export interface PrintPageBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; include_timestamp?: boolean; custom_filename?: string; diff --git a/skyvern-ts/client/src/api/types/ProxyLocation.ts b/skyvern-ts/client/src/api/types/ProxyLocation.ts index d9e3998c3..5ceead033 100644 --- a/skyvern-ts/client/src/api/types/ProxyLocation.ts +++ b/skyvern-ts/client/src/api/types/ProxyLocation.ts @@ -26,6 +26,7 @@ export const ProxyLocation = { ResidentialNl: "RESIDENTIAL_NL", ResidentialPh: "RESIDENTIAL_PH", ResidentialKr: "RESIDENTIAL_KR", + ResidentialSa: "RESIDENTIAL_SA", ResidentialIsp: "RESIDENTIAL_ISP", None: "NONE", } as const; diff --git a/skyvern-ts/client/src/api/types/RunWebhookReplayResponse.ts b/skyvern-ts/client/src/api/types/RunWebhookReplayResponse.ts new file mode 100644 index 000000000..64b4e2d0b --- /dev/null +++ b/skyvern-ts/client/src/api/types/RunWebhookReplayResponse.ts @@ -0,0 +1,24 @@ +// This file was auto-generated by Fern from our API Definition. + +export interface RunWebhookReplayResponse { + /** Identifier of the run that was replayed */ + run_id: string; + /** Run type associated with the payload */ + run_type: string; + /** Webhook URL stored on the original run configuration */ + default_webhook_url?: string; + /** Webhook URL that the replay attempted to reach */ + target_webhook_url?: string; + /** JSON payload that was delivered during the replay attempt */ + payload: string; + /** Signed headers that were generated for the replay attempt */ + headers: Record; + /** HTTP status code returned by the webhook receiver, if available */ + status_code?: number; + /** Round-trip latency in milliseconds for the replay attempt */ + latency_ms?: number; + /** Body returned by the webhook receiver (truncated to 2KB) */ + response_body?: string; + /** Error message if the replay attempt failed */ + error?: string; +} diff --git a/skyvern-ts/client/src/api/types/SendEmailBlock.ts b/skyvern-ts/client/src/api/types/SendEmailBlock.ts index 2f8de8246..0a58b243d 100644 --- a/skyvern-ts/client/src/api/types/SendEmailBlock.ts +++ b/skyvern-ts/client/src/api/types/SendEmailBlock.ts @@ -11,6 +11,7 @@ export interface SendEmailBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; smtp_host: Skyvern.AwsSecretParameter; smtp_port: Skyvern.AwsSecretParameter; diff --git a/skyvern-ts/client/src/api/types/SendEmailBlockYaml.ts b/skyvern-ts/client/src/api/types/SendEmailBlockYaml.ts index 548cd0f20..8341c856d 100644 --- a/skyvern-ts/client/src/api/types/SendEmailBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/SendEmailBlockYaml.ts @@ -7,6 +7,7 @@ export interface SendEmailBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; smtp_host_secret_parameter_key: string; smtp_port_secret_parameter_key: string; diff --git a/skyvern-ts/client/src/api/types/SkyvernSchemasCredentialTypeCredentialType.ts b/skyvern-ts/client/src/api/types/SkyvernSchemasCredentialTypeCredentialType.ts new file mode 100644 index 000000000..7b3fdc341 --- /dev/null +++ b/skyvern-ts/client/src/api/types/SkyvernSchemasCredentialTypeCredentialType.ts @@ -0,0 +1,10 @@ +// This file was auto-generated by Fern from our API Definition. + +export const SkyvernSchemasCredentialTypeCredentialType = { + Skyvern: "skyvern", + Bitwarden: "bitwarden", + OnePassword: "1password", + AzureVault: "azure_vault", +} as const; +export type SkyvernSchemasCredentialTypeCredentialType = + (typeof SkyvernSchemasCredentialTypeCredentialType)[keyof typeof SkyvernSchemasCredentialTypeCredentialType]; diff --git a/skyvern-ts/client/src/api/types/SkyvernSchemasRunBlocksCredentialType.ts b/skyvern-ts/client/src/api/types/SkyvernSchemasRunBlocksCredentialType.ts deleted file mode 100644 index 972e6a836..000000000 --- a/skyvern-ts/client/src/api/types/SkyvernSchemasRunBlocksCredentialType.ts +++ /dev/null @@ -1,10 +0,0 @@ -// This file was auto-generated by Fern from our API Definition. - -export const SkyvernSchemasRunBlocksCredentialType = { - Skyvern: "skyvern", - Bitwarden: "bitwarden", - OnePassword: "1password", - AzureVault: "azure_vault", -} as const; -export type SkyvernSchemasRunBlocksCredentialType = - (typeof SkyvernSchemasRunBlocksCredentialType)[keyof typeof SkyvernSchemasRunBlocksCredentialType]; diff --git a/skyvern-ts/client/src/api/types/TaskBlock.ts b/skyvern-ts/client/src/api/types/TaskBlock.ts index ac6fb1567..3f75af6e4 100644 --- a/skyvern-ts/client/src/api/types/TaskBlock.ts +++ b/skyvern-ts/client/src/api/types/TaskBlock.ts @@ -11,6 +11,7 @@ export interface TaskBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface TaskBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace TaskBlock { diff --git a/skyvern-ts/client/src/api/types/TaskBlockYaml.ts b/skyvern-ts/client/src/api/types/TaskBlockYaml.ts index 0bbf315e6..908e7d0f4 100644 --- a/skyvern-ts/client/src/api/types/TaskBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/TaskBlockYaml.ts @@ -9,6 +9,7 @@ export interface TaskBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; url?: string; title?: string; diff --git a/skyvern-ts/client/src/api/types/TaskRunListItem.ts b/skyvern-ts/client/src/api/types/TaskRunListItem.ts index f213ca30c..7ad9ce022 100644 --- a/skyvern-ts/client/src/api/types/TaskRunListItem.ts +++ b/skyvern-ts/client/src/api/types/TaskRunListItem.ts @@ -13,5 +13,6 @@ export interface TaskRunListItem { finished_at?: string; created_at: string; workflow_permanent_id?: string; + workflow_deleted?: boolean; script_run?: boolean; } diff --git a/skyvern-ts/client/src/api/types/TaskRunRequest.ts b/skyvern-ts/client/src/api/types/TaskRunRequestOutput.ts similarity index 78% rename from skyvern-ts/client/src/api/types/TaskRunRequest.ts rename to skyvern-ts/client/src/api/types/TaskRunRequestOutput.ts index a3bf301f4..c635126d0 100644 --- a/skyvern-ts/client/src/api/types/TaskRunRequest.ts +++ b/skyvern-ts/client/src/api/types/TaskRunRequestOutput.ts @@ -2,7 +2,7 @@ import type * as Skyvern from "../index.js"; -export interface TaskRunRequest { +export interface TaskRunRequestOutput { /** * The goal or task description for Skyvern to accomplish */ @@ -12,7 +12,7 @@ export interface TaskRunRequest { */ url?: string; /** - * The engine that powers the agent task. The default value is `skyvern-1.0`, which is good for simple tasks like filling a form, or searching for information on Google. `skyvern-2.0` is the latest Skyvern agent that performs well with complex and multi-step tasks. The `openai-cua` engine uses OpenAI's CUA model. The `anthropic-cua` uses Anthropic's Claude Sonnet 3.7 model with the computer use tool. + * The engine that powers the agent task. The default value is `skyvern-1.0`, which is good for simple tasks like filling a form, or searching for information on Google. `skyvern-2.0` remains available for existing V2 workflows and explicitly requested V2 task runs. The `openai-cua` engine uses OpenAI's CUA model. The `anthropic-cua` uses Anthropic's Claude Sonnet 3.7 model with the computer use tool. */ engine?: Skyvern.RunEngine; /** The title for the task */ @@ -32,6 +32,7 @@ export interface TaskRunRequest { * - RESIDENTIAL_NZ: New Zealand * - RESIDENTIAL_PH: Philippines * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia * - RESIDENTIAL_ZA: South Africa * - RESIDENTIAL_AR: Argentina * - RESIDENTIAL_AU: Australia @@ -48,13 +49,15 @@ export interface TaskRunRequest { * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} */ - proxy_location?: TaskRunRequest.ProxyLocation; + proxy_location?: TaskRunRequestOutput.ProxyLocation; /** * The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. */ - data_extraction_schema?: TaskRunRequest.DataExtractionSchema; + data_extraction_schema?: TaskRunRequestOutput.DataExtractionSchema; /** * Custom mapping of error codes to error messages if Skyvern encounters an error. */ @@ -85,7 +88,9 @@ export interface TaskRunRequest { model?: Record; /** The extra HTTP headers for the requests in browser. */ extra_http_headers?: Record; - /** Whether to publish this task as a reusable workflow. Only available for skyvern-2.0. */ + /** HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. */ + cdp_connect_headers?: Record; + /** Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. */ publish_workflow?: boolean; /** Whether to include action history when verifying that the task is complete */ include_action_history_in_verification?: boolean; @@ -97,7 +102,7 @@ export interface TaskRunRequest { run_with?: string; } -export namespace TaskRunRequest { +export namespace TaskRunRequestOutput { /** * * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -114,6 +119,7 @@ export namespace TaskRunRequest { * - RESIDENTIAL_NZ: New Zealand * - RESIDENTIAL_PH: Philippines * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia * - RESIDENTIAL_ZA: South Africa * - RESIDENTIAL_AR: Argentina * - RESIDENTIAL_AU: Australia @@ -130,6 +136,8 @@ export namespace TaskRunRequest { * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} */ export type ProxyLocation = Skyvern.ProxyLocation | Skyvern.GeoTarget | Record; diff --git a/skyvern-ts/client/src/api/types/TaskRunResponse.ts b/skyvern-ts/client/src/api/types/TaskRunResponse.ts index 12b795a2e..4cc72cc1f 100644 --- a/skyvern-ts/client/src/api/types/TaskRunResponse.ts +++ b/skyvern-ts/client/src/api/types/TaskRunResponse.ts @@ -13,6 +13,8 @@ export interface TaskRunResponse { downloaded_files?: Skyvern.FileInfo[]; /** URL to the recording of the run */ recording_url?: string; + /** True when the recording exists but has been archived to cold storage and is not currently accessible. */ + recording_archived?: boolean; /** List of last n screenshot URLs in reverse chronological order - the first one the list is the latest screenshot. */ screenshot_urls?: string[]; /** Reason for failure if the run failed or terminated */ @@ -42,7 +44,7 @@ export interface TaskRunResponse { /** Total number of steps executed in this run */ step_count?: number; /** The original request parameters used to start this task run */ - run_request?: Skyvern.TaskRunRequest; + run_request?: Skyvern.TaskRunRequestOutput; } export namespace TaskRunResponse { diff --git a/skyvern-ts/client/src/api/types/TaskV2Block.ts b/skyvern-ts/client/src/api/types/TaskV2Block.ts index 5e39464c8..a01e23631 100644 --- a/skyvern-ts/client/src/api/types/TaskV2Block.ts +++ b/skyvern-ts/client/src/api/types/TaskV2Block.ts @@ -11,6 +11,7 @@ export interface TaskV2Block { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; prompt: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/TaskV2BlockYaml.ts b/skyvern-ts/client/src/api/types/TaskV2BlockYaml.ts index 96ce60bb8..a2f1b9713 100644 --- a/skyvern-ts/client/src/api/types/TaskV2BlockYaml.ts +++ b/skyvern-ts/client/src/api/types/TaskV2BlockYaml.ts @@ -7,6 +7,7 @@ export interface TaskV2BlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; prompt: string; url?: string; diff --git a/skyvern-ts/client/src/api/types/TextPromptBlock.ts b/skyvern-ts/client/src/api/types/TextPromptBlock.ts index 054ead446..5251f5b33 100644 --- a/skyvern-ts/client/src/api/types/TextPromptBlock.ts +++ b/skyvern-ts/client/src/api/types/TextPromptBlock.ts @@ -11,6 +11,7 @@ export interface TextPromptBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; llm_key?: string; prompt: string; diff --git a/skyvern-ts/client/src/api/types/TextPromptBlockYaml.ts b/skyvern-ts/client/src/api/types/TextPromptBlockYaml.ts index 569364538..fbe38a8bc 100644 --- a/skyvern-ts/client/src/api/types/TextPromptBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/TextPromptBlockYaml.ts @@ -7,6 +7,7 @@ export interface TextPromptBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; llm_key?: string; prompt: string; diff --git a/skyvern-ts/client/src/api/types/Thought.ts b/skyvern-ts/client/src/api/types/Thought.ts index c4c374598..9f67b63ab 100644 --- a/skyvern-ts/client/src/api/types/Thought.ts +++ b/skyvern-ts/client/src/api/types/Thought.ts @@ -22,6 +22,7 @@ export interface Thought { reasoning_token_count?: number; cached_token_count?: number; thought_cost?: number; + last_llm_model?: string; created_at: string; modified_at: string; } diff --git a/skyvern-ts/client/src/api/types/UploadToS3Block.ts b/skyvern-ts/client/src/api/types/UploadToS3Block.ts index c4db4962e..cb22049b6 100644 --- a/skyvern-ts/client/src/api/types/UploadToS3Block.ts +++ b/skyvern-ts/client/src/api/types/UploadToS3Block.ts @@ -11,6 +11,7 @@ export interface UploadToS3Block { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; path?: string; } diff --git a/skyvern-ts/client/src/api/types/UploadToS3BlockYaml.ts b/skyvern-ts/client/src/api/types/UploadToS3BlockYaml.ts index dc85a0f44..b9eb5e376 100644 --- a/skyvern-ts/client/src/api/types/UploadToS3BlockYaml.ts +++ b/skyvern-ts/client/src/api/types/UploadToS3BlockYaml.ts @@ -7,6 +7,7 @@ export interface UploadToS3BlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; path?: string; } diff --git a/skyvern-ts/client/src/api/types/UrlBlock.ts b/skyvern-ts/client/src/api/types/UrlBlock.ts index 18da2f6c9..a87b7ec86 100644 --- a/skyvern-ts/client/src/api/types/UrlBlock.ts +++ b/skyvern-ts/client/src/api/types/UrlBlock.ts @@ -11,6 +11,7 @@ export interface UrlBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url: string; @@ -32,6 +33,7 @@ export interface UrlBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace UrlBlock { diff --git a/skyvern-ts/client/src/api/types/UrlBlockYaml.ts b/skyvern-ts/client/src/api/types/UrlBlockYaml.ts index 064acdbca..d1c595e05 100644 --- a/skyvern-ts/client/src/api/types/UrlBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/UrlBlockYaml.ts @@ -7,6 +7,7 @@ export interface UrlBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; url: string; } diff --git a/skyvern-ts/client/src/api/types/UserDefinedError.ts b/skyvern-ts/client/src/api/types/UserDefinedError.ts index 619c2b7e2..7422febd9 100644 --- a/skyvern-ts/client/src/api/types/UserDefinedError.ts +++ b/skyvern-ts/client/src/api/types/UserDefinedError.ts @@ -4,4 +4,5 @@ export interface UserDefinedError { error_code: string; reasoning: string; confidence_float: number; + error_type?: "USER_DEFINED_ERROR"; } diff --git a/skyvern-ts/client/src/api/types/ValidationBlock.ts b/skyvern-ts/client/src/api/types/ValidationBlock.ts index 399393b0f..94279b42f 100644 --- a/skyvern-ts/client/src/api/types/ValidationBlock.ts +++ b/skyvern-ts/client/src/api/types/ValidationBlock.ts @@ -11,6 +11,7 @@ export interface ValidationBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; task_type?: string; url?: string; @@ -32,6 +33,7 @@ export interface ValidationBlock { complete_verification?: boolean; include_action_history_in_verification?: boolean; download_timeout?: number; + include_extracted_text?: boolean; } export namespace ValidationBlock { diff --git a/skyvern-ts/client/src/api/types/ValidationBlockYaml.ts b/skyvern-ts/client/src/api/types/ValidationBlockYaml.ts index c5042c04d..efd7eac7d 100644 --- a/skyvern-ts/client/src/api/types/ValidationBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/ValidationBlockYaml.ts @@ -7,6 +7,7 @@ export interface ValidationBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; complete_criterion?: string; terminate_criterion?: string; diff --git a/skyvern-ts/client/src/api/types/WaitBlock.ts b/skyvern-ts/client/src/api/types/WaitBlock.ts index ab2f79f6e..09d4bd560 100644 --- a/skyvern-ts/client/src/api/types/WaitBlock.ts +++ b/skyvern-ts/client/src/api/types/WaitBlock.ts @@ -11,6 +11,7 @@ export interface WaitBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; wait_sec: number; parameters?: Skyvern.WaitBlockParametersItem[]; diff --git a/skyvern-ts/client/src/api/types/WaitBlockYaml.ts b/skyvern-ts/client/src/api/types/WaitBlockYaml.ts index dab5bbc42..b46020951 100644 --- a/skyvern-ts/client/src/api/types/WaitBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/WaitBlockYaml.ts @@ -7,6 +7,7 @@ export interface WaitBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; wait_sec?: number; } diff --git a/skyvern-ts/client/src/api/types/WhileLoopBlock.ts b/skyvern-ts/client/src/api/types/WhileLoopBlock.ts index ffa675652..c1cf6c957 100644 --- a/skyvern-ts/client/src/api/types/WhileLoopBlock.ts +++ b/skyvern-ts/client/src/api/types/WhileLoopBlock.ts @@ -9,7 +9,7 @@ import type * as Skyvern from "../index.js"; * first). If the condition is false on the first check, the body never runs and the block * returns success with an empty output list. * - * Safety: the loop is capped at ``DEFAULT_MAX_LOOP_ITERATIONS`` (100). Reaching the cap is + * Safety: the loop is capped at ``DEFAULT_MAX_LOOP_ITERATIONS`` (500). Reaching the cap is * treated as a failure so that a misbehaving condition can never spin forever. */ export interface WhileLoopBlock { diff --git a/skyvern-ts/client/src/api/types/WhileLoopBlockLoopBlocksItem.ts b/skyvern-ts/client/src/api/types/WhileLoopBlockLoopBlocksItem.ts index e5db3a180..6816f865c 100644 --- a/skyvern-ts/client/src/api/types/WhileLoopBlockLoopBlocksItem.ts +++ b/skyvern-ts/client/src/api/types/WhileLoopBlockLoopBlocksItem.ts @@ -12,6 +12,8 @@ export type WhileLoopBlockLoopBlocksItem = | Skyvern.WhileLoopBlockLoopBlocksItem.FileUpload | Skyvern.WhileLoopBlockLoopBlocksItem.FileUrlParser | Skyvern.WhileLoopBlockLoopBlocksItem.ForLoop + | Skyvern.WhileLoopBlockLoopBlocksItem.GoogleSheetsRead + | Skyvern.WhileLoopBlockLoopBlocksItem.GoogleSheetsWrite | Skyvern.WhileLoopBlockLoopBlocksItem.GotoUrl | Skyvern.WhileLoopBlockLoopBlocksItem.HttpRequest | Skyvern.WhileLoopBlockLoopBlocksItem.HumanInteraction @@ -66,6 +68,14 @@ export namespace WhileLoopBlockLoopBlocksItem { block_type: "for_loop"; } + export interface GoogleSheetsRead extends Skyvern.GoogleSheetsReadBlock { + block_type: "google_sheets_read"; + } + + export interface GoogleSheetsWrite extends Skyvern.GoogleSheetsWriteBlock { + block_type: "google_sheets_write"; + } + export interface GotoUrl extends Skyvern.UrlBlock { block_type: "goto_url"; } diff --git a/skyvern-ts/client/src/api/types/WhileLoopBlockYamlLoopBlocksItem.ts b/skyvern-ts/client/src/api/types/WhileLoopBlockYamlLoopBlocksItem.ts index 3350873e7..4194efdbd 100644 --- a/skyvern-ts/client/src/api/types/WhileLoopBlockYamlLoopBlocksItem.ts +++ b/skyvern-ts/client/src/api/types/WhileLoopBlockYamlLoopBlocksItem.ts @@ -27,7 +27,9 @@ export type WhileLoopBlockYamlLoopBlocksItem = | Skyvern.WhileLoopBlockYamlLoopBlocksItem.HttpRequest | Skyvern.WhileLoopBlockYamlLoopBlocksItem.Conditional | Skyvern.WhileLoopBlockYamlLoopBlocksItem.PrintPage - | Skyvern.WhileLoopBlockYamlLoopBlocksItem.WorkflowTrigger; + | Skyvern.WhileLoopBlockYamlLoopBlocksItem.WorkflowTrigger + | Skyvern.WhileLoopBlockYamlLoopBlocksItem.GoogleSheetsRead + | Skyvern.WhileLoopBlockYamlLoopBlocksItem.GoogleSheetsWrite; export namespace WhileLoopBlockYamlLoopBlocksItem { export interface Task extends Skyvern.TaskBlockYaml { @@ -129,4 +131,12 @@ export namespace WhileLoopBlockYamlLoopBlocksItem { export interface WorkflowTrigger extends Skyvern.WorkflowTriggerBlockYaml { block_type: "workflow_trigger"; } + + export interface GoogleSheetsRead extends Skyvern.GoogleSheetsReadBlockYaml { + block_type: "google_sheets_read"; + } + + export interface GoogleSheetsWrite extends Skyvern.GoogleSheetsWriteBlockYaml { + block_type: "google_sheets_write"; + } } diff --git a/skyvern-ts/client/src/api/types/Workflow.ts b/skyvern-ts/client/src/api/types/Workflow.ts index c595b5c4c..7b6582f40 100644 --- a/skyvern-ts/client/src/api/types/Workflow.ts +++ b/skyvern-ts/client/src/api/types/Workflow.ts @@ -17,10 +17,13 @@ export interface Workflow { totp_verification_url?: string; totp_identifier?: string; persist_browser_session?: boolean; + browser_profile_id?: string; model?: Record; status?: Skyvern.WorkflowStatus; max_screenshot_scrolls?: number; + max_elapsed_time_minutes?: number; extra_http_headers?: Record; + cdp_connect_headers?: Record; run_with?: string; ai_fallback?: boolean; cache_key?: string; @@ -31,6 +34,8 @@ export interface Workflow { sequential_key?: string; folder_id?: string; import_error?: string; + created_by?: string; + edited_by?: string; created_at: string; modified_at: string; deleted_at?: string; diff --git a/skyvern-ts/client/src/api/types/WorkflowCreateYamlRequest.ts b/skyvern-ts/client/src/api/types/WorkflowCreateYamlRequest.ts index 90a061beb..c3f581003 100644 --- a/skyvern-ts/client/src/api/types/WorkflowCreateYamlRequest.ts +++ b/skyvern-ts/client/src/api/types/WorkflowCreateYamlRequest.ts @@ -10,11 +10,14 @@ export interface WorkflowCreateYamlRequest { totp_verification_url?: string; totp_identifier?: string; persist_browser_session?: boolean; + browser_profile_id?: string; model?: Record; workflow_definition: Skyvern.WorkflowDefinitionYaml; is_saved_task?: boolean; max_screenshot_scrolls?: number; + max_elapsed_time_minutes?: number; extra_http_headers?: Record; + cdp_connect_headers?: Record; status?: Skyvern.WorkflowStatus; run_with?: string; ai_fallback?: boolean; diff --git a/skyvern-ts/client/src/api/types/WorkflowDefinition.ts b/skyvern-ts/client/src/api/types/WorkflowDefinition.ts index 24df8cd47..21081b67e 100644 --- a/skyvern-ts/client/src/api/types/WorkflowDefinition.ts +++ b/skyvern-ts/client/src/api/types/WorkflowDefinition.ts @@ -7,4 +7,6 @@ export interface WorkflowDefinition { parameters: Skyvern.WorkflowDefinitionParametersItem[]; blocks: Skyvern.WorkflowDefinitionBlocksItem[]; finally_block_label?: string; + error_code_mapping?: Record; + workflow_system_prompt?: string; } diff --git a/skyvern-ts/client/src/api/types/WorkflowDefinitionBlocksItem.ts b/skyvern-ts/client/src/api/types/WorkflowDefinitionBlocksItem.ts index 239370478..a6727388a 100644 --- a/skyvern-ts/client/src/api/types/WorkflowDefinitionBlocksItem.ts +++ b/skyvern-ts/client/src/api/types/WorkflowDefinitionBlocksItem.ts @@ -12,6 +12,8 @@ export type WorkflowDefinitionBlocksItem = | Skyvern.WorkflowDefinitionBlocksItem.FileUpload | Skyvern.WorkflowDefinitionBlocksItem.FileUrlParser | Skyvern.WorkflowDefinitionBlocksItem.ForLoop + | Skyvern.WorkflowDefinitionBlocksItem.GoogleSheetsRead + | Skyvern.WorkflowDefinitionBlocksItem.GoogleSheetsWrite | Skyvern.WorkflowDefinitionBlocksItem.GotoUrl | Skyvern.WorkflowDefinitionBlocksItem.HttpRequest | Skyvern.WorkflowDefinitionBlocksItem.HumanInteraction @@ -66,6 +68,14 @@ export namespace WorkflowDefinitionBlocksItem { block_type: "for_loop"; } + export interface GoogleSheetsRead extends Skyvern.GoogleSheetsReadBlock { + block_type: "google_sheets_read"; + } + + export interface GoogleSheetsWrite extends Skyvern.GoogleSheetsWriteBlock { + block_type: "google_sheets_write"; + } + export interface GotoUrl extends Skyvern.UrlBlock { block_type: "goto_url"; } diff --git a/skyvern-ts/client/src/api/types/WorkflowDefinitionYaml.ts b/skyvern-ts/client/src/api/types/WorkflowDefinitionYaml.ts index 0ac4a4e5c..6b943cadf 100644 --- a/skyvern-ts/client/src/api/types/WorkflowDefinitionYaml.ts +++ b/skyvern-ts/client/src/api/types/WorkflowDefinitionYaml.ts @@ -7,4 +7,6 @@ export interface WorkflowDefinitionYaml { parameters: Skyvern.WorkflowDefinitionYamlParametersItem[]; blocks: Skyvern.WorkflowDefinitionYamlBlocksItem[]; finally_block_label?: string; + error_code_mapping?: Record; + workflow_system_prompt?: string; } diff --git a/skyvern-ts/client/src/api/types/WorkflowDefinitionYamlBlocksItem.ts b/skyvern-ts/client/src/api/types/WorkflowDefinitionYamlBlocksItem.ts index 1f1647f8d..617fd1336 100644 --- a/skyvern-ts/client/src/api/types/WorkflowDefinitionYamlBlocksItem.ts +++ b/skyvern-ts/client/src/api/types/WorkflowDefinitionYamlBlocksItem.ts @@ -12,6 +12,8 @@ export type WorkflowDefinitionYamlBlocksItem = | Skyvern.WorkflowDefinitionYamlBlocksItem.FileUpload | Skyvern.WorkflowDefinitionYamlBlocksItem.FileUrlParser | Skyvern.WorkflowDefinitionYamlBlocksItem.ForLoop + | Skyvern.WorkflowDefinitionYamlBlocksItem.GoogleSheetsRead + | Skyvern.WorkflowDefinitionYamlBlocksItem.GoogleSheetsWrite | Skyvern.WorkflowDefinitionYamlBlocksItem.GotoUrl | Skyvern.WorkflowDefinitionYamlBlocksItem.HttpRequest | Skyvern.WorkflowDefinitionYamlBlocksItem.HumanInteraction @@ -66,6 +68,14 @@ export namespace WorkflowDefinitionYamlBlocksItem { block_type: "for_loop"; } + export interface GoogleSheetsRead extends Skyvern.GoogleSheetsReadBlockYaml { + block_type: "google_sheets_read"; + } + + export interface GoogleSheetsWrite extends Skyvern.GoogleSheetsWriteBlockYaml { + block_type: "google_sheets_write"; + } + export interface GotoUrl extends Skyvern.UrlBlockYaml { block_type: "goto_url"; } diff --git a/skyvern-ts/client/src/api/types/WorkflowRun.ts b/skyvern-ts/client/src/api/types/WorkflowRun.ts index 5a8a0469c..07249595d 100644 --- a/skyvern-ts/client/src/api/types/WorkflowRun.ts +++ b/skyvern-ts/client/src/api/types/WorkflowRun.ts @@ -12,6 +12,7 @@ export interface WorkflowRun { debug_session_id?: string; status: Skyvern.WorkflowRunStatus; extra_http_headers?: Record; + cdp_connect_headers?: Record; proxy_location?: WorkflowRun.ProxyLocation; webhook_callback_url?: string; webhook_failure_reason?: string; @@ -22,6 +23,7 @@ export interface WorkflowRun { parent_workflow_run_id?: string; workflow_title?: string; max_screenshot_scrolls?: number; + max_elapsed_time_minutes?: number; browser_address?: string; run_with?: string; script_run?: Skyvern.ScriptRunResponse; @@ -32,6 +34,10 @@ export interface WorkflowRun { code_gen?: boolean; trigger_type?: Skyvern.WorkflowRunTriggerType; workflow_schedule_id?: string; + ignore_inherited_workflow_system_prompt?: boolean; + copilot_session_id?: string; + credits_used?: number; + cached_credits_used?: number; queued_at?: string; started_at?: string; finished_at?: string; diff --git a/skyvern-ts/client/src/api/types/WorkflowRunBlock.ts b/skyvern-ts/client/src/api/types/WorkflowRunBlock.ts index 3ecc4b960..e5d25f196 100644 --- a/skyvern-ts/client/src/api/types/WorkflowRunBlock.ts +++ b/skyvern-ts/client/src/api/types/WorkflowRunBlock.ts @@ -29,6 +29,7 @@ export interface WorkflowRunBlock { created_at: string; modified_at: string; include_action_history_in_verification?: boolean; + include_extracted_text?: boolean; duration?: number; loop_values?: unknown[]; current_value?: string; diff --git a/skyvern-ts/client/src/api/types/WorkflowRunRequest.ts b/skyvern-ts/client/src/api/types/WorkflowRunRequestOutput.ts similarity index 77% rename from skyvern-ts/client/src/api/types/WorkflowRunRequest.ts rename to skyvern-ts/client/src/api/types/WorkflowRunRequestOutput.ts index b2ceef553..91cdee726 100644 --- a/skyvern-ts/client/src/api/types/WorkflowRunRequest.ts +++ b/skyvern-ts/client/src/api/types/WorkflowRunRequestOutput.ts @@ -2,7 +2,7 @@ import type * as Skyvern from "../index.js"; -export interface WorkflowRunRequest { +export interface WorkflowRunRequestOutput { /** ID of the workflow to run. Workflow ID starts with `wpid_`. */ workflow_id: string; /** Parameters to pass to the workflow */ @@ -24,6 +24,7 @@ export interface WorkflowRunRequest { * - RESIDENTIAL_NZ: New Zealand * - RESIDENTIAL_PH: Philippines * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia * - RESIDENTIAL_ZA: South Africa * - RESIDENTIAL_AR: Argentina * - RESIDENTIAL_AU: Australia @@ -40,9 +41,11 @@ export interface WorkflowRunRequest { * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} */ - proxy_location?: WorkflowRunRequest.ProxyLocation; + proxy_location?: WorkflowRunRequestOutput.ProxyLocation; /** URL to send workflow status updates to after a run is finished. Refer to https://www.skyvern.com/docs/running-tasks/webhooks-faq for webhook questions. */ webhook_url?: string; /** @@ -59,17 +62,23 @@ export interface WorkflowRunRequest { browser_profile_id?: string; /** The maximum number of scrolls for the post action screenshot. When it's None or 0, it takes the current viewpoint screenshot. */ max_screenshot_scrolls?: number; + /** Timeout this workflow run after the configured elapsed runtime in minutes. Maximum runtime is 4 hours. */ + max_elapsed_time_minutes?: number; /** The extra HTTP headers for the requests in browser. */ extra_http_headers?: Record; + /** HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. */ + cdp_connect_headers?: Record; /** The CDP address for the workflow run. */ browser_address?: string; /** Whether to fallback to AI if the workflow run fails. */ ai_fallback?: boolean; /** Whether to run the workflow with agent or code. Null inherits from the workflow setting. */ run_with?: string; + /** String key/value metadata to attach to this workflow run for analytics tag filtering. */ + run_metadata?: Record; } -export namespace WorkflowRunRequest { +export namespace WorkflowRunRequestOutput { /** * * Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -86,6 +95,7 @@ export namespace WorkflowRunRequest { * - RESIDENTIAL_NZ: New Zealand * - RESIDENTIAL_PH: Philippines * - RESIDENTIAL_KR: South Korea + * - RESIDENTIAL_SA: Saudi Arabia * - RESIDENTIAL_ZA: South Africa * - RESIDENTIAL_AR: Argentina * - RESIDENTIAL_AU: Australia @@ -102,6 +112,8 @@ export namespace WorkflowRunRequest { * - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) * - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) * - NONE: No proxy + * + * For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. * Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} */ export type ProxyLocation = Skyvern.ProxyLocation | Skyvern.GeoTarget | Record; diff --git a/skyvern-ts/client/src/api/types/WorkflowRunResponse.ts b/skyvern-ts/client/src/api/types/WorkflowRunResponse.ts index db03bee88..a4ffd3988 100644 --- a/skyvern-ts/client/src/api/types/WorkflowRunResponse.ts +++ b/skyvern-ts/client/src/api/types/WorkflowRunResponse.ts @@ -13,6 +13,8 @@ export interface WorkflowRunResponse { downloaded_files?: Skyvern.FileInfo[]; /** URL to the recording of the run */ recording_url?: string; + /** True when the recording exists but has been archived to cold storage and is not currently accessible. */ + recording_archived?: boolean; /** List of last n screenshot URLs in reverse chronological order - the first one the list is the latest screenshot. */ screenshot_urls?: string[]; /** Reason for failure if the run failed or terminated */ @@ -45,8 +47,10 @@ export interface WorkflowRunResponse { run_with?: string; /** Whether to fallback to AI if code run fails. */ ai_fallback?: boolean; + /** ID of the cached script used for this workflow run, if any. */ + script_id?: string; /** The original request parameters used to start this workflow run */ - run_request?: Skyvern.WorkflowRunRequest; + run_request?: Skyvern.WorkflowRunRequestOutput; } export namespace WorkflowRunResponse { diff --git a/skyvern-ts/client/src/api/types/WorkflowTriggerBlock.ts b/skyvern-ts/client/src/api/types/WorkflowTriggerBlock.ts index 15eaed2ff..e3bc38f68 100644 --- a/skyvern-ts/client/src/api/types/WorkflowTriggerBlock.ts +++ b/skyvern-ts/client/src/api/types/WorkflowTriggerBlock.ts @@ -11,6 +11,7 @@ export interface WorkflowTriggerBlock { continue_on_failure?: boolean; model?: Record; disable_cache?: boolean; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; workflow_permanent_id: string; payload?: Record; diff --git a/skyvern-ts/client/src/api/types/WorkflowTriggerBlockYaml.ts b/skyvern-ts/client/src/api/types/WorkflowTriggerBlockYaml.ts index 29d2121fd..6b036f276 100644 --- a/skyvern-ts/client/src/api/types/WorkflowTriggerBlockYaml.ts +++ b/skyvern-ts/client/src/api/types/WorkflowTriggerBlockYaml.ts @@ -7,6 +7,7 @@ export interface WorkflowTriggerBlockYaml { next_block_label?: string; continue_on_failure?: boolean; model?: Record; + ignore_workflow_system_prompt?: boolean; next_loop_on_failure?: boolean; workflow_permanent_id: string; payload?: Record; diff --git a/skyvern-ts/client/src/api/types/index.ts b/skyvern-ts/client/src/api/types/index.ts index 7943c8a4b..f266a31ce 100644 --- a/skyvern-ts/client/src/api/types/index.ts +++ b/skyvern-ts/client/src/api/types/index.ts @@ -25,6 +25,7 @@ export * from "./BranchConditionYaml.js"; export * from "./BranchCriteriaYaml.js"; export * from "./BrowserProfile.js"; export * from "./BrowserSessionResponse.js"; +export * from "./BulkCancelRunsResponse.js"; export * from "./ClickAction.js"; export * from "./ClickContext.js"; export * from "./CodeBlock.js"; @@ -71,6 +72,12 @@ export * from "./ForLoopBlockYaml.js"; export * from "./ForLoopBlockYamlLoopBlocksItem.js"; export * from "./GeoTarget.js"; export * from "./GetRunResponse.js"; +export * from "./GoogleSheetsReadBlock.js"; +export * from "./GoogleSheetsReadBlockParametersItem.js"; +export * from "./GoogleSheetsReadBlockYaml.js"; +export * from "./GoogleSheetsWriteBlock.js"; +export * from "./GoogleSheetsWriteBlockParametersItem.js"; +export * from "./GoogleSheetsWriteBlockYaml.js"; export * from "./HttpRequestBlock.js"; export * from "./HttpRequestBlockParametersItem.js"; export * from "./HttpRequestBlockYaml.js"; @@ -113,6 +120,7 @@ export * from "./RunEngine.js"; export * from "./RunSdkActionRequestAction.js"; export * from "./RunSdkActionResponse.js"; export * from "./RunStatus.js"; +export * from "./RunWebhookReplayResponse.js"; export * from "./Script.js"; export * from "./ScriptFileCreate.js"; export * from "./ScriptRunResponse.js"; @@ -123,12 +131,12 @@ export * from "./SelectOptionAction.js"; export * from "./SendEmailBlock.js"; export * from "./SendEmailBlockYaml.js"; export * from "./SkyvernForgeSdkSchemasCredentialsCredentialType.js"; -export * from "./SkyvernSchemasRunBlocksCredentialType.js"; +export * from "./SkyvernSchemasCredentialTypeCredentialType.js"; export * from "./TaskBlock.js"; export * from "./TaskBlockParametersItem.js"; export * from "./TaskBlockYaml.js"; export * from "./TaskRunListItem.js"; -export * from "./TaskRunRequest.js"; +export * from "./TaskRunRequestOutput.js"; export * from "./TaskRunResponse.js"; export * from "./TaskV2Block.js"; export * from "./TaskV2BlockYaml.js"; @@ -175,7 +183,7 @@ export * from "./WorkflowParameterYaml.js"; export * from "./WorkflowRequest.js"; export * from "./WorkflowRun.js"; export * from "./WorkflowRunBlock.js"; -export * from "./WorkflowRunRequest.js"; +export * from "./WorkflowRunRequestOutput.js"; export * from "./WorkflowRunResponse.js"; export * from "./WorkflowRunStatus.js"; export * from "./WorkflowRunTimeline.js"; diff --git a/skyvern-ts/client/src/version.ts b/skyvern-ts/client/src/version.ts index dd867b64f..2add499ed 100644 --- a/skyvern-ts/client/src/version.ts +++ b/skyvern-ts/client/src/version.ts @@ -1 +1 @@ -export const SDK_VERSION = "1.0.32"; +export const SDK_VERSION = "1.0.37"; diff --git a/skyvern-ts/client/tests/wire/artifacts.test.ts b/skyvern-ts/client/tests/wire/artifacts.test.ts index 3e7706ed6..b5883ba91 100644 --- a/skyvern-ts/client/tests/wire/artifacts.test.ts +++ b/skyvern-ts/client/tests/wire/artifacts.test.ts @@ -64,6 +64,24 @@ describe("Artifacts", () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .get("/v1/artifacts/artifact_id/content") + .respondWith() + .statusCode(416) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.artifacts.getArtifactContent("artifact_id"); + }).rejects.toThrow(Skyvern.RangeNotSatisfiableError); + }); + + test("getArtifactContent (5)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawResponseBody = { key: "value" }; server .mockEndpoint() diff --git a/skyvern-ts/client/tests/wire/main.test.ts b/skyvern-ts/client/tests/wire/main.test.ts index ccf7d79b1..7f9802a0d 100644 --- a/skyvern-ts/client/tests/wire/main.test.ts +++ b/skyvern-ts/client/tests/wire/main.test.ts @@ -14,9 +14,17 @@ describe("SkyvernClient", () => { status: "created", output: { key: "value" }, downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -50,7 +58,7 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", model: { key: "value" }, extra_http_headers: { key: "value" }, - publish_workflow: true, + cdp_connect_headers: { key: "value" }, include_action_history_in_verification: true, max_screenshot_scrolls: 1, browser_address: "browser_address", @@ -69,9 +77,7 @@ describe("SkyvernClient", () => { const response = await client.runTask({ "x-user-agent": "x-user-agent", - body: { - prompt: "Find the top 3 posts on Hacker News.", - }, + prompt: "Find the top 3 posts on Hacker News.", }); expect(response).toEqual({ run_id: "tsk_123", @@ -84,10 +90,13 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -133,7 +142,9 @@ describe("SkyvernClient", () => { extra_http_headers: { key: "value", }, - publish_workflow: true, + cdp_connect_headers: { + key: "value", + }, include_action_history_in_verification: true, max_screenshot_scrolls: 1, browser_address: "browser_address", @@ -158,9 +169,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.runTask({ - body: { - prompt: "prompt", - }, + prompt: "prompt", }); }).rejects.toThrow(Skyvern.BadRequestError); }); @@ -181,9 +190,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.runTask({ - body: { - prompt: "prompt", - }, + prompt: "prompt", }); }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); @@ -197,9 +204,17 @@ describe("SkyvernClient", () => { status: "created", output: { key: "value" }, downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -220,6 +235,7 @@ describe("SkyvernClient", () => { step_count: 1, run_with: "agent", ai_fallback: true, + script_id: "script_id", run_request: { workflow_id: "wpid_123", parameters: { key: "value" }, @@ -231,10 +247,13 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", browser_profile_id: "browser_profile_id", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, browser_address: "browser_address", ai_fallback: true, run_with: "run_with", + run_metadata: { key: "value" }, }, }; server @@ -252,9 +271,7 @@ describe("SkyvernClient", () => { "x-max-steps-override": 1, "x-user-agent": "x-user-agent", template: true, - body: { - workflow_id: "wpid_123", - }, + workflow_id: "wpid_123", }); expect(response).toEqual({ run_id: "tsk_123", @@ -267,10 +284,13 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -295,6 +315,7 @@ describe("SkyvernClient", () => { step_count: 1, run_with: "agent", ai_fallback: true, + script_id: "script_id", run_request: { workflow_id: "wpid_123", parameters: { @@ -308,12 +329,19 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", browser_profile_id: "browser_profile_id", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, browser_address: "browser_address", ai_fallback: true, run_with: "run_with", + run_metadata: { + key: "value", + }, }, }); }); @@ -334,9 +362,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.runWorkflow({ - body: { - workflow_id: "workflow_id", - }, + workflow_id: "workflow_id", }); }).rejects.toThrow(Skyvern.BadRequestError); }); @@ -357,9 +383,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.runWorkflow({ - body: { - workflow_id: "workflow_id", - }, + workflow_id: "workflow_id", }); }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); @@ -374,9 +398,17 @@ describe("SkyvernClient", () => { status: "created", output: { key: "value" }, downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -410,7 +442,7 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", model: { key: "value" }, extra_http_headers: { key: "value" }, - publish_workflow: true, + cdp_connect_headers: { key: "value" }, include_action_history_in_verification: true, max_screenshot_scrolls: 1, browser_address: "browser_address", @@ -432,10 +464,13 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -481,7 +516,9 @@ describe("SkyvernClient", () => { extra_http_headers: { key: "value", }, - publish_workflow: true, + cdp_connect_headers: { + key: "value", + }, include_action_history_in_verification: true, max_screenshot_scrolls: 1, browser_address: "browser_address", @@ -551,6 +588,50 @@ describe("SkyvernClient", () => { }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); + test("bulk_cancel_runs (1)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawRequestBody = { run_ids: ["run_ids"] }; + const rawResponseBody = { cancelled: ["cancelled"], failed: ["failed"] }; + server + .mockEndpoint() + .post("/v1/runs/cancel") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(200) + .jsonBody(rawResponseBody) + .build(); + + const response = await client.bulkCancelRuns({ + run_ids: ["run_ids"], + }); + expect(response).toEqual({ + cancelled: ["cancelled"], + failed: ["failed"], + }); + }); + + test("bulk_cancel_runs (2)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawRequestBody = { run_ids: ["run_ids", "run_ids"] }; + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/runs/cancel") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(422) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.bulkCancelRuns({ + run_ids: ["run_ids", "run_ids"], + }); + }).rejects.toThrow(Skyvern.UnprocessableEntityError); + }); + test("get_workflows (1)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); @@ -592,16 +673,21 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: {}, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value" }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -612,6 +698,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -667,20 +755,27 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: {}, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value", }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -691,6 +786,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -750,16 +847,21 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { key: "value" }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value" }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -770,6 +872,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -823,20 +927,29 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { + key: "value", + }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value", }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -847,6 +960,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -914,16 +1029,21 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { key: "value" }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value" }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -934,6 +1054,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -984,20 +1106,29 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { + key: "value", + }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value", }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -1008,6 +1139,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -1433,16 +1566,21 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { key: "value" }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value" }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -1453,6 +1591,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -1503,20 +1643,29 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { + key: "value", + }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value", }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -1527,6 +1676,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -1602,15 +1753,19 @@ describe("SkyvernClient", () => { artifact_type: "recording", uri: "uri", bundle_key: "bundle_key", + checksum: "checksum", + file_size: 1, task_id: "task_id", step_id: "step_id", workflow_run_id: "workflow_run_id", workflow_run_block_id: "workflow_run_block_id", run_id: "run_id", + browser_session_id: "browser_session_id", observer_cruise_id: "observer_cruise_id", observer_thought_id: "observer_thought_id", ai_suggestion_id: "ai_suggestion_id", signed_url: "signed_url", + archived: true, organization_id: "organization_id", }, ]; @@ -1631,15 +1786,19 @@ describe("SkyvernClient", () => { artifact_type: "recording", uri: "uri", bundle_key: "bundle_key", + checksum: "checksum", + file_size: 1, task_id: "task_id", step_id: "step_id", workflow_run_id: "workflow_run_id", workflow_run_block_id: "workflow_run_block_id", run_id: "run_id", + browser_session_id: "browser_session_id", observer_cruise_id: "observer_cruise_id", observer_thought_id: "observer_thought_id", ai_suggestion_id: "ai_suggestion_id", signed_url: "signed_url", + archived: true, organization_id: "organization_id", }, ]); @@ -1667,7 +1826,18 @@ describe("SkyvernClient", () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); - const rawResponseBody = { key: "value" }; + const rawResponseBody = { + run_id: "run_id", + run_type: "run_type", + default_webhook_url: "default_webhook_url", + target_webhook_url: "target_webhook_url", + payload: "payload", + headers: { key: "value" }, + status_code: 1, + latency_ms: 1, + response_body: "response_body", + error: "error", + }; server .mockEndpoint() .post("/v1/runs/tsk_123/retry_webhook") @@ -1678,7 +1848,18 @@ describe("SkyvernClient", () => { const response = await client.retryRunWebhook("tsk_123"); expect(response).toEqual({ - key: "value", + run_id: "run_id", + run_type: "run_type", + default_webhook_url: "default_webhook_url", + target_webhook_url: "target_webhook_url", + payload: "payload", + headers: { + key: "value", + }, + status_code: 1, + latency_ms: 1, + response_body: "response_body", + error: "error", }); }); @@ -1734,6 +1915,7 @@ describe("SkyvernClient", () => { created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", include_action_history_in_verification: true, + include_extracted_text: true, duration: 1.1, loop_values: [], current_value: "current_value", @@ -1771,6 +1953,7 @@ describe("SkyvernClient", () => { reasoning_token_count: 1, cached_token_count: 1, thought_cost: 1.1, + last_llm_model: "last_llm_model", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", }, @@ -1827,6 +2010,7 @@ describe("SkyvernClient", () => { created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", include_action_history_in_verification: true, + include_extracted_text: true, duration: 1.1, loop_values: [], current_value: "current_value", @@ -1866,6 +2050,7 @@ describe("SkyvernClient", () => { reasoning_token_count: 1, cached_token_count: 1, thought_cost: 1.1, + last_llm_model: "last_llm_model", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", }, @@ -1929,6 +2114,208 @@ describe("SkyvernClient", () => { }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); + test("retry_workflow_run (1)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { + run_id: "tsk_123", + status: "created", + output: { key: "value" }, + downloaded_files: [ + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, + ], + recording_url: "recording_url", + recording_archived: true, + screenshot_urls: ["screenshot_urls"], + failure_reason: "failure_reason", + created_at: "2025-01-01T00:00:00Z", + modified_at: "2025-01-01T00:05:00Z", + queued_at: "2024-01-15T09:30:00Z", + started_at: "2024-01-15T09:30:00Z", + finished_at: "2024-01-15T09:30:00Z", + app_url: "app_url", + browser_session_id: "browser_session_id", + browser_profile_id: "browser_profile_id", + max_screenshot_scrolls: 1, + script_run: { + ai_fallback_triggered: true, + script_id: "script_id", + script_revision_id: "script_revision_id", + }, + errors: [{ key: "value" }], + step_count: 1, + run_with: "agent", + ai_fallback: true, + script_id: "script_id", + run_request: { + workflow_id: "wpid_123", + parameters: { key: "value" }, + title: "title", + proxy_location: "RESIDENTIAL", + webhook_url: "webhook_url", + totp_url: "totp_url", + totp_identifier: "totp_identifier", + browser_session_id: "browser_session_id", + browser_profile_id: "browser_profile_id", + max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, + extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, + browser_address: "browser_address", + ai_fallback: true, + run_with: "run_with", + run_metadata: { key: "value" }, + }, + }; + server + .mockEndpoint() + .post("/v1/workflows/runs/wr_123/retry") + .header("x-max-steps-override", "1") + .header("x-user-agent", "x-user-agent") + .respondWith() + .statusCode(200) + .jsonBody(rawResponseBody) + .build(); + + const response = await client.retryWorkflowRun("wr_123", { + "x-max-steps-override": 1, + "x-user-agent": "x-user-agent", + }); + expect(response).toEqual({ + run_id: "tsk_123", + status: "created", + output: { + key: "value", + }, + downloaded_files: [ + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, + ], + recording_url: "recording_url", + recording_archived: true, + screenshot_urls: ["screenshot_urls"], + failure_reason: "failure_reason", + created_at: "2025-01-01T00:00:00Z", + modified_at: "2025-01-01T00:05:00Z", + queued_at: "2024-01-15T09:30:00Z", + started_at: "2024-01-15T09:30:00Z", + finished_at: "2024-01-15T09:30:00Z", + app_url: "app_url", + browser_session_id: "browser_session_id", + browser_profile_id: "browser_profile_id", + max_screenshot_scrolls: 1, + script_run: { + ai_fallback_triggered: true, + script_id: "script_id", + script_revision_id: "script_revision_id", + }, + errors: [ + { + key: "value", + }, + ], + step_count: 1, + run_with: "agent", + ai_fallback: true, + script_id: "script_id", + run_request: { + workflow_id: "wpid_123", + parameters: { + key: "value", + }, + title: "title", + proxy_location: "RESIDENTIAL", + webhook_url: "webhook_url", + totp_url: "totp_url", + totp_identifier: "totp_identifier", + browser_session_id: "browser_session_id", + browser_profile_id: "browser_profile_id", + max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, + extra_http_headers: { + key: "value", + }, + cdp_connect_headers: { + key: "value", + }, + browser_address: "browser_address", + ai_fallback: true, + run_with: "run_with", + run_metadata: { + key: "value", + }, + }, + }); + }); + + test("retry_workflow_run (2)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/workflows/runs/workflow_run_id/retry") + .respondWith() + .statusCode(400) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.retryWorkflowRun("workflow_run_id"); + }).rejects.toThrow(Skyvern.BadRequestError); + }); + + test("retry_workflow_run (3)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/workflows/runs/workflow_run_id/retry") + .respondWith() + .statusCode(404) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.retryWorkflowRun("workflow_run_id"); + }).rejects.toThrow(Skyvern.NotFoundError); + }); + + test("retry_workflow_run (4)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/workflows/runs/workflow_run_id/retry") + .respondWith() + .statusCode(422) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.retryWorkflowRun("workflow_run_id"); + }).rejects.toThrow(Skyvern.UnprocessableEntityError); + }); + test("get_runs_v2 (1)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); @@ -1944,6 +2331,7 @@ describe("SkyvernClient", () => { finished_at: "2024-01-15T09:30:00Z", created_at: "2024-01-15T09:30:00Z", workflow_permanent_id: "workflow_permanent_id", + workflow_deleted: true, script_run: true, }, ]; @@ -1965,6 +2353,7 @@ describe("SkyvernClient", () => { finished_at: "2024-01-15T09:30:00Z", created_at: "2024-01-15T09:30:00Z", workflow_permanent_id: "workflow_permanent_id", + workflow_deleted: true, script_run: true, }, ]); @@ -1997,6 +2386,7 @@ describe("SkyvernClient", () => { debug_session_id: "debug_session_id", status: "created", extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", webhook_failure_reason: "webhook_failure_reason", @@ -2007,6 +2397,7 @@ describe("SkyvernClient", () => { parent_workflow_run_id: "parent_workflow_run_id", workflow_title: "workflow_title", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, browser_address: "browser_address", run_with: "run_with", script_run: { @@ -2021,6 +2412,10 @@ describe("SkyvernClient", () => { code_gen: true, trigger_type: "manual", workflow_schedule_id: "workflow_schedule_id", + ignore_inherited_workflow_system_prompt: true, + copilot_session_id: "copilot_session_id", + credits_used: 1, + cached_credits_used: 1, queued_at: "2024-01-15T09:30:00Z", started_at: "2024-01-15T09:30:00Z", finished_at: "2024-01-15T09:30:00Z", @@ -2049,6 +2444,9 @@ describe("SkyvernClient", () => { extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", webhook_failure_reason: "webhook_failure_reason", @@ -2063,6 +2461,7 @@ describe("SkyvernClient", () => { parent_workflow_run_id: "parent_workflow_run_id", workflow_title: "workflow_title", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, browser_address: "browser_address", run_with: "run_with", script_run: { @@ -2077,6 +2476,10 @@ describe("SkyvernClient", () => { code_gen: true, trigger_type: "manual", workflow_schedule_id: "workflow_schedule_id", + ignore_inherited_workflow_system_prompt: true, + copilot_session_id: "copilot_session_id", + credits_used: 1, + cached_credits_used: 1, queued_at: "2024-01-15T09:30:00Z", started_at: "2024-01-15T09:30:00Z", finished_at: "2024-01-15T09:30:00Z", @@ -2098,6 +2501,148 @@ describe("SkyvernClient", () => { }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); + test("get_workflow_runs_by_id (1)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = [ + { + workflow_run_id: "workflow_run_id", + workflow_id: "workflow_id", + workflow_permanent_id: "workflow_permanent_id", + organization_id: "organization_id", + browser_session_id: "browser_session_id", + browser_profile_id: "browser_profile_id", + debug_session_id: "debug_session_id", + status: "created", + extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, + proxy_location: "RESIDENTIAL", + webhook_callback_url: "webhook_callback_url", + webhook_failure_reason: "webhook_failure_reason", + totp_verification_url: "totp_verification_url", + totp_identifier: "totp_identifier", + failure_reason: "failure_reason", + failure_category: [{ key: "value" }], + parent_workflow_run_id: "parent_workflow_run_id", + workflow_title: "workflow_title", + max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, + browser_address: "browser_address", + run_with: "run_with", + script_run: { + ai_fallback_triggered: true, + script_id: "script_id", + script_revision_id: "script_revision_id", + }, + job_id: "job_id", + depends_on_workflow_run_id: "depends_on_workflow_run_id", + sequential_key: "sequential_key", + ai_fallback: true, + code_gen: true, + trigger_type: "manual", + workflow_schedule_id: "workflow_schedule_id", + ignore_inherited_workflow_system_prompt: true, + copilot_session_id: "copilot_session_id", + credits_used: 1, + cached_credits_used: 1, + queued_at: "2024-01-15T09:30:00Z", + started_at: "2024-01-15T09:30:00Z", + finished_at: "2024-01-15T09:30:00Z", + created_at: "2024-01-15T09:30:00Z", + modified_at: "2024-01-15T09:30:00Z", + }, + ]; + server + .mockEndpoint() + .get("/v1/workflows/workflow_id/runs") + .respondWith() + .statusCode(200) + .jsonBody(rawResponseBody) + .build(); + + const response = await client.getWorkflowRunsById("workflow_id", { + page: 1, + page_size: 1, + search_key: "search_key", + error_code: "error_code", + }); + expect(response).toEqual([ + { + workflow_run_id: "workflow_run_id", + workflow_id: "workflow_id", + workflow_permanent_id: "workflow_permanent_id", + organization_id: "organization_id", + browser_session_id: "browser_session_id", + browser_profile_id: "browser_profile_id", + debug_session_id: "debug_session_id", + status: "created", + extra_http_headers: { + key: "value", + }, + cdp_connect_headers: { + key: "value", + }, + proxy_location: "RESIDENTIAL", + webhook_callback_url: "webhook_callback_url", + webhook_failure_reason: "webhook_failure_reason", + totp_verification_url: "totp_verification_url", + totp_identifier: "totp_identifier", + failure_reason: "failure_reason", + failure_category: [ + { + key: "value", + }, + ], + parent_workflow_run_id: "parent_workflow_run_id", + workflow_title: "workflow_title", + max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, + browser_address: "browser_address", + run_with: "run_with", + script_run: { + ai_fallback_triggered: true, + script_id: "script_id", + script_revision_id: "script_revision_id", + }, + job_id: "job_id", + depends_on_workflow_run_id: "depends_on_workflow_run_id", + sequential_key: "sequential_key", + ai_fallback: true, + code_gen: true, + trigger_type: "manual", + workflow_schedule_id: "workflow_schedule_id", + ignore_inherited_workflow_system_prompt: true, + copilot_session_id: "copilot_session_id", + credits_used: 1, + cached_credits_used: 1, + queued_at: "2024-01-15T09:30:00Z", + started_at: "2024-01-15T09:30:00Z", + finished_at: "2024-01-15T09:30:00Z", + created_at: "2024-01-15T09:30:00Z", + modified_at: "2024-01-15T09:30:00Z", + }, + ]); + }); + + test("get_workflow_runs_by_id (2)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .get("/v1/workflows/workflow_id/runs") + .respondWith() + .statusCode(422) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.getWorkflowRunsById("workflow_id"); + }).rejects.toThrow(Skyvern.UnprocessableEntityError); + }); + test("get_workflow (1)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); @@ -2138,16 +2683,21 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { key: "value" }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value" }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -2158,6 +2708,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2210,20 +2762,29 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: { + key: "value", + }, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value", }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -2234,6 +2795,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2299,16 +2862,21 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: {}, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value" }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -2319,6 +2887,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2372,20 +2942,27 @@ describe("SkyvernClient", () => { }, ], finally_block_label: "finally_block_label", + error_code_mapping: {}, + workflow_system_prompt: "workflow_system_prompt", }, proxy_location: "RESIDENTIAL", webhook_callback_url: "webhook_callback_url", totp_verification_url: "totp_verification_url", totp_identifier: "totp_identifier", persist_browser_session: true, + browser_profile_id: "browser_profile_id", model: { key: "value", }, status: "published", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, run_with: "run_with", ai_fallback: true, cache_key: "cache_key", @@ -2396,6 +2973,8 @@ describe("SkyvernClient", () => { sequential_key: "sequential_key", folder_id: "folder_id", import_error: "import_error", + created_by: "created_by", + edited_by: "edited_by", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2431,6 +3010,7 @@ describe("SkyvernClient", () => { organization_id: "organization_id", name: "name", description: "description", + source_browser_type: "source_browser_type", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2445,7 +3025,10 @@ describe("SkyvernClient", () => { .build(); const response = await client.listBrowserProfiles({ + page: 1, + page_size: 1, include_deleted: true, + search_key: "search_key", }); expect(response).toEqual([ { @@ -2453,6 +3036,7 @@ describe("SkyvernClient", () => { organization_id: "organization_id", name: "name", description: "description", + source_browser_type: "source_browser_type", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2487,6 +3071,7 @@ describe("SkyvernClient", () => { organization_id: "organization_id", name: "name", description: "description", + source_browser_type: "source_browser_type", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2508,6 +3093,7 @@ describe("SkyvernClient", () => { organization_id: "organization_id", name: "name", description: "description", + source_browser_type: "source_browser_type", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2517,7 +3103,7 @@ describe("SkyvernClient", () => { test("create_browser_profile (2)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); - const rawRequestBody = { name: "name" }; + const rawRequestBody = { name: "x" }; const rawResponseBody = { key: "value" }; server .mockEndpoint() @@ -2530,7 +3116,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.createBrowserProfile({ - name: "name", + name: "x", }); }).rejects.toThrow(Skyvern.BadRequestError); }); @@ -2538,7 +3124,7 @@ describe("SkyvernClient", () => { test("create_browser_profile (3)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); - const rawRequestBody = { name: "name" }; + const rawRequestBody = { name: "x" }; const rawResponseBody = { key: "value" }; server .mockEndpoint() @@ -2551,7 +3137,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.createBrowserProfile({ - name: "name", + name: "x", }); }).rejects.toThrow(Skyvern.ConflictError); }); @@ -2559,7 +3145,7 @@ describe("SkyvernClient", () => { test("create_browser_profile (4)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); - const rawRequestBody = { name: "name" }; + const rawRequestBody = { name: "x" }; const rawResponseBody = { key: "value" }; server .mockEndpoint() @@ -2572,7 +3158,7 @@ describe("SkyvernClient", () => { await expect(async () => { return await client.createBrowserProfile({ - name: "name", + name: "x", }); }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); @@ -2586,6 +3172,7 @@ describe("SkyvernClient", () => { organization_id: "organization_id", name: "name", description: "description", + source_browser_type: "source_browser_type", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2604,6 +3191,7 @@ describe("SkyvernClient", () => { organization_id: "organization_id", name: "name", description: "description", + source_browser_type: "source_browser_type", created_at: "2024-01-15T09:30:00Z", modified_at: "2024-01-15T09:30:00Z", deleted_at: "2024-01-15T09:30:00Z", @@ -2692,6 +3280,99 @@ describe("SkyvernClient", () => { }).rejects.toThrow(Skyvern.UnprocessableEntityError); }); + test("update_browser_profile (1)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawRequestBody = {}; + const rawResponseBody = { + browser_profile_id: "browser_profile_id", + organization_id: "organization_id", + name: "name", + description: "description", + source_browser_type: "source_browser_type", + created_at: "2024-01-15T09:30:00Z", + modified_at: "2024-01-15T09:30:00Z", + deleted_at: "2024-01-15T09:30:00Z", + }; + server + .mockEndpoint() + .patch("/v1/browser_profiles/bp_123456") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(200) + .jsonBody(rawResponseBody) + .build(); + + const response = await client.updateBrowserProfile("bp_123456"); + expect(response).toEqual({ + browser_profile_id: "browser_profile_id", + organization_id: "organization_id", + name: "name", + description: "description", + source_browser_type: "source_browser_type", + created_at: "2024-01-15T09:30:00Z", + modified_at: "2024-01-15T09:30:00Z", + deleted_at: "2024-01-15T09:30:00Z", + }); + }); + + test("update_browser_profile (2)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawRequestBody = {}; + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .patch("/v1/browser_profiles/profile_id") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(404) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.updateBrowserProfile("profile_id"); + }).rejects.toThrow(Skyvern.NotFoundError); + }); + + test("update_browser_profile (3)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawRequestBody = {}; + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .patch("/v1/browser_profiles/profile_id") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(409) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.updateBrowserProfile("profile_id"); + }).rejects.toThrow(Skyvern.ConflictError); + }); + + test("update_browser_profile (4)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + const rawRequestBody = {}; + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .patch("/v1/browser_profiles/profile_id") + .jsonBody(rawRequestBody) + .respondWith() + .statusCode(422) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.updateBrowserProfile("profile_id"); + }).rejects.toThrow(Skyvern.UnprocessableEntityError); + }); + test("get_browser_sessions (1)", async () => { const server = mockServerPool.createServer(); const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); @@ -2818,10 +3499,24 @@ describe("SkyvernClient", () => { vnc_streaming_supported: true, download_path: "download_path", downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recordings: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], started_at: "2024-01-15T09:30:00Z", completed_at: "2024-01-15T09:30:00Z", @@ -2858,7 +3553,9 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recordings: [ @@ -2866,7 +3563,9 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], started_at: "2024-01-15T09:30:00Z", @@ -3008,10 +3707,24 @@ describe("SkyvernClient", () => { vnc_streaming_supported: true, download_path: "download_path", downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recordings: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], started_at: "2024-01-15T09:30:00Z", completed_at: "2024-01-15T09:30:00Z", @@ -3047,7 +3760,9 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recordings: [ @@ -3055,7 +3770,9 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], started_at: "2024-01-15T09:30:00Z", @@ -3529,9 +4246,17 @@ describe("SkyvernClient", () => { status: "created", output: { key: "value" }, downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -3552,6 +4277,7 @@ describe("SkyvernClient", () => { step_count: 1, run_with: "agent", ai_fallback: true, + script_id: "script_id", run_request: { workflow_id: "wpid_123", parameters: { key: "value" }, @@ -3563,15 +4289,19 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", browser_profile_id: "browser_profile_id", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, browser_address: "browser_address", ai_fallback: true, run_with: "run_with", + run_metadata: { key: "value" }, }, }; server .mockEndpoint() .post("/v1/run/tasks/login") + .header("x-user-agent", "x-user-agent") .jsonBody(rawRequestBody) .respondWith() .statusCode(200) @@ -3579,6 +4309,7 @@ describe("SkyvernClient", () => { .build(); const response = await client.login({ + "x-user-agent": "x-user-agent", credential_type: "skyvern", }); expect(response).toEqual({ @@ -3592,10 +4323,13 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -3620,6 +4354,7 @@ describe("SkyvernClient", () => { step_count: 1, run_with: "agent", ai_fallback: true, + script_id: "script_id", run_request: { workflow_id: "wpid_123", parameters: { @@ -3633,12 +4368,19 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", browser_profile_id: "browser_profile_id", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, browser_address: "browser_address", ai_fallback: true, run_with: "run_with", + run_metadata: { + key: "value", + }, }, }); }); @@ -3673,9 +4415,17 @@ describe("SkyvernClient", () => { status: "created", output: { key: "value" }, downloaded_files: [ - { url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" }, + { + url: "url", + checksum: "checksum", + filename: "filename", + file_size: 1, + modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", + }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -3696,6 +4446,7 @@ describe("SkyvernClient", () => { step_count: 1, run_with: "agent", ai_fallback: true, + script_id: "script_id", run_request: { workflow_id: "wpid_123", parameters: { key: "value" }, @@ -3707,15 +4458,19 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", browser_profile_id: "browser_profile_id", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value" }, + cdp_connect_headers: { key: "value" }, browser_address: "browser_address", ai_fallback: true, run_with: "run_with", + run_metadata: { key: "value" }, }, }; server .mockEndpoint() .post("/v1/run/tasks/download_files") + .header("x-user-agent", "x-user-agent") .jsonBody(rawRequestBody) .respondWith() .statusCode(200) @@ -3723,6 +4478,7 @@ describe("SkyvernClient", () => { .build(); const response = await client.downloadFiles({ + "x-user-agent": "x-user-agent", navigation_goal: "navigation_goal", }); expect(response).toEqual({ @@ -3736,10 +4492,13 @@ describe("SkyvernClient", () => { url: "url", checksum: "checksum", filename: "filename", + file_size: 1, modified_at: "2024-01-15T09:30:00Z", + artifact_id: "artifact_id", }, ], recording_url: "recording_url", + recording_archived: true, screenshot_urls: ["screenshot_urls"], failure_reason: "failure_reason", created_at: "2025-01-01T00:00:00Z", @@ -3764,6 +4523,7 @@ describe("SkyvernClient", () => { step_count: 1, run_with: "agent", ai_fallback: true, + script_id: "script_id", run_request: { workflow_id: "wpid_123", parameters: { @@ -3777,12 +4537,19 @@ describe("SkyvernClient", () => { browser_session_id: "browser_session_id", browser_profile_id: "browser_profile_id", max_screenshot_scrolls: 1, + max_elapsed_time_minutes: 1, extra_http_headers: { key: "value", }, + cdp_connect_headers: { + key: "value", + }, browser_address: "browser_address", ai_fallback: true, run_with: "run_with", + run_metadata: { + key: "value", + }, }, }); }); diff --git a/skyvern-ts/client/tests/wire/server.test.ts b/skyvern-ts/client/tests/wire/server.test.ts new file mode 100644 index 000000000..8af278b6b --- /dev/null +++ b/skyvern-ts/client/tests/wire/server.test.ts @@ -0,0 +1,19 @@ +// This file was auto-generated by Fern from our API Definition. + +import { SkyvernClient } from "../../src/Client"; +import { mockServerPool } from "../mock-server/MockServerPool"; + +describe("Server", () => { + test("getVersion", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server.mockEndpoint().get("/v1/version").respondWith().statusCode(200).jsonBody(rawResponseBody).build(); + + const response = await client.server.getVersion(); + expect(response).toEqual({ + key: "value", + }); + }); +}); diff --git a/skyvern-ts/client/tests/wire/workflows.test.ts b/skyvern-ts/client/tests/wire/workflows.test.ts new file mode 100644 index 000000000..93a7cdb6f --- /dev/null +++ b/skyvern-ts/client/tests/wire/workflows.test.ts @@ -0,0 +1,76 @@ +// This file was auto-generated by Fern from our API Definition. + +import * as Skyvern from "../../src/api/index"; +import { SkyvernClient } from "../../src/Client"; +import { mockServerPool } from "../mock-server/MockServerPool"; + +describe("Workflows", () => { + test("reset_workflow_browser_profile (1)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + server + .mockEndpoint() + .post("/v1/workflows/wpid_123/browser_session/reset_profile") + .respondWith() + .statusCode(200) + .build(); + + const response = await client.workflows.resetWorkflowBrowserProfile("wpid_123"); + expect(response).toEqual(undefined); + }); + + test("reset_workflow_browser_profile (2)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/workflows/workflow_permanent_id/browser_session/reset_profile") + .respondWith() + .statusCode(404) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.workflows.resetWorkflowBrowserProfile("workflow_permanent_id"); + }).rejects.toThrow(Skyvern.NotFoundError); + }); + + test("reset_workflow_browser_profile (3)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/workflows/workflow_permanent_id/browser_session/reset_profile") + .respondWith() + .statusCode(422) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.workflows.resetWorkflowBrowserProfile("workflow_permanent_id"); + }).rejects.toThrow(Skyvern.UnprocessableEntityError); + }); + + test("reset_workflow_browser_profile (4)", async () => { + const server = mockServerPool.createServer(); + const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl }); + + const rawResponseBody = { key: "value" }; + server + .mockEndpoint() + .post("/v1/workflows/workflow_permanent_id/browser_session/reset_profile") + .respondWith() + .statusCode(500) + .jsonBody(rawResponseBody) + .build(); + + await expect(async () => { + return await client.workflows.resetWorkflowBrowserProfile("workflow_permanent_id"); + }).rejects.toThrow(Skyvern.InternalServerError); + }); +}); diff --git a/skyvern/client/__init__.py b/skyvern/client/__init__.py index 5211c3a5d..8d8ce2300 100644 --- a/skyvern/client/__init__.py +++ b/skyvern/client/__init__.py @@ -25,6 +25,7 @@ if typing.TYPE_CHECKING: ActionBlockParametersItem_Output, ActionBlockParametersItem_Workflow, ActionBlockYaml, + ActionOutput, ActionStatus, ActionType, Artifact, @@ -50,6 +51,7 @@ if typing.TYPE_CHECKING: BranchCriteriaYamlCriteriaType, BrowserProfile, BrowserSessionResponse, + BulkCancelRunsResponse, ClickAction, ClickActionData, ClickContext, @@ -84,6 +86,7 @@ if typing.TYPE_CHECKING: ContextParameterSource_Workflow, ContextParameterValue, ContextParameterYaml, + CreateBrowserSessionRequestProxyLocation, CreateCredentialRequest, CreateCredentialRequestCredential, CreateScriptResponse, @@ -154,6 +157,8 @@ if typing.TYPE_CHECKING: ForLoopBlockLoopBlocksItem_FileUpload, ForLoopBlockLoopBlocksItem_FileUrlParser, ForLoopBlockLoopBlocksItem_ForLoop, + ForLoopBlockLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockLoopBlocksItem_GoogleSheetsWrite, ForLoopBlockLoopBlocksItem_GotoUrl, ForLoopBlockLoopBlocksItem_HttpRequest, ForLoopBlockLoopBlocksItem_HumanInteraction, @@ -168,6 +173,7 @@ if typing.TYPE_CHECKING: ForLoopBlockLoopBlocksItem_UploadToS3, ForLoopBlockLoopBlocksItem_Validation, ForLoopBlockLoopBlocksItem_Wait, + ForLoopBlockLoopBlocksItem_WhileLoop, ForLoopBlockLoopBlocksItem_WorkflowTrigger, ForLoopBlockLoopOver, ForLoopBlockLoopOver_AwsSecret, @@ -193,6 +199,8 @@ if typing.TYPE_CHECKING: ForLoopBlockYamlLoopBlocksItem_FileUpload, ForLoopBlockYamlLoopBlocksItem_FileUrlParser, ForLoopBlockYamlLoopBlocksItem_ForLoop, + ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite, ForLoopBlockYamlLoopBlocksItem_GotoUrl, ForLoopBlockYamlLoopBlocksItem_HttpRequest, ForLoopBlockYamlLoopBlocksItem_HumanInteraction, @@ -207,6 +215,7 @@ if typing.TYPE_CHECKING: ForLoopBlockYamlLoopBlocksItem_UploadToS3, ForLoopBlockYamlLoopBlocksItem_Validation, ForLoopBlockYamlLoopBlocksItem_Wait, + ForLoopBlockYamlLoopBlocksItem_WhileLoop, ForLoopBlockYamlLoopBlocksItem_WorkflowTrigger, GeoTarget, GetRunResponse, @@ -216,6 +225,37 @@ if typing.TYPE_CHECKING: GetRunResponse_TaskV2, GetRunResponse_UiTars, GetRunResponse_WorkflowRun, + GetRunResponse_YutoriNavigator, + GoogleSheetsReadBlock, + GoogleSheetsReadBlockParametersItem, + GoogleSheetsReadBlockParametersItem_AwsSecret, + GoogleSheetsReadBlockParametersItem_AzureSecret, + GoogleSheetsReadBlockParametersItem_AzureVaultCredential, + GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData, + GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential, + GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation, + GoogleSheetsReadBlockParametersItem_Context, + GoogleSheetsReadBlockParametersItem_Credential, + GoogleSheetsReadBlockParametersItem_Onepassword, + GoogleSheetsReadBlockParametersItem_Output, + GoogleSheetsReadBlockParametersItem_Workflow, + GoogleSheetsReadBlockYaml, + GoogleSheetsWriteBlock, + GoogleSheetsWriteBlockParametersItem, + GoogleSheetsWriteBlockParametersItem_AwsSecret, + GoogleSheetsWriteBlockParametersItem_AzureSecret, + GoogleSheetsWriteBlockParametersItem_AzureVaultCredential, + GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData, + GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential, + GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation, + GoogleSheetsWriteBlockParametersItem_Context, + GoogleSheetsWriteBlockParametersItem_Credential, + GoogleSheetsWriteBlockParametersItem_Onepassword, + GoogleSheetsWriteBlockParametersItem_Output, + GoogleSheetsWriteBlockParametersItem_Workflow, + GoogleSheetsWriteBlockWriteMode, + GoogleSheetsWriteBlockYaml, + GoogleSheetsWriteBlockYamlWriteMode, HttpRequestBlock, HttpRequestBlockParametersItem, HttpRequestBlockParametersItem_AwsSecret, @@ -326,6 +366,7 @@ if typing.TYPE_CHECKING: RunSdkActionRequestAction_Validate, RunSdkActionResponse, RunStatus, + RunWebhookReplayResponse, Script, ScriptFileCreate, ScriptRunResponse, @@ -337,7 +378,7 @@ if typing.TYPE_CHECKING: SendEmailBlock, SendEmailBlockYaml, SkyvernForgeSdkSchemasCredentialsCredentialType, - SkyvernSchemasRunBlocksCredentialType, + SkyvernSchemasCredentialTypeCredentialType, TaskBlock, TaskBlockDataSchema, TaskBlockParametersItem, @@ -355,9 +396,11 @@ if typing.TYPE_CHECKING: TaskBlockYaml, TaskBlockYamlDataSchema, TaskRunListItem, - TaskRunRequest, - TaskRunRequestDataExtractionSchema, - TaskRunRequestProxyLocation, + TaskRunRequestInputDataExtractionSchema, + TaskRunRequestInputProxyLocation, + TaskRunRequestOutput, + TaskRunRequestOutputDataExtractionSchema, + TaskRunRequestOutputProxyLocation, TaskRunResponse, TaskRunResponseOutput, TaskV2Block, @@ -434,6 +477,67 @@ if typing.TYPE_CHECKING: WaitBlockParametersItem_Output, WaitBlockParametersItem_Workflow, WaitBlockYaml, + WhileLoopBlock, + WhileLoopBlockCondition, + WhileLoopBlockCondition_Jinja2Template, + WhileLoopBlockCondition_Prompt, + WhileLoopBlockLoopBlocksItem, + WhileLoopBlockLoopBlocksItem_Action, + WhileLoopBlockLoopBlocksItem_Code, + WhileLoopBlockLoopBlocksItem_Conditional, + WhileLoopBlockLoopBlocksItem_DownloadToS3, + WhileLoopBlockLoopBlocksItem_Extraction, + WhileLoopBlockLoopBlocksItem_FileDownload, + WhileLoopBlockLoopBlocksItem_FileUpload, + WhileLoopBlockLoopBlocksItem_FileUrlParser, + WhileLoopBlockLoopBlocksItem_ForLoop, + WhileLoopBlockLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite, + WhileLoopBlockLoopBlocksItem_GotoUrl, + WhileLoopBlockLoopBlocksItem_HttpRequest, + WhileLoopBlockLoopBlocksItem_HumanInteraction, + WhileLoopBlockLoopBlocksItem_Login, + WhileLoopBlockLoopBlocksItem_Navigation, + WhileLoopBlockLoopBlocksItem_PdfParser, + WhileLoopBlockLoopBlocksItem_PrintPage, + WhileLoopBlockLoopBlocksItem_SendEmail, + WhileLoopBlockLoopBlocksItem_Task, + WhileLoopBlockLoopBlocksItem_TaskV2, + WhileLoopBlockLoopBlocksItem_TextPrompt, + WhileLoopBlockLoopBlocksItem_UploadToS3, + WhileLoopBlockLoopBlocksItem_Validation, + WhileLoopBlockLoopBlocksItem_Wait, + WhileLoopBlockLoopBlocksItem_WhileLoop, + WhileLoopBlockLoopBlocksItem_WorkflowTrigger, + WhileLoopBlockYaml, + WhileLoopBlockYamlLoopBlocksItem, + WhileLoopBlockYamlLoopBlocksItem_Action, + WhileLoopBlockYamlLoopBlocksItem_Code, + WhileLoopBlockYamlLoopBlocksItem_Conditional, + WhileLoopBlockYamlLoopBlocksItem_DownloadToS3, + WhileLoopBlockYamlLoopBlocksItem_Extraction, + WhileLoopBlockYamlLoopBlocksItem_FileDownload, + WhileLoopBlockYamlLoopBlocksItem_FileUpload, + WhileLoopBlockYamlLoopBlocksItem_FileUrlParser, + WhileLoopBlockYamlLoopBlocksItem_ForLoop, + WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite, + WhileLoopBlockYamlLoopBlocksItem_GotoUrl, + WhileLoopBlockYamlLoopBlocksItem_HttpRequest, + WhileLoopBlockYamlLoopBlocksItem_HumanInteraction, + WhileLoopBlockYamlLoopBlocksItem_Login, + WhileLoopBlockYamlLoopBlocksItem_Navigation, + WhileLoopBlockYamlLoopBlocksItem_PdfParser, + WhileLoopBlockYamlLoopBlocksItem_PrintPage, + WhileLoopBlockYamlLoopBlocksItem_SendEmail, + WhileLoopBlockYamlLoopBlocksItem_Task, + WhileLoopBlockYamlLoopBlocksItem_TaskV2, + WhileLoopBlockYamlLoopBlocksItem_TextPrompt, + WhileLoopBlockYamlLoopBlocksItem_UploadToS3, + WhileLoopBlockYamlLoopBlocksItem_Validation, + WhileLoopBlockYamlLoopBlocksItem_Wait, + WhileLoopBlockYamlLoopBlocksItem_WhileLoop, + WhileLoopBlockYamlLoopBlocksItem_WorkflowTrigger, Workflow, WorkflowCreateYamlRequest, WorkflowCreateYamlRequestProxyLocation, @@ -448,6 +552,8 @@ if typing.TYPE_CHECKING: WorkflowDefinitionBlocksItem_FileUpload, WorkflowDefinitionBlocksItem_FileUrlParser, WorkflowDefinitionBlocksItem_ForLoop, + WorkflowDefinitionBlocksItem_GoogleSheetsRead, + WorkflowDefinitionBlocksItem_GoogleSheetsWrite, WorkflowDefinitionBlocksItem_GotoUrl, WorkflowDefinitionBlocksItem_HttpRequest, WorkflowDefinitionBlocksItem_HumanInteraction, @@ -462,6 +568,7 @@ if typing.TYPE_CHECKING: WorkflowDefinitionBlocksItem_UploadToS3, WorkflowDefinitionBlocksItem_Validation, WorkflowDefinitionBlocksItem_Wait, + WorkflowDefinitionBlocksItem_WhileLoop, WorkflowDefinitionBlocksItem_WorkflowTrigger, WorkflowDefinitionParametersItem, WorkflowDefinitionParametersItem_AwsSecret, @@ -486,6 +593,8 @@ if typing.TYPE_CHECKING: WorkflowDefinitionYamlBlocksItem_FileUpload, WorkflowDefinitionYamlBlocksItem_FileUrlParser, WorkflowDefinitionYamlBlocksItem_ForLoop, + WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead, + WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite, WorkflowDefinitionYamlBlocksItem_GotoUrl, WorkflowDefinitionYamlBlocksItem_HttpRequest, WorkflowDefinitionYamlBlocksItem_HumanInteraction, @@ -500,6 +609,7 @@ if typing.TYPE_CHECKING: WorkflowDefinitionYamlBlocksItem_UploadToS3, WorkflowDefinitionYamlBlocksItem_Validation, WorkflowDefinitionYamlBlocksItem_Wait, + WorkflowDefinitionYamlBlocksItem_WhileLoop, WorkflowDefinitionYamlBlocksItem_WorkflowTrigger, WorkflowDefinitionYamlParametersItem, WorkflowDefinitionYamlParametersItem_AwsSecret, @@ -525,8 +635,9 @@ if typing.TYPE_CHECKING: WorkflowRunBlockNavigationPayload, WorkflowRunBlockOutput, WorkflowRunProxyLocation, - WorkflowRunRequest, - WorkflowRunRequestProxyLocation, + WorkflowRunRequestInputProxyLocation, + WorkflowRunRequestOutput, + WorkflowRunRequestOutputProxyLocation, WorkflowRunResponse, WorkflowRunResponseOutput, WorkflowRunStatus, @@ -553,8 +664,16 @@ if typing.TYPE_CHECKING: WorkflowTriggerBlockParametersItem_Workflow, WorkflowTriggerBlockYaml, ) - from .errors import BadRequestError, ConflictError, ForbiddenError, NotFoundError, UnprocessableEntityError - from . import artifacts, schedules, scripts + from .errors import ( + BadRequestError, + ConflictError, + ForbiddenError, + InternalServerError, + NotFoundError, + RangeNotSatisfiableError, + UnprocessableEntityError, + ) + from . import artifacts, schedules, scripts, server, workflows from .client import AsyncSkyvern, Skyvern from .environment import SkyvernEnvironment from .schedules import SchedulesListAllRequestStatus @@ -578,6 +697,7 @@ _dynamic_imports: typing.Dict[str, str] = { "ActionBlockParametersItem_Output": ".types", "ActionBlockParametersItem_Workflow": ".types", "ActionBlockYaml": ".types", + "ActionOutput": ".types", "ActionStatus": ".types", "ActionType": ".types", "Artifact": ".types", @@ -605,6 +725,7 @@ _dynamic_imports: typing.Dict[str, str] = { "BranchCriteriaYamlCriteriaType": ".types", "BrowserProfile": ".types", "BrowserSessionResponse": ".types", + "BulkCancelRunsResponse": ".types", "ClickAction": ".types", "ClickActionData": ".types", "ClickContext": ".types", @@ -640,6 +761,7 @@ _dynamic_imports: typing.Dict[str, str] = { "ContextParameterSource_Workflow": ".types", "ContextParameterValue": ".types", "ContextParameterYaml": ".types", + "CreateBrowserSessionRequestProxyLocation": ".types", "CreateCredentialRequest": ".types", "CreateCredentialRequestCredential": ".types", "CreateScriptResponse": ".types", @@ -710,6 +832,8 @@ _dynamic_imports: typing.Dict[str, str] = { "ForLoopBlockLoopBlocksItem_FileUpload": ".types", "ForLoopBlockLoopBlocksItem_FileUrlParser": ".types", "ForLoopBlockLoopBlocksItem_ForLoop": ".types", + "ForLoopBlockLoopBlocksItem_GoogleSheetsRead": ".types", + "ForLoopBlockLoopBlocksItem_GoogleSheetsWrite": ".types", "ForLoopBlockLoopBlocksItem_GotoUrl": ".types", "ForLoopBlockLoopBlocksItem_HttpRequest": ".types", "ForLoopBlockLoopBlocksItem_HumanInteraction": ".types", @@ -724,6 +848,7 @@ _dynamic_imports: typing.Dict[str, str] = { "ForLoopBlockLoopBlocksItem_UploadToS3": ".types", "ForLoopBlockLoopBlocksItem_Validation": ".types", "ForLoopBlockLoopBlocksItem_Wait": ".types", + "ForLoopBlockLoopBlocksItem_WhileLoop": ".types", "ForLoopBlockLoopBlocksItem_WorkflowTrigger": ".types", "ForLoopBlockLoopOver": ".types", "ForLoopBlockLoopOver_AwsSecret": ".types", @@ -749,6 +874,8 @@ _dynamic_imports: typing.Dict[str, str] = { "ForLoopBlockYamlLoopBlocksItem_FileUpload": ".types", "ForLoopBlockYamlLoopBlocksItem_FileUrlParser": ".types", "ForLoopBlockYamlLoopBlocksItem_ForLoop": ".types", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead": ".types", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite": ".types", "ForLoopBlockYamlLoopBlocksItem_GotoUrl": ".types", "ForLoopBlockYamlLoopBlocksItem_HttpRequest": ".types", "ForLoopBlockYamlLoopBlocksItem_HumanInteraction": ".types", @@ -763,6 +890,7 @@ _dynamic_imports: typing.Dict[str, str] = { "ForLoopBlockYamlLoopBlocksItem_UploadToS3": ".types", "ForLoopBlockYamlLoopBlocksItem_Validation": ".types", "ForLoopBlockYamlLoopBlocksItem_Wait": ".types", + "ForLoopBlockYamlLoopBlocksItem_WhileLoop": ".types", "ForLoopBlockYamlLoopBlocksItem_WorkflowTrigger": ".types", "ForbiddenError": ".errors", "GeoTarget": ".types", @@ -773,6 +901,37 @@ _dynamic_imports: typing.Dict[str, str] = { "GetRunResponse_TaskV2": ".types", "GetRunResponse_UiTars": ".types", "GetRunResponse_WorkflowRun": ".types", + "GetRunResponse_YutoriNavigator": ".types", + "GoogleSheetsReadBlock": ".types", + "GoogleSheetsReadBlockParametersItem": ".types", + "GoogleSheetsReadBlockParametersItem_AwsSecret": ".types", + "GoogleSheetsReadBlockParametersItem_AzureSecret": ".types", + "GoogleSheetsReadBlockParametersItem_AzureVaultCredential": ".types", + "GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData": ".types", + "GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential": ".types", + "GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation": ".types", + "GoogleSheetsReadBlockParametersItem_Context": ".types", + "GoogleSheetsReadBlockParametersItem_Credential": ".types", + "GoogleSheetsReadBlockParametersItem_Onepassword": ".types", + "GoogleSheetsReadBlockParametersItem_Output": ".types", + "GoogleSheetsReadBlockParametersItem_Workflow": ".types", + "GoogleSheetsReadBlockYaml": ".types", + "GoogleSheetsWriteBlock": ".types", + "GoogleSheetsWriteBlockParametersItem": ".types", + "GoogleSheetsWriteBlockParametersItem_AwsSecret": ".types", + "GoogleSheetsWriteBlockParametersItem_AzureSecret": ".types", + "GoogleSheetsWriteBlockParametersItem_AzureVaultCredential": ".types", + "GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData": ".types", + "GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential": ".types", + "GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation": ".types", + "GoogleSheetsWriteBlockParametersItem_Context": ".types", + "GoogleSheetsWriteBlockParametersItem_Credential": ".types", + "GoogleSheetsWriteBlockParametersItem_Onepassword": ".types", + "GoogleSheetsWriteBlockParametersItem_Output": ".types", + "GoogleSheetsWriteBlockParametersItem_Workflow": ".types", + "GoogleSheetsWriteBlockWriteMode": ".types", + "GoogleSheetsWriteBlockYaml": ".types", + "GoogleSheetsWriteBlockYamlWriteMode": ".types", "HttpRequestBlock": ".types", "HttpRequestBlockParametersItem": ".types", "HttpRequestBlockParametersItem_AwsSecret": ".types", @@ -806,6 +965,7 @@ _dynamic_imports: typing.Dict[str, str] = { "InputOrSelectContext": ".types", "InputTextAction": ".types", "InputTextActionData": ".types", + "InternalServerError": ".errors", "JinjaBranchCriteria": ".types", "LocateElementAction": ".types", "LoginBlock": ".types", @@ -870,6 +1030,7 @@ _dynamic_imports: typing.Dict[str, str] = { "PromptAction": ".types", "PromptBranchCriteria": ".types", "ProxyLocation": ".types", + "RangeNotSatisfiableError": ".errors", "RetryRunWebhookRequest": ".types", "RunEngine": ".types", "RunSdkActionRequestAction": ".types", @@ -884,6 +1045,7 @@ _dynamic_imports: typing.Dict[str, str] = { "RunSdkActionRequestAction_Validate": ".types", "RunSdkActionResponse": ".types", "RunStatus": ".types", + "RunWebhookReplayResponse": ".types", "SchedulesListAllRequestStatus": ".schedules", "Script": ".types", "ScriptFileCreate": ".types", @@ -898,7 +1060,7 @@ _dynamic_imports: typing.Dict[str, str] = { "Skyvern": ".client", "SkyvernEnvironment": ".environment", "SkyvernForgeSdkSchemasCredentialsCredentialType": ".types", - "SkyvernSchemasRunBlocksCredentialType": ".types", + "SkyvernSchemasCredentialTypeCredentialType": ".types", "TaskBlock": ".types", "TaskBlockDataSchema": ".types", "TaskBlockParametersItem": ".types", @@ -916,9 +1078,11 @@ _dynamic_imports: typing.Dict[str, str] = { "TaskBlockYaml": ".types", "TaskBlockYamlDataSchema": ".types", "TaskRunListItem": ".types", - "TaskRunRequest": ".types", - "TaskRunRequestDataExtractionSchema": ".types", - "TaskRunRequestProxyLocation": ".types", + "TaskRunRequestInputDataExtractionSchema": ".types", + "TaskRunRequestInputProxyLocation": ".types", + "TaskRunRequestOutput": ".types", + "TaskRunRequestOutputDataExtractionSchema": ".types", + "TaskRunRequestOutputProxyLocation": ".types", "TaskRunResponse": ".types", "TaskRunResponseOutput": ".types", "TaskV2Block": ".types", @@ -996,6 +1160,67 @@ _dynamic_imports: typing.Dict[str, str] = { "WaitBlockParametersItem_Output": ".types", "WaitBlockParametersItem_Workflow": ".types", "WaitBlockYaml": ".types", + "WhileLoopBlock": ".types", + "WhileLoopBlockCondition": ".types", + "WhileLoopBlockCondition_Jinja2Template": ".types", + "WhileLoopBlockCondition_Prompt": ".types", + "WhileLoopBlockLoopBlocksItem": ".types", + "WhileLoopBlockLoopBlocksItem_Action": ".types", + "WhileLoopBlockLoopBlocksItem_Code": ".types", + "WhileLoopBlockLoopBlocksItem_Conditional": ".types", + "WhileLoopBlockLoopBlocksItem_DownloadToS3": ".types", + "WhileLoopBlockLoopBlocksItem_Extraction": ".types", + "WhileLoopBlockLoopBlocksItem_FileDownload": ".types", + "WhileLoopBlockLoopBlocksItem_FileUpload": ".types", + "WhileLoopBlockLoopBlocksItem_FileUrlParser": ".types", + "WhileLoopBlockLoopBlocksItem_ForLoop": ".types", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsRead": ".types", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite": ".types", + "WhileLoopBlockLoopBlocksItem_GotoUrl": ".types", + "WhileLoopBlockLoopBlocksItem_HttpRequest": ".types", + "WhileLoopBlockLoopBlocksItem_HumanInteraction": ".types", + "WhileLoopBlockLoopBlocksItem_Login": ".types", + "WhileLoopBlockLoopBlocksItem_Navigation": ".types", + "WhileLoopBlockLoopBlocksItem_PdfParser": ".types", + "WhileLoopBlockLoopBlocksItem_PrintPage": ".types", + "WhileLoopBlockLoopBlocksItem_SendEmail": ".types", + "WhileLoopBlockLoopBlocksItem_Task": ".types", + "WhileLoopBlockLoopBlocksItem_TaskV2": ".types", + "WhileLoopBlockLoopBlocksItem_TextPrompt": ".types", + "WhileLoopBlockLoopBlocksItem_UploadToS3": ".types", + "WhileLoopBlockLoopBlocksItem_Validation": ".types", + "WhileLoopBlockLoopBlocksItem_Wait": ".types", + "WhileLoopBlockLoopBlocksItem_WhileLoop": ".types", + "WhileLoopBlockLoopBlocksItem_WorkflowTrigger": ".types", + "WhileLoopBlockYaml": ".types", + "WhileLoopBlockYamlLoopBlocksItem": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Action": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Code": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Conditional": ".types", + "WhileLoopBlockYamlLoopBlocksItem_DownloadToS3": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Extraction": ".types", + "WhileLoopBlockYamlLoopBlocksItem_FileDownload": ".types", + "WhileLoopBlockYamlLoopBlocksItem_FileUpload": ".types", + "WhileLoopBlockYamlLoopBlocksItem_FileUrlParser": ".types", + "WhileLoopBlockYamlLoopBlocksItem_ForLoop": ".types", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead": ".types", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite": ".types", + "WhileLoopBlockYamlLoopBlocksItem_GotoUrl": ".types", + "WhileLoopBlockYamlLoopBlocksItem_HttpRequest": ".types", + "WhileLoopBlockYamlLoopBlocksItem_HumanInteraction": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Login": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Navigation": ".types", + "WhileLoopBlockYamlLoopBlocksItem_PdfParser": ".types", + "WhileLoopBlockYamlLoopBlocksItem_PrintPage": ".types", + "WhileLoopBlockYamlLoopBlocksItem_SendEmail": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Task": ".types", + "WhileLoopBlockYamlLoopBlocksItem_TaskV2": ".types", + "WhileLoopBlockYamlLoopBlocksItem_TextPrompt": ".types", + "WhileLoopBlockYamlLoopBlocksItem_UploadToS3": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Validation": ".types", + "WhileLoopBlockYamlLoopBlocksItem_Wait": ".types", + "WhileLoopBlockYamlLoopBlocksItem_WhileLoop": ".types", + "WhileLoopBlockYamlLoopBlocksItem_WorkflowTrigger": ".types", "Workflow": ".types", "WorkflowCreateYamlRequest": ".types", "WorkflowCreateYamlRequestProxyLocation": ".types", @@ -1010,6 +1235,8 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowDefinitionBlocksItem_FileUpload": ".types", "WorkflowDefinitionBlocksItem_FileUrlParser": ".types", "WorkflowDefinitionBlocksItem_ForLoop": ".types", + "WorkflowDefinitionBlocksItem_GoogleSheetsRead": ".types", + "WorkflowDefinitionBlocksItem_GoogleSheetsWrite": ".types", "WorkflowDefinitionBlocksItem_GotoUrl": ".types", "WorkflowDefinitionBlocksItem_HttpRequest": ".types", "WorkflowDefinitionBlocksItem_HumanInteraction": ".types", @@ -1024,6 +1251,7 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowDefinitionBlocksItem_UploadToS3": ".types", "WorkflowDefinitionBlocksItem_Validation": ".types", "WorkflowDefinitionBlocksItem_Wait": ".types", + "WorkflowDefinitionBlocksItem_WhileLoop": ".types", "WorkflowDefinitionBlocksItem_WorkflowTrigger": ".types", "WorkflowDefinitionParametersItem": ".types", "WorkflowDefinitionParametersItem_AwsSecret": ".types", @@ -1048,6 +1276,8 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowDefinitionYamlBlocksItem_FileUpload": ".types", "WorkflowDefinitionYamlBlocksItem_FileUrlParser": ".types", "WorkflowDefinitionYamlBlocksItem_ForLoop": ".types", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead": ".types", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite": ".types", "WorkflowDefinitionYamlBlocksItem_GotoUrl": ".types", "WorkflowDefinitionYamlBlocksItem_HttpRequest": ".types", "WorkflowDefinitionYamlBlocksItem_HumanInteraction": ".types", @@ -1062,6 +1292,7 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowDefinitionYamlBlocksItem_UploadToS3": ".types", "WorkflowDefinitionYamlBlocksItem_Validation": ".types", "WorkflowDefinitionYamlBlocksItem_Wait": ".types", + "WorkflowDefinitionYamlBlocksItem_WhileLoop": ".types", "WorkflowDefinitionYamlBlocksItem_WorkflowTrigger": ".types", "WorkflowDefinitionYamlParametersItem": ".types", "WorkflowDefinitionYamlParametersItem_AwsSecret": ".types", @@ -1087,8 +1318,9 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowRunBlockNavigationPayload": ".types", "WorkflowRunBlockOutput": ".types", "WorkflowRunProxyLocation": ".types", - "WorkflowRunRequest": ".types", - "WorkflowRunRequestProxyLocation": ".types", + "WorkflowRunRequestInputProxyLocation": ".types", + "WorkflowRunRequestOutput": ".types", + "WorkflowRunRequestOutputProxyLocation": ".types", "WorkflowRunResponse": ".types", "WorkflowRunResponseOutput": ".types", "WorkflowRunStatus": ".types", @@ -1118,6 +1350,8 @@ _dynamic_imports: typing.Dict[str, str] = { "artifacts": ".artifacts", "schedules": ".schedules", "scripts": ".scripts", + "server": ".server", + "workflows": ".workflows", } @@ -1161,6 +1395,7 @@ __all__ = [ "ActionBlockParametersItem_Output", "ActionBlockParametersItem_Workflow", "ActionBlockYaml", + "ActionOutput", "ActionStatus", "ActionType", "Artifact", @@ -1188,6 +1423,7 @@ __all__ = [ "BranchCriteriaYamlCriteriaType", "BrowserProfile", "BrowserSessionResponse", + "BulkCancelRunsResponse", "ClickAction", "ClickActionData", "ClickContext", @@ -1223,6 +1459,7 @@ __all__ = [ "ContextParameterSource_Workflow", "ContextParameterValue", "ContextParameterYaml", + "CreateBrowserSessionRequestProxyLocation", "CreateCredentialRequest", "CreateCredentialRequestCredential", "CreateScriptResponse", @@ -1293,6 +1530,8 @@ __all__ = [ "ForLoopBlockLoopBlocksItem_FileUpload", "ForLoopBlockLoopBlocksItem_FileUrlParser", "ForLoopBlockLoopBlocksItem_ForLoop", + "ForLoopBlockLoopBlocksItem_GoogleSheetsRead", + "ForLoopBlockLoopBlocksItem_GoogleSheetsWrite", "ForLoopBlockLoopBlocksItem_GotoUrl", "ForLoopBlockLoopBlocksItem_HttpRequest", "ForLoopBlockLoopBlocksItem_HumanInteraction", @@ -1307,6 +1546,7 @@ __all__ = [ "ForLoopBlockLoopBlocksItem_UploadToS3", "ForLoopBlockLoopBlocksItem_Validation", "ForLoopBlockLoopBlocksItem_Wait", + "ForLoopBlockLoopBlocksItem_WhileLoop", "ForLoopBlockLoopBlocksItem_WorkflowTrigger", "ForLoopBlockLoopOver", "ForLoopBlockLoopOver_AwsSecret", @@ -1332,6 +1572,8 @@ __all__ = [ "ForLoopBlockYamlLoopBlocksItem_FileUpload", "ForLoopBlockYamlLoopBlocksItem_FileUrlParser", "ForLoopBlockYamlLoopBlocksItem_ForLoop", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite", "ForLoopBlockYamlLoopBlocksItem_GotoUrl", "ForLoopBlockYamlLoopBlocksItem_HttpRequest", "ForLoopBlockYamlLoopBlocksItem_HumanInteraction", @@ -1346,6 +1588,7 @@ __all__ = [ "ForLoopBlockYamlLoopBlocksItem_UploadToS3", "ForLoopBlockYamlLoopBlocksItem_Validation", "ForLoopBlockYamlLoopBlocksItem_Wait", + "ForLoopBlockYamlLoopBlocksItem_WhileLoop", "ForLoopBlockYamlLoopBlocksItem_WorkflowTrigger", "ForbiddenError", "GeoTarget", @@ -1356,6 +1599,37 @@ __all__ = [ "GetRunResponse_TaskV2", "GetRunResponse_UiTars", "GetRunResponse_WorkflowRun", + "GetRunResponse_YutoriNavigator", + "GoogleSheetsReadBlock", + "GoogleSheetsReadBlockParametersItem", + "GoogleSheetsReadBlockParametersItem_AwsSecret", + "GoogleSheetsReadBlockParametersItem_AzureSecret", + "GoogleSheetsReadBlockParametersItem_AzureVaultCredential", + "GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData", + "GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential", + "GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation", + "GoogleSheetsReadBlockParametersItem_Context", + "GoogleSheetsReadBlockParametersItem_Credential", + "GoogleSheetsReadBlockParametersItem_Onepassword", + "GoogleSheetsReadBlockParametersItem_Output", + "GoogleSheetsReadBlockParametersItem_Workflow", + "GoogleSheetsReadBlockYaml", + "GoogleSheetsWriteBlock", + "GoogleSheetsWriteBlockParametersItem", + "GoogleSheetsWriteBlockParametersItem_AwsSecret", + "GoogleSheetsWriteBlockParametersItem_AzureSecret", + "GoogleSheetsWriteBlockParametersItem_AzureVaultCredential", + "GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData", + "GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential", + "GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation", + "GoogleSheetsWriteBlockParametersItem_Context", + "GoogleSheetsWriteBlockParametersItem_Credential", + "GoogleSheetsWriteBlockParametersItem_Onepassword", + "GoogleSheetsWriteBlockParametersItem_Output", + "GoogleSheetsWriteBlockParametersItem_Workflow", + "GoogleSheetsWriteBlockWriteMode", + "GoogleSheetsWriteBlockYaml", + "GoogleSheetsWriteBlockYamlWriteMode", "HttpRequestBlock", "HttpRequestBlockParametersItem", "HttpRequestBlockParametersItem_AwsSecret", @@ -1389,6 +1663,7 @@ __all__ = [ "InputOrSelectContext", "InputTextAction", "InputTextActionData", + "InternalServerError", "JinjaBranchCriteria", "LocateElementAction", "LoginBlock", @@ -1453,6 +1728,7 @@ __all__ = [ "PromptAction", "PromptBranchCriteria", "ProxyLocation", + "RangeNotSatisfiableError", "RetryRunWebhookRequest", "RunEngine", "RunSdkActionRequestAction", @@ -1467,6 +1743,7 @@ __all__ = [ "RunSdkActionRequestAction_Validate", "RunSdkActionResponse", "RunStatus", + "RunWebhookReplayResponse", "SchedulesListAllRequestStatus", "Script", "ScriptFileCreate", @@ -1481,7 +1758,7 @@ __all__ = [ "Skyvern", "SkyvernEnvironment", "SkyvernForgeSdkSchemasCredentialsCredentialType", - "SkyvernSchemasRunBlocksCredentialType", + "SkyvernSchemasCredentialTypeCredentialType", "TaskBlock", "TaskBlockDataSchema", "TaskBlockParametersItem", @@ -1499,9 +1776,11 @@ __all__ = [ "TaskBlockYaml", "TaskBlockYamlDataSchema", "TaskRunListItem", - "TaskRunRequest", - "TaskRunRequestDataExtractionSchema", - "TaskRunRequestProxyLocation", + "TaskRunRequestInputDataExtractionSchema", + "TaskRunRequestInputProxyLocation", + "TaskRunRequestOutput", + "TaskRunRequestOutputDataExtractionSchema", + "TaskRunRequestOutputProxyLocation", "TaskRunResponse", "TaskRunResponseOutput", "TaskV2Block", @@ -1579,6 +1858,67 @@ __all__ = [ "WaitBlockParametersItem_Output", "WaitBlockParametersItem_Workflow", "WaitBlockYaml", + "WhileLoopBlock", + "WhileLoopBlockCondition", + "WhileLoopBlockCondition_Jinja2Template", + "WhileLoopBlockCondition_Prompt", + "WhileLoopBlockLoopBlocksItem", + "WhileLoopBlockLoopBlocksItem_Action", + "WhileLoopBlockLoopBlocksItem_Code", + "WhileLoopBlockLoopBlocksItem_Conditional", + "WhileLoopBlockLoopBlocksItem_DownloadToS3", + "WhileLoopBlockLoopBlocksItem_Extraction", + "WhileLoopBlockLoopBlocksItem_FileDownload", + "WhileLoopBlockLoopBlocksItem_FileUpload", + "WhileLoopBlockLoopBlocksItem_FileUrlParser", + "WhileLoopBlockLoopBlocksItem_ForLoop", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsRead", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite", + "WhileLoopBlockLoopBlocksItem_GotoUrl", + "WhileLoopBlockLoopBlocksItem_HttpRequest", + "WhileLoopBlockLoopBlocksItem_HumanInteraction", + "WhileLoopBlockLoopBlocksItem_Login", + "WhileLoopBlockLoopBlocksItem_Navigation", + "WhileLoopBlockLoopBlocksItem_PdfParser", + "WhileLoopBlockLoopBlocksItem_PrintPage", + "WhileLoopBlockLoopBlocksItem_SendEmail", + "WhileLoopBlockLoopBlocksItem_Task", + "WhileLoopBlockLoopBlocksItem_TaskV2", + "WhileLoopBlockLoopBlocksItem_TextPrompt", + "WhileLoopBlockLoopBlocksItem_UploadToS3", + "WhileLoopBlockLoopBlocksItem_Validation", + "WhileLoopBlockLoopBlocksItem_Wait", + "WhileLoopBlockLoopBlocksItem_WhileLoop", + "WhileLoopBlockLoopBlocksItem_WorkflowTrigger", + "WhileLoopBlockYaml", + "WhileLoopBlockYamlLoopBlocksItem", + "WhileLoopBlockYamlLoopBlocksItem_Action", + "WhileLoopBlockYamlLoopBlocksItem_Code", + "WhileLoopBlockYamlLoopBlocksItem_Conditional", + "WhileLoopBlockYamlLoopBlocksItem_DownloadToS3", + "WhileLoopBlockYamlLoopBlocksItem_Extraction", + "WhileLoopBlockYamlLoopBlocksItem_FileDownload", + "WhileLoopBlockYamlLoopBlocksItem_FileUpload", + "WhileLoopBlockYamlLoopBlocksItem_FileUrlParser", + "WhileLoopBlockYamlLoopBlocksItem_ForLoop", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite", + "WhileLoopBlockYamlLoopBlocksItem_GotoUrl", + "WhileLoopBlockYamlLoopBlocksItem_HttpRequest", + "WhileLoopBlockYamlLoopBlocksItem_HumanInteraction", + "WhileLoopBlockYamlLoopBlocksItem_Login", + "WhileLoopBlockYamlLoopBlocksItem_Navigation", + "WhileLoopBlockYamlLoopBlocksItem_PdfParser", + "WhileLoopBlockYamlLoopBlocksItem_PrintPage", + "WhileLoopBlockYamlLoopBlocksItem_SendEmail", + "WhileLoopBlockYamlLoopBlocksItem_Task", + "WhileLoopBlockYamlLoopBlocksItem_TaskV2", + "WhileLoopBlockYamlLoopBlocksItem_TextPrompt", + "WhileLoopBlockYamlLoopBlocksItem_UploadToS3", + "WhileLoopBlockYamlLoopBlocksItem_Validation", + "WhileLoopBlockYamlLoopBlocksItem_Wait", + "WhileLoopBlockYamlLoopBlocksItem_WhileLoop", + "WhileLoopBlockYamlLoopBlocksItem_WorkflowTrigger", "Workflow", "WorkflowCreateYamlRequest", "WorkflowCreateYamlRequestProxyLocation", @@ -1593,6 +1933,8 @@ __all__ = [ "WorkflowDefinitionBlocksItem_FileUpload", "WorkflowDefinitionBlocksItem_FileUrlParser", "WorkflowDefinitionBlocksItem_ForLoop", + "WorkflowDefinitionBlocksItem_GoogleSheetsRead", + "WorkflowDefinitionBlocksItem_GoogleSheetsWrite", "WorkflowDefinitionBlocksItem_GotoUrl", "WorkflowDefinitionBlocksItem_HttpRequest", "WorkflowDefinitionBlocksItem_HumanInteraction", @@ -1607,6 +1949,7 @@ __all__ = [ "WorkflowDefinitionBlocksItem_UploadToS3", "WorkflowDefinitionBlocksItem_Validation", "WorkflowDefinitionBlocksItem_Wait", + "WorkflowDefinitionBlocksItem_WhileLoop", "WorkflowDefinitionBlocksItem_WorkflowTrigger", "WorkflowDefinitionParametersItem", "WorkflowDefinitionParametersItem_AwsSecret", @@ -1631,6 +1974,8 @@ __all__ = [ "WorkflowDefinitionYamlBlocksItem_FileUpload", "WorkflowDefinitionYamlBlocksItem_FileUrlParser", "WorkflowDefinitionYamlBlocksItem_ForLoop", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite", "WorkflowDefinitionYamlBlocksItem_GotoUrl", "WorkflowDefinitionYamlBlocksItem_HttpRequest", "WorkflowDefinitionYamlBlocksItem_HumanInteraction", @@ -1645,6 +1990,7 @@ __all__ = [ "WorkflowDefinitionYamlBlocksItem_UploadToS3", "WorkflowDefinitionYamlBlocksItem_Validation", "WorkflowDefinitionYamlBlocksItem_Wait", + "WorkflowDefinitionYamlBlocksItem_WhileLoop", "WorkflowDefinitionYamlBlocksItem_WorkflowTrigger", "WorkflowDefinitionYamlParametersItem", "WorkflowDefinitionYamlParametersItem_AwsSecret", @@ -1670,8 +2016,9 @@ __all__ = [ "WorkflowRunBlockNavigationPayload", "WorkflowRunBlockOutput", "WorkflowRunProxyLocation", - "WorkflowRunRequest", - "WorkflowRunRequestProxyLocation", + "WorkflowRunRequestInputProxyLocation", + "WorkflowRunRequestOutput", + "WorkflowRunRequestOutputProxyLocation", "WorkflowRunResponse", "WorkflowRunResponseOutput", "WorkflowRunStatus", @@ -1701,4 +2048,6 @@ __all__ = [ "artifacts", "schedules", "scripts", + "server", + "workflows", ] diff --git a/skyvern/client/client.py b/skyvern/client/client.py index e61082be9..74cadd89a 100644 --- a/skyvern/client/client.py +++ b/skyvern/client/client.py @@ -14,6 +14,8 @@ from .types.artifact import Artifact from .types.artifact_type import ArtifactType from .types.browser_profile import BrowserProfile from .types.browser_session_response import BrowserSessionResponse +from .types.bulk_cancel_runs_response import BulkCancelRunsResponse +from .types.create_browser_session_request_proxy_location import CreateBrowserSessionRequestProxyLocation from .types.create_credential_request_credential import CreateCredentialRequestCredential from .types.create_script_response import CreateScriptResponse from .types.credential_response import CredentialResponse @@ -29,20 +31,21 @@ from .types.run_engine import RunEngine from .types.run_sdk_action_request_action import RunSdkActionRequestAction from .types.run_sdk_action_response import RunSdkActionResponse from .types.run_status import RunStatus +from .types.run_webhook_replay_response import RunWebhookReplayResponse from .types.script import Script from .types.script_file_create import ScriptFileCreate from .types.skyvern_forge_sdk_schemas_credentials_credential_type import SkyvernForgeSdkSchemasCredentialsCredentialType -from .types.skyvern_schemas_run_blocks_credential_type import SkyvernSchemasRunBlocksCredentialType +from .types.skyvern_schemas_credential_type_credential_type import SkyvernSchemasCredentialTypeCredentialType from .types.task_run_list_item import TaskRunListItem -from .types.task_run_request_data_extraction_schema import TaskRunRequestDataExtractionSchema -from .types.task_run_request_proxy_location import TaskRunRequestProxyLocation +from .types.task_run_request_input_data_extraction_schema import TaskRunRequestInputDataExtractionSchema +from .types.task_run_request_input_proxy_location import TaskRunRequestInputProxyLocation from .types.task_run_response import TaskRunResponse from .types.totp_code import TotpCode from .types.upload_file_response import UploadFileResponse from .types.workflow import Workflow from .types.workflow_create_yaml_request import WorkflowCreateYamlRequest from .types.workflow_run import WorkflowRun -from .types.workflow_run_request_proxy_location import WorkflowRunRequestProxyLocation +from .types.workflow_run_request_input_proxy_location import WorkflowRunRequestInputProxyLocation from .types.workflow_run_response import WorkflowRunResponse from .types.workflow_run_status import WorkflowRunStatus from .types.workflow_run_timeline import WorkflowRunTimeline @@ -52,6 +55,8 @@ if typing.TYPE_CHECKING: from .artifacts.client import ArtifactsClient, AsyncArtifactsClient from .schedules.client import AsyncSchedulesClient, SchedulesClient from .scripts.client import AsyncScriptsClient, ScriptsClient + from .server.client import AsyncServerClient, ServerClient + from .workflows.client import AsyncWorkflowsClient, WorkflowsClient # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -123,6 +128,8 @@ class Skyvern: ) self._raw_client = RawSkyvern(client_wrapper=self._client_wrapper) self._artifacts: typing.Optional[ArtifactsClient] = None + self._server: typing.Optional[ServerClient] = None + self._workflows: typing.Optional[WorkflowsClient] = None self._scripts: typing.Optional[ScriptsClient] = None self._schedules: typing.Optional[SchedulesClient] = None @@ -145,8 +152,8 @@ class Skyvern: url: typing.Optional[str] = OMIT, engine: typing.Optional[RunEngine] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[TaskRunRequestProxyLocation] = OMIT, - data_extraction_schema: typing.Optional[TaskRunRequestDataExtractionSchema] = OMIT, + proxy_location: typing.Optional[TaskRunRequestInputProxyLocation] = OMIT, + data_extraction_schema: typing.Optional[TaskRunRequestInputDataExtractionSchema] = OMIT, error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_steps: typing.Optional[int] = OMIT, webhook_url: typing.Optional[str] = OMIT, @@ -155,6 +162,7 @@ class Skyvern: browser_session_id: typing.Optional[str] = OMIT, model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, publish_workflow: typing.Optional[bool] = OMIT, include_action_history_in_verification: typing.Optional[bool] = OMIT, max_screenshot_scrolls: typing.Optional[int] = OMIT, @@ -184,7 +192,7 @@ class Skyvern: title : typing.Optional[str] The title for the task - proxy_location : typing.Optional[TaskRunRequestProxyLocation] + proxy_location : typing.Optional[TaskRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -200,6 +208,7 @@ class Skyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -216,9 +225,11 @@ class Skyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} - data_extraction_schema : typing.Optional[TaskRunRequestDataExtractionSchema] + data_extraction_schema : typing.Optional[TaskRunRequestInputDataExtractionSchema] The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. @@ -253,6 +264,9 @@ class Skyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + publish_workflow : typing.Optional[bool] Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. @@ -304,6 +318,7 @@ class Skyvern: browser_session_id=browser_session_id, model=model, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, publish_workflow=publish_workflow, include_action_history_in_verification=include_action_history_in_verification, max_screenshot_scrolls=max_screenshot_scrolls, @@ -322,7 +337,7 @@ class Skyvern: user_agent: typing.Optional[str] = None, parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[WorkflowRunRequestProxyLocation] = OMIT, + proxy_location: typing.Optional[WorkflowRunRequestInputProxyLocation] = OMIT, webhook_url: typing.Optional[str] = OMIT, totp_url: typing.Optional[str] = OMIT, totp_identifier: typing.Optional[str] = OMIT, @@ -331,10 +346,11 @@ class Skyvern: max_screenshot_scrolls: typing.Optional[int] = OMIT, max_elapsed_time_minutes: typing.Optional[int] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, browser_address: typing.Optional[str] = OMIT, ai_fallback: typing.Optional[bool] = OMIT, run_with: typing.Optional[str] = OMIT, - run_metadata: typing.Optional[typing.Dict[str, str]] = OMIT, + run_metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> WorkflowRunResponse: """ @@ -357,7 +373,7 @@ class Skyvern: title : typing.Optional[str] The title for this workflow run - proxy_location : typing.Optional[WorkflowRunRequestProxyLocation] + proxy_location : typing.Optional[WorkflowRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -373,6 +389,7 @@ class Skyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -389,6 +406,8 @@ class Skyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} webhook_url : typing.Optional[str] @@ -417,6 +436,9 @@ class Skyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + browser_address : typing.Optional[str] The CDP address for the workflow run. @@ -426,7 +448,7 @@ class Skyvern: run_with : typing.Optional[str] Whether to run the workflow with agent or code. Null inherits from the workflow setting. - run_metadata : typing.Optional[typing.Dict[str, str]] + run_metadata : typing.Optional[typing.Dict[str, typing.Optional[str]]] String key/value metadata to attach to this workflow run for analytics tag filtering. request_options : typing.Optional[RequestOptions] @@ -467,6 +489,7 @@ class Skyvern: max_screenshot_scrolls=max_screenshot_scrolls, max_elapsed_time_minutes=max_elapsed_time_minutes, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, browser_address=browser_address, ai_fallback=ai_fallback, run_with=run_with, @@ -475,53 +498,6 @@ class Skyvern: ) return _response.data - def retry_workflow_run( - self, - workflow_run_id: str, - *, - max_steps_override: typing.Optional[int] = None, - user_agent: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> WorkflowRunResponse: - """ - Retry a workflow run using the original run parameters. - - Parameters - ---------- - workflow_run_id : str - The id of the workflow run to retry. - - max_steps_override : typing.Optional[int] - - user_agent : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - WorkflowRunResponse - Successfully retried workflow run - - Examples - -------- - from skyvern import Skyvern - - client = Skyvern( - api_key="YOUR_API_KEY", - ) - client.retry_workflow_run( - workflow_run_id="wr_123", - ) - """ - _response = self._raw_client.retry_workflow_run( - workflow_run_id, - max_steps_override=max_steps_override, - user_agent=user_agent, - request_options=request_options, - ) - return _response.data - def get_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetRunResponse: """ Get run information (task run, workflow run) @@ -586,6 +562,39 @@ class Skyvern: _response = self._raw_client.cancel_run(run_id, request_options=request_options) return _response.data + def bulk_cancel_runs( + self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None + ) -> BulkCancelRunsResponse: + """ + Cancel multiple runs (tasks or workflows) in a single request + + Parameters + ---------- + run_ids : typing.Sequence[str] + List of run IDs to cancel + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + BulkCancelRunsResponse + Successful Response + + Examples + -------- + from skyvern import Skyvern + + client = Skyvern( + api_key="YOUR_API_KEY", + ) + client.bulk_cancel_runs( + run_ids=["run_ids"], + ) + """ + _response = self._raw_client.bulk_cancel_runs(run_ids=run_ids, request_options=request_options) + return _response.data + def get_workflows( self, *, @@ -1108,7 +1117,7 @@ class Skyvern: *, request: typing.Optional[RetryRunWebhookRequest] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Optional[typing.Any]: + ) -> RunWebhookReplayResponse: """ Retry sending the webhook for a run @@ -1124,7 +1133,7 @@ class Skyvern: Returns ------- - typing.Optional[typing.Any] + RunWebhookReplayResponse Successful Response Examples @@ -1175,6 +1184,55 @@ class Skyvern: _response = self._raw_client.get_run_timeline(run_id, request_options=request_options) return _response.data + def retry_workflow_run( + self, + workflow_run_id: str, + *, + max_steps_override: typing.Optional[int] = None, + user_agent: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> WorkflowRunResponse: + """ + Retry a workflow run using the original run parameters. + + Parameters + ---------- + workflow_run_id : str + The id of the workflow run to retry. + + max_steps_override : typing.Optional[int] + + user_agent : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + WorkflowRunResponse + Successfully retried workflow run + + Examples + -------- + from skyvern import Skyvern + + client = Skyvern( + api_key="YOUR_API_KEY", + ) + client.retry_workflow_run( + workflow_run_id="wr_123", + max_steps_override=1, + user_agent="x-user-agent", + ) + """ + _response = self._raw_client.retry_workflow_run( + workflow_run_id, + max_steps_override=max_steps_override, + user_agent=user_agent, + request_options=request_options, + ) + return _response.data + def get_runs_v2( self, *, @@ -1325,10 +1383,19 @@ class Skyvern: """ List runs for a specific workflow. + Supports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic. + + ### search_key + + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded. + + ### error_code + + Exact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`. + Parameters ---------- workflow_id : str - Workflow permanent ID. Workflow ID starts with `wpid_`. page : typing.Optional[int] Page number for pagination. @@ -1340,10 +1407,10 @@ class Skyvern: Filter by one or more run statuses. search_key : typing.Optional[str] - Case-insensitive substring search across workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. A run is returned if any of these fields match. Soft-deleted parameter definitions are excluded from key/description matching. error_code : typing.Optional[str] - Exact-match filter on the error_code field inside each task's errors JSON array. + Exact-match filter on the error_code field inside each task's errors JSON array. A run matches if any of its tasks contains an error with a matching error_code. Error codes are user-defined strings set during workflow execution. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1352,6 +1419,21 @@ class Skyvern: ------- typing.List[WorkflowRun] Successful Response + + Examples + -------- + from skyvern import Skyvern + + client = Skyvern( + api_key="YOUR_API_KEY", + ) + client.get_workflow_runs_by_id( + workflow_id="workflow_id", + page=1, + page_size=1, + search_key="search_key", + error_code="error_code", + ) """ _response = self._raw_client.get_workflow_runs_by_id( workflow_id, @@ -1477,16 +1559,29 @@ class Skyvern: return _response.data def list_browser_profiles( - self, *, include_deleted: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None + self, + *, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + include_deleted: typing.Optional[bool] = None, + search_key: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[BrowserProfile]: """ Get all browser profiles for the organization Parameters ---------- + page : typing.Optional[int] + + page_size : typing.Optional[int] + include_deleted : typing.Optional[bool] Include deleted browser profiles + search_key : typing.Optional[str] + Case-insensitive substring search across: browser profile name and description. A profile is returned if either field matches. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1503,11 +1598,18 @@ class Skyvern: api_key="YOUR_API_KEY", ) client.list_browser_profiles( + page=1, + page_size=1, include_deleted=True, + search_key="search_key", ) """ _response = self._raw_client.list_browser_profiles( - include_deleted=include_deleted, request_options=request_options + page=page, + page_size=page_size, + include_deleted=include_deleted, + search_key=search_key, + request_options=request_options, ) return _response.data @@ -1630,6 +1732,52 @@ class Skyvern: _response = self._raw_client.delete_browser_profile(profile_id, request_options=request_options) return _response.data + def update_browser_profile( + self, + profile_id: str, + *, + name: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> BrowserProfile: + """ + Update a browser profile's name and/or description + + Parameters + ---------- + profile_id : str + The ID of the browser profile to update. browser_profile_id starts with `bp_` + + name : typing.Optional[str] + New name for the browser profile + + description : typing.Optional[str] + New description for the browser profile + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + BrowserProfile + Successfully updated browser profile + + Examples + -------- + from skyvern import Skyvern + + client = Skyvern( + api_key="YOUR_API_KEY", + ) + client.update_browser_profile( + profile_id="bp_123456", + ) + """ + _response = self._raw_client.update_browser_profile( + profile_id, name=name, description=description, request_options=request_options + ) + return _response.data + def get_browser_sessions( self, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[BrowserSessionResponse]: @@ -1662,7 +1810,7 @@ class Skyvern: self, *, timeout: typing.Optional[int] = OMIT, - proxy_location: typing.Optional[ProxyLocation] = OMIT, + proxy_location: typing.Optional[CreateBrowserSessionRequestProxyLocation] = OMIT, extensions: typing.Optional[typing.Sequence[Extensions]] = OMIT, browser_type: typing.Optional[PersistentBrowserType] = OMIT, browser_profile_id: typing.Optional[str] = OMIT, @@ -1676,7 +1824,7 @@ class Skyvern: timeout : typing.Optional[int] Timeout in minutes for the session. Timeout is applied after the session is started. Must be between 5 and 1440. Defaults to 60. - proxy_location : typing.Optional[ProxyLocation] + proxy_location : typing.Optional[CreateBrowserSessionRequestProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -1692,6 +1840,7 @@ class Skyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -1709,6 +1858,9 @@ class Skyvern: - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"}, or a custom proxy URL dict for self-hosted deployments: {"url": "http://user:password@proxy.example.com:8080"} + extensions : typing.Optional[typing.Sequence[Extensions]] A list of extensions to install in the browser session. @@ -2124,7 +2276,8 @@ class Skyvern: def login( self, *, - credential_type: SkyvernSchemasRunBlocksCredentialType, + credential_type: SkyvernSchemasCredentialTypeCredentialType, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -2134,6 +2287,7 @@ class Skyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, prompt: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -2152,9 +2306,11 @@ class Skyvern: Parameters ---------- - credential_type : SkyvernSchemasRunBlocksCredentialType + credential_type : SkyvernSchemasCredentialTypeCredentialType Where to get the credential from + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -2182,6 +2338,9 @@ class Skyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -2231,11 +2390,13 @@ class Skyvern: api_key="YOUR_API_KEY", ) client.login( + user_agent="x-user-agent", credential_type="skyvern", ) """ _response = self._raw_client.login( credential_type=credential_type, + user_agent=user_agent, url=url, webhook_url=webhook_url, proxy_location=proxy_location, @@ -2245,6 +2406,7 @@ class Skyvern: browser_profile_id=browser_profile_id, browser_address=browser_address, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, max_screenshot_scrolling_times=max_screenshot_scrolling_times, prompt=prompt, credential_id=credential_id, @@ -2264,6 +2426,7 @@ class Skyvern: self, *, navigation_goal: str, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -2273,6 +2436,7 @@ class Skyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, download_suffix: typing.Optional[str] = OMIT, download_timeout: typing.Optional[float] = OMIT, @@ -2287,6 +2451,8 @@ class Skyvern: navigation_goal : str Instructions for navigating to and downloading the file + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -2314,6 +2480,9 @@ class Skyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -2342,11 +2511,13 @@ class Skyvern: api_key="YOUR_API_KEY", ) client.download_files( + user_agent="x-user-agent", navigation_goal="navigation_goal", ) """ _response = self._raw_client.download_files( navigation_goal=navigation_goal, + user_agent=user_agent, url=url, webhook_url=webhook_url, proxy_location=proxy_location, @@ -2356,6 +2527,7 @@ class Skyvern: browser_profile_id=browser_profile_id, browser_address=browser_address, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, max_screenshot_scrolling_times=max_screenshot_scrolling_times, download_suffix=download_suffix, download_timeout=download_timeout, @@ -2594,6 +2766,22 @@ class Skyvern: self._artifacts = ArtifactsClient(client_wrapper=self._client_wrapper) return self._artifacts + @property + def server(self): + if self._server is None: + from .server.client import ServerClient # noqa: E402 + + self._server = ServerClient(client_wrapper=self._client_wrapper) + return self._server + + @property + def workflows(self): + if self._workflows is None: + from .workflows.client import WorkflowsClient # noqa: E402 + + self._workflows = WorkflowsClient(client_wrapper=self._client_wrapper) + return self._workflows + @property def scripts(self): if self._scripts is None: @@ -2678,6 +2866,8 @@ class AsyncSkyvern: ) self._raw_client = AsyncRawSkyvern(client_wrapper=self._client_wrapper) self._artifacts: typing.Optional[AsyncArtifactsClient] = None + self._server: typing.Optional[AsyncServerClient] = None + self._workflows: typing.Optional[AsyncWorkflowsClient] = None self._scripts: typing.Optional[AsyncScriptsClient] = None self._schedules: typing.Optional[AsyncSchedulesClient] = None @@ -2700,8 +2890,8 @@ class AsyncSkyvern: url: typing.Optional[str] = OMIT, engine: typing.Optional[RunEngine] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[TaskRunRequestProxyLocation] = OMIT, - data_extraction_schema: typing.Optional[TaskRunRequestDataExtractionSchema] = OMIT, + proxy_location: typing.Optional[TaskRunRequestInputProxyLocation] = OMIT, + data_extraction_schema: typing.Optional[TaskRunRequestInputDataExtractionSchema] = OMIT, error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_steps: typing.Optional[int] = OMIT, webhook_url: typing.Optional[str] = OMIT, @@ -2710,6 +2900,7 @@ class AsyncSkyvern: browser_session_id: typing.Optional[str] = OMIT, model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, publish_workflow: typing.Optional[bool] = OMIT, include_action_history_in_verification: typing.Optional[bool] = OMIT, max_screenshot_scrolls: typing.Optional[int] = OMIT, @@ -2739,7 +2930,7 @@ class AsyncSkyvern: title : typing.Optional[str] The title for the task - proxy_location : typing.Optional[TaskRunRequestProxyLocation] + proxy_location : typing.Optional[TaskRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -2755,6 +2946,7 @@ class AsyncSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -2771,9 +2963,11 @@ class AsyncSkyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} - data_extraction_schema : typing.Optional[TaskRunRequestDataExtractionSchema] + data_extraction_schema : typing.Optional[TaskRunRequestInputDataExtractionSchema] The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. @@ -2808,6 +3002,9 @@ class AsyncSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + publish_workflow : typing.Optional[bool] Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. @@ -2867,6 +3064,7 @@ class AsyncSkyvern: browser_session_id=browser_session_id, model=model, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, publish_workflow=publish_workflow, include_action_history_in_verification=include_action_history_in_verification, max_screenshot_scrolls=max_screenshot_scrolls, @@ -2885,7 +3083,7 @@ class AsyncSkyvern: user_agent: typing.Optional[str] = None, parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[WorkflowRunRequestProxyLocation] = OMIT, + proxy_location: typing.Optional[WorkflowRunRequestInputProxyLocation] = OMIT, webhook_url: typing.Optional[str] = OMIT, totp_url: typing.Optional[str] = OMIT, totp_identifier: typing.Optional[str] = OMIT, @@ -2894,10 +3092,11 @@ class AsyncSkyvern: max_screenshot_scrolls: typing.Optional[int] = OMIT, max_elapsed_time_minutes: typing.Optional[int] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, browser_address: typing.Optional[str] = OMIT, ai_fallback: typing.Optional[bool] = OMIT, run_with: typing.Optional[str] = OMIT, - run_metadata: typing.Optional[typing.Dict[str, str]] = OMIT, + run_metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> WorkflowRunResponse: """ @@ -2920,7 +3119,7 @@ class AsyncSkyvern: title : typing.Optional[str] The title for this workflow run - proxy_location : typing.Optional[WorkflowRunRequestProxyLocation] + proxy_location : typing.Optional[WorkflowRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -2936,6 +3135,7 @@ class AsyncSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -2952,6 +3152,8 @@ class AsyncSkyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} webhook_url : typing.Optional[str] @@ -2980,6 +3182,9 @@ class AsyncSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + browser_address : typing.Optional[str] The CDP address for the workflow run. @@ -2989,7 +3194,7 @@ class AsyncSkyvern: run_with : typing.Optional[str] Whether to run the workflow with agent or code. Null inherits from the workflow setting. - run_metadata : typing.Optional[typing.Dict[str, str]] + run_metadata : typing.Optional[typing.Dict[str, typing.Optional[str]]] String key/value metadata to attach to this workflow run for analytics tag filtering. request_options : typing.Optional[RequestOptions] @@ -3038,6 +3243,7 @@ class AsyncSkyvern: max_screenshot_scrolls=max_screenshot_scrolls, max_elapsed_time_minutes=max_elapsed_time_minutes, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, browser_address=browser_address, ai_fallback=ai_fallback, run_with=run_with, @@ -3046,61 +3252,6 @@ class AsyncSkyvern: ) return _response.data - async def retry_workflow_run( - self, - workflow_run_id: str, - *, - max_steps_override: typing.Optional[int] = None, - user_agent: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> WorkflowRunResponse: - """ - Retry a workflow run using the original run parameters. - - Parameters - ---------- - workflow_run_id : str - The id of the workflow run to retry. - - max_steps_override : typing.Optional[int] - - user_agent : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - WorkflowRunResponse - Successfully retried workflow run - - Examples - -------- - import asyncio - - from skyvern import AsyncSkyvern - - client = AsyncSkyvern( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.retry_workflow_run( - workflow_run_id="wr_123", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.retry_workflow_run( - workflow_run_id, - max_steps_override=max_steps_override, - user_agent=user_agent, - request_options=request_options, - ) - return _response.data - async def get_run(self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetRunResponse: """ Get run information (task run, workflow run) @@ -3181,6 +3332,47 @@ class AsyncSkyvern: _response = await self._raw_client.cancel_run(run_id, request_options=request_options) return _response.data + async def bulk_cancel_runs( + self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None + ) -> BulkCancelRunsResponse: + """ + Cancel multiple runs (tasks or workflows) in a single request + + Parameters + ---------- + run_ids : typing.Sequence[str] + List of run IDs to cancel + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + BulkCancelRunsResponse + Successful Response + + Examples + -------- + import asyncio + + from skyvern import AsyncSkyvern + + client = AsyncSkyvern( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.bulk_cancel_runs( + run_ids=["run_ids"], + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.bulk_cancel_runs(run_ids=run_ids, request_options=request_options) + return _response.data + async def get_workflows( self, *, @@ -3791,7 +3983,7 @@ class AsyncSkyvern: *, request: typing.Optional[RetryRunWebhookRequest] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Optional[typing.Any]: + ) -> RunWebhookReplayResponse: """ Retry sending the webhook for a run @@ -3807,7 +3999,7 @@ class AsyncSkyvern: Returns ------- - typing.Optional[typing.Any] + RunWebhookReplayResponse Successful Response Examples @@ -3874,6 +4066,63 @@ class AsyncSkyvern: _response = await self._raw_client.get_run_timeline(run_id, request_options=request_options) return _response.data + async def retry_workflow_run( + self, + workflow_run_id: str, + *, + max_steps_override: typing.Optional[int] = None, + user_agent: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> WorkflowRunResponse: + """ + Retry a workflow run using the original run parameters. + + Parameters + ---------- + workflow_run_id : str + The id of the workflow run to retry. + + max_steps_override : typing.Optional[int] + + user_agent : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + WorkflowRunResponse + Successfully retried workflow run + + Examples + -------- + import asyncio + + from skyvern import AsyncSkyvern + + client = AsyncSkyvern( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.retry_workflow_run( + workflow_run_id="wr_123", + max_steps_override=1, + user_agent="x-user-agent", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.retry_workflow_run( + workflow_run_id, + max_steps_override=max_steps_override, + user_agent=user_agent, + request_options=request_options, + ) + return _response.data + async def get_runs_v2( self, *, @@ -4040,10 +4289,19 @@ class AsyncSkyvern: """ List runs for a specific workflow. + Supports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic. + + ### search_key + + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded. + + ### error_code + + Exact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`. + Parameters ---------- workflow_id : str - Workflow permanent ID. Workflow ID starts with `wpid_`. page : typing.Optional[int] Page number for pagination. @@ -4055,10 +4313,10 @@ class AsyncSkyvern: Filter by one or more run statuses. search_key : typing.Optional[str] - Case-insensitive substring search across workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. A run is returned if any of these fields match. Soft-deleted parameter definitions are excluded from key/description matching. error_code : typing.Optional[str] - Exact-match filter on the error_code field inside each task's errors JSON array. + Exact-match filter on the error_code field inside each task's errors JSON array. A run matches if any of its tasks contains an error with a matching error_code. Error codes are user-defined strings set during workflow execution. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -4067,6 +4325,29 @@ class AsyncSkyvern: ------- typing.List[WorkflowRun] Successful Response + + Examples + -------- + import asyncio + + from skyvern import AsyncSkyvern + + client = AsyncSkyvern( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.get_workflow_runs_by_id( + workflow_id="workflow_id", + page=1, + page_size=1, + search_key="search_key", + error_code="error_code", + ) + + + asyncio.run(main()) """ _response = await self._raw_client.get_workflow_runs_by_id( workflow_id, @@ -4218,16 +4499,29 @@ class AsyncSkyvern: return _response.data async def list_browser_profiles( - self, *, include_deleted: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None + self, + *, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + include_deleted: typing.Optional[bool] = None, + search_key: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[BrowserProfile]: """ Get all browser profiles for the organization Parameters ---------- + page : typing.Optional[int] + + page_size : typing.Optional[int] + include_deleted : typing.Optional[bool] Include deleted browser profiles + search_key : typing.Optional[str] + Case-insensitive substring search across: browser profile name and description. A profile is returned if either field matches. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -4249,14 +4543,21 @@ class AsyncSkyvern: async def main() -> None: await client.list_browser_profiles( + page=1, + page_size=1, include_deleted=True, + search_key="search_key", ) asyncio.run(main()) """ _response = await self._raw_client.list_browser_profiles( - include_deleted=include_deleted, request_options=request_options + page=page, + page_size=page_size, + include_deleted=include_deleted, + search_key=search_key, + request_options=request_options, ) return _response.data @@ -4403,6 +4704,60 @@ class AsyncSkyvern: _response = await self._raw_client.delete_browser_profile(profile_id, request_options=request_options) return _response.data + async def update_browser_profile( + self, + profile_id: str, + *, + name: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> BrowserProfile: + """ + Update a browser profile's name and/or description + + Parameters + ---------- + profile_id : str + The ID of the browser profile to update. browser_profile_id starts with `bp_` + + name : typing.Optional[str] + New name for the browser profile + + description : typing.Optional[str] + New description for the browser profile + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + BrowserProfile + Successfully updated browser profile + + Examples + -------- + import asyncio + + from skyvern import AsyncSkyvern + + client = AsyncSkyvern( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.update_browser_profile( + profile_id="bp_123456", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_browser_profile( + profile_id, name=name, description=description, request_options=request_options + ) + return _response.data + async def get_browser_sessions( self, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[BrowserSessionResponse]: @@ -4443,7 +4798,7 @@ class AsyncSkyvern: self, *, timeout: typing.Optional[int] = OMIT, - proxy_location: typing.Optional[ProxyLocation] = OMIT, + proxy_location: typing.Optional[CreateBrowserSessionRequestProxyLocation] = OMIT, extensions: typing.Optional[typing.Sequence[Extensions]] = OMIT, browser_type: typing.Optional[PersistentBrowserType] = OMIT, browser_profile_id: typing.Optional[str] = OMIT, @@ -4457,7 +4812,7 @@ class AsyncSkyvern: timeout : typing.Optional[int] Timeout in minutes for the session. Timeout is applied after the session is started. Must be between 5 and 1440. Defaults to 60. - proxy_location : typing.Optional[ProxyLocation] + proxy_location : typing.Optional[CreateBrowserSessionRequestProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -4473,6 +4828,7 @@ class AsyncSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -4490,6 +4846,9 @@ class AsyncSkyvern: - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"}, or a custom proxy URL dict for self-hosted deployments: {"url": "http://user:password@proxy.example.com:8080"} + extensions : typing.Optional[typing.Sequence[Extensions]] A list of extensions to install in the browser session. @@ -4979,7 +5338,8 @@ class AsyncSkyvern: async def login( self, *, - credential_type: SkyvernSchemasRunBlocksCredentialType, + credential_type: SkyvernSchemasCredentialTypeCredentialType, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -4989,6 +5349,7 @@ class AsyncSkyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, prompt: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -5007,9 +5368,11 @@ class AsyncSkyvern: Parameters ---------- - credential_type : SkyvernSchemasRunBlocksCredentialType + credential_type : SkyvernSchemasCredentialTypeCredentialType Where to get the credential from + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -5037,6 +5400,9 @@ class AsyncSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -5091,6 +5457,7 @@ class AsyncSkyvern: async def main() -> None: await client.login( + user_agent="x-user-agent", credential_type="skyvern", ) @@ -5099,6 +5466,7 @@ class AsyncSkyvern: """ _response = await self._raw_client.login( credential_type=credential_type, + user_agent=user_agent, url=url, webhook_url=webhook_url, proxy_location=proxy_location, @@ -5108,6 +5476,7 @@ class AsyncSkyvern: browser_profile_id=browser_profile_id, browser_address=browser_address, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, max_screenshot_scrolling_times=max_screenshot_scrolling_times, prompt=prompt, credential_id=credential_id, @@ -5127,6 +5496,7 @@ class AsyncSkyvern: self, *, navigation_goal: str, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -5136,6 +5506,7 @@ class AsyncSkyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, download_suffix: typing.Optional[str] = OMIT, download_timeout: typing.Optional[float] = OMIT, @@ -5150,6 +5521,8 @@ class AsyncSkyvern: navigation_goal : str Instructions for navigating to and downloading the file + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -5177,6 +5550,9 @@ class AsyncSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -5210,6 +5586,7 @@ class AsyncSkyvern: async def main() -> None: await client.download_files( + user_agent="x-user-agent", navigation_goal="navigation_goal", ) @@ -5218,6 +5595,7 @@ class AsyncSkyvern: """ _response = await self._raw_client.download_files( navigation_goal=navigation_goal, + user_agent=user_agent, url=url, webhook_url=webhook_url, proxy_location=proxy_location, @@ -5227,6 +5605,7 @@ class AsyncSkyvern: browser_profile_id=browser_profile_id, browser_address=browser_address, extra_http_headers=extra_http_headers, + cdp_connect_headers=cdp_connect_headers, max_screenshot_scrolling_times=max_screenshot_scrolling_times, download_suffix=download_suffix, download_timeout=download_timeout, @@ -5505,6 +5884,22 @@ class AsyncSkyvern: self._artifacts = AsyncArtifactsClient(client_wrapper=self._client_wrapper) return self._artifacts + @property + def server(self): + if self._server is None: + from .server.client import AsyncServerClient # noqa: E402 + + self._server = AsyncServerClient(client_wrapper=self._client_wrapper) + return self._server + + @property + def workflows(self): + if self._workflows is None: + from .workflows.client import AsyncWorkflowsClient # noqa: E402 + + self._workflows = AsyncWorkflowsClient(client_wrapper=self._client_wrapper) + return self._workflows + @property def scripts(self): if self._scripts is None: diff --git a/skyvern/client/core/client_wrapper.py b/skyvern/client/core/client_wrapper.py index 37f2cdbcd..bd630dbf0 100644 --- a/skyvern/client/core/client_wrapper.py +++ b/skyvern/client/core/client_wrapper.py @@ -22,10 +22,10 @@ class BaseClientWrapper: def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { - "User-Agent": "skyvern/1.0.34", + "User-Agent": "skyvern/1.0.37", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "skyvern", - "X-Fern-SDK-Version": "1.0.34", + "X-Fern-SDK-Version": "1.0.37", **(self.get_custom_headers() or {}), } if self._api_key is not None: diff --git a/skyvern/client/errors/__init__.py b/skyvern/client/errors/__init__.py index 40b205910..4415e0d6b 100644 --- a/skyvern/client/errors/__init__.py +++ b/skyvern/client/errors/__init__.py @@ -9,13 +9,17 @@ if typing.TYPE_CHECKING: from .bad_request_error import BadRequestError from .conflict_error import ConflictError from .forbidden_error import ForbiddenError + from .internal_server_error import InternalServerError from .not_found_error import NotFoundError + from .range_not_satisfiable_error import RangeNotSatisfiableError from .unprocessable_entity_error import UnprocessableEntityError _dynamic_imports: typing.Dict[str, str] = { "BadRequestError": ".bad_request_error", "ConflictError": ".conflict_error", "ForbiddenError": ".forbidden_error", + "InternalServerError": ".internal_server_error", "NotFoundError": ".not_found_error", + "RangeNotSatisfiableError": ".range_not_satisfiable_error", "UnprocessableEntityError": ".unprocessable_entity_error", } @@ -41,4 +45,12 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["BadRequestError", "ConflictError", "ForbiddenError", "NotFoundError", "UnprocessableEntityError"] +__all__ = [ + "BadRequestError", + "ConflictError", + "ForbiddenError", + "InternalServerError", + "NotFoundError", + "RangeNotSatisfiableError", + "UnprocessableEntityError", +] diff --git a/skyvern/client/errors/internal_server_error.py b/skyvern/client/errors/internal_server_error.py new file mode 100644 index 000000000..14313ab41 --- /dev/null +++ b/skyvern/client/errors/internal_server_error.py @@ -0,0 +1,10 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.api_error import ApiError + + +class InternalServerError(ApiError): + def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None): + super().__init__(status_code=500, headers=headers, body=body) diff --git a/skyvern/client/errors/range_not_satisfiable_error.py b/skyvern/client/errors/range_not_satisfiable_error.py new file mode 100644 index 000000000..079822df7 --- /dev/null +++ b/skyvern/client/errors/range_not_satisfiable_error.py @@ -0,0 +1,10 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.api_error import ApiError + + +class RangeNotSatisfiableError(ApiError): + def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None): + super().__init__(status_code=416, headers=headers, body=body) diff --git a/skyvern/client/raw_client.py b/skyvern/client/raw_client.py index 4b8668351..0757d005b 100644 --- a/skyvern/client/raw_client.py +++ b/skyvern/client/raw_client.py @@ -20,6 +20,8 @@ from .types.artifact import Artifact from .types.artifact_type import ArtifactType from .types.browser_profile import BrowserProfile from .types.browser_session_response import BrowserSessionResponse +from .types.bulk_cancel_runs_response import BulkCancelRunsResponse +from .types.create_browser_session_request_proxy_location import CreateBrowserSessionRequestProxyLocation from .types.create_credential_request_credential import CreateCredentialRequestCredential from .types.create_script_response import CreateScriptResponse from .types.credential_response import CredentialResponse @@ -35,20 +37,21 @@ from .types.run_engine import RunEngine from .types.run_sdk_action_request_action import RunSdkActionRequestAction from .types.run_sdk_action_response import RunSdkActionResponse from .types.run_status import RunStatus +from .types.run_webhook_replay_response import RunWebhookReplayResponse from .types.script import Script from .types.script_file_create import ScriptFileCreate from .types.skyvern_forge_sdk_schemas_credentials_credential_type import SkyvernForgeSdkSchemasCredentialsCredentialType -from .types.skyvern_schemas_run_blocks_credential_type import SkyvernSchemasRunBlocksCredentialType +from .types.skyvern_schemas_credential_type_credential_type import SkyvernSchemasCredentialTypeCredentialType from .types.task_run_list_item import TaskRunListItem -from .types.task_run_request_data_extraction_schema import TaskRunRequestDataExtractionSchema -from .types.task_run_request_proxy_location import TaskRunRequestProxyLocation +from .types.task_run_request_input_data_extraction_schema import TaskRunRequestInputDataExtractionSchema +from .types.task_run_request_input_proxy_location import TaskRunRequestInputProxyLocation from .types.task_run_response import TaskRunResponse from .types.totp_code import TotpCode from .types.upload_file_response import UploadFileResponse from .types.workflow import Workflow from .types.workflow_create_yaml_request import WorkflowCreateYamlRequest from .types.workflow_run import WorkflowRun -from .types.workflow_run_request_proxy_location import WorkflowRunRequestProxyLocation +from .types.workflow_run_request_input_proxy_location import WorkflowRunRequestInputProxyLocation from .types.workflow_run_response import WorkflowRunResponse from .types.workflow_run_status import WorkflowRunStatus from .types.workflow_run_timeline import WorkflowRunTimeline @@ -70,8 +73,8 @@ class RawSkyvern: url: typing.Optional[str] = OMIT, engine: typing.Optional[RunEngine] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[TaskRunRequestProxyLocation] = OMIT, - data_extraction_schema: typing.Optional[TaskRunRequestDataExtractionSchema] = OMIT, + proxy_location: typing.Optional[TaskRunRequestInputProxyLocation] = OMIT, + data_extraction_schema: typing.Optional[TaskRunRequestInputDataExtractionSchema] = OMIT, error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_steps: typing.Optional[int] = OMIT, webhook_url: typing.Optional[str] = OMIT, @@ -80,6 +83,7 @@ class RawSkyvern: browser_session_id: typing.Optional[str] = OMIT, model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, publish_workflow: typing.Optional[bool] = OMIT, include_action_history_in_verification: typing.Optional[bool] = OMIT, max_screenshot_scrolls: typing.Optional[int] = OMIT, @@ -109,7 +113,7 @@ class RawSkyvern: title : typing.Optional[str] The title for the task - proxy_location : typing.Optional[TaskRunRequestProxyLocation] + proxy_location : typing.Optional[TaskRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -125,6 +129,7 @@ class RawSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -141,9 +146,11 @@ class RawSkyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} - data_extraction_schema : typing.Optional[TaskRunRequestDataExtractionSchema] + data_extraction_schema : typing.Optional[TaskRunRequestInputDataExtractionSchema] The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. @@ -178,6 +185,9 @@ class RawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + publish_workflow : typing.Optional[bool] Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. @@ -210,10 +220,12 @@ class RawSkyvern: "engine": engine, "title": title, "proxy_location": convert_and_respect_annotation_metadata( - object_=proxy_location, annotation=TaskRunRequestProxyLocation, direction="write" + object_=proxy_location, annotation=TaskRunRequestInputProxyLocation, direction="write" ), "data_extraction_schema": convert_and_respect_annotation_metadata( - object_=data_extraction_schema, annotation=TaskRunRequestDataExtractionSchema, direction="write" + object_=data_extraction_schema, + annotation=TaskRunRequestInputDataExtractionSchema, + direction="write", ), "error_code_mapping": error_code_mapping, "max_steps": max_steps, @@ -223,6 +235,7 @@ class RawSkyvern: "browser_session_id": browser_session_id, "model": model, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "publish_workflow": publish_workflow, "include_action_history_in_verification": include_action_history_in_verification, "max_screenshot_scrolls": max_screenshot_scrolls, @@ -282,7 +295,7 @@ class RawSkyvern: user_agent: typing.Optional[str] = None, parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[WorkflowRunRequestProxyLocation] = OMIT, + proxy_location: typing.Optional[WorkflowRunRequestInputProxyLocation] = OMIT, webhook_url: typing.Optional[str] = OMIT, totp_url: typing.Optional[str] = OMIT, totp_identifier: typing.Optional[str] = OMIT, @@ -291,10 +304,11 @@ class RawSkyvern: max_screenshot_scrolls: typing.Optional[int] = OMIT, max_elapsed_time_minutes: typing.Optional[int] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, browser_address: typing.Optional[str] = OMIT, ai_fallback: typing.Optional[bool] = OMIT, run_with: typing.Optional[str] = OMIT, - run_metadata: typing.Optional[typing.Dict[str, str]] = OMIT, + run_metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[WorkflowRunResponse]: """ @@ -317,7 +331,7 @@ class RawSkyvern: title : typing.Optional[str] The title for this workflow run - proxy_location : typing.Optional[WorkflowRunRequestProxyLocation] + proxy_location : typing.Optional[WorkflowRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -333,6 +347,7 @@ class RawSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -349,6 +364,8 @@ class RawSkyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} webhook_url : typing.Optional[str] @@ -377,6 +394,9 @@ class RawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + browser_address : typing.Optional[str] The CDP address for the workflow run. @@ -386,7 +406,7 @@ class RawSkyvern: run_with : typing.Optional[str] Whether to run the workflow with agent or code. Null inherits from the workflow setting. - run_metadata : typing.Optional[typing.Dict[str, str]] + run_metadata : typing.Optional[typing.Dict[str, typing.Optional[str]]] String key/value metadata to attach to this workflow run for analytics tag filtering. request_options : typing.Optional[RequestOptions] @@ -408,7 +428,7 @@ class RawSkyvern: "parameters": parameters, "title": title, "proxy_location": convert_and_respect_annotation_metadata( - object_=proxy_location, annotation=WorkflowRunRequestProxyLocation, direction="write" + object_=proxy_location, annotation=WorkflowRunRequestInputProxyLocation, direction="write" ), "webhook_url": webhook_url, "totp_url": totp_url, @@ -418,6 +438,7 @@ class RawSkyvern: "max_screenshot_scrolls": max_screenshot_scrolls, "max_elapsed_time_minutes": max_elapsed_time_minutes, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "browser_address": browser_address, "ai_fallback": ai_fallback, "run_with": run_with, @@ -468,92 +489,6 @@ class RawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - def retry_workflow_run( - self, - workflow_run_id: str, - *, - max_steps_override: typing.Optional[int] = None, - user_agent: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[WorkflowRunResponse]: - """ - Retry a workflow run using the original run parameters. - - Parameters - ---------- - workflow_run_id : str - The id of the workflow run to retry. - - max_steps_override : typing.Optional[int] - - user_agent : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[WorkflowRunResponse] - Successfully retried workflow run - """ - _response = self._client_wrapper.httpx_client.request( - f"v1/workflows/runs/{jsonable_encoder(workflow_run_id)}/retry", - method="POST", - headers={ - "x-max-steps-override": str(max_steps_override) if max_steps_override is not None else None, - "x-user-agent": str(user_agent) if user_agent is not None else None, - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - WorkflowRunResponse, - parse_obj_as( - type_=WorkflowRunResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 422: - raise UnprocessableEntityError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_response.json(), - ), - ), - ) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - def get_run( self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[GetRunResponse]: @@ -667,6 +602,63 @@ class RawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def bulk_cancel_runs( + self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[BulkCancelRunsResponse]: + """ + Cancel multiple runs (tasks or workflows) in a single request + + Parameters + ---------- + run_ids : typing.Sequence[str] + List of run IDs to cancel + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[BulkCancelRunsResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + "v1/runs/cancel", + method="POST", + json={ + "run_ids": run_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + BulkCancelRunsResponse, + parse_obj_as( + type_=BulkCancelRunsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def get_workflows( self, *, @@ -1470,7 +1462,7 @@ class RawSkyvern: *, request: typing.Optional[RetryRunWebhookRequest] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[typing.Optional[typing.Any]]: + ) -> HttpResponse[RunWebhookReplayResponse]: """ Retry sending the webhook for a run @@ -1486,7 +1478,7 @@ class RawSkyvern: Returns ------- - HttpResponse[typing.Optional[typing.Any]] + HttpResponse[RunWebhookReplayResponse] Successful Response """ _response = self._client_wrapper.httpx_client.request( @@ -1502,13 +1494,11 @@ class RawSkyvern: omit=OMIT, ) try: - if _response is None or not _response.text.strip(): - return HttpResponse(response=_response, data=None) if 200 <= _response.status_code < 300: _data = typing.cast( - typing.Optional[typing.Any], + RunWebhookReplayResponse, parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore + type_=RunWebhookReplayResponse, # type: ignore object_=_response.json(), ), ) @@ -1601,6 +1591,91 @@ class RawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def retry_workflow_run( + self, + workflow_run_id: str, + *, + max_steps_override: typing.Optional[int] = None, + user_agent: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[WorkflowRunResponse]: + """ + Retry a workflow run using the original run parameters. + + Parameters + ---------- + workflow_run_id : str + The id of the workflow run to retry. + + max_steps_override : typing.Optional[int] + + user_agent : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[WorkflowRunResponse] + Successfully retried workflow run + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/workflows/runs/{jsonable_encoder(workflow_run_id)}/retry", + method="POST", + headers={ + "x-max-steps-override": str(max_steps_override) if max_steps_override is not None else None, + "x-user-agent": str(user_agent) if user_agent is not None else None, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + WorkflowRunResponse, + parse_obj_as( + type_=WorkflowRunResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def get_runs_v2( self, *, @@ -1784,10 +1859,19 @@ class RawSkyvern: """ List runs for a specific workflow. + Supports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic. + + ### search_key + + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded. + + ### error_code + + Exact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`. + Parameters ---------- workflow_id : str - Workflow permanent ID. Workflow ID starts with `wpid_`. page : typing.Optional[int] Page number for pagination. @@ -1799,10 +1883,10 @@ class RawSkyvern: Filter by one or more run statuses. search_key : typing.Optional[str] - Case-insensitive substring search across workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. A run is returned if any of these fields match. Soft-deleted parameter definitions are excluded from key/description matching. error_code : typing.Optional[str] - Exact-match filter on the error_code field inside each task's errors JSON array. + Exact-match filter on the error_code field inside each task's errors JSON array. A run matches if any of its tasks contains an error with a matching error_code. Error codes are user-defined strings set during workflow execution. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2022,16 +2106,29 @@ class RawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def list_browser_profiles( - self, *, include_deleted: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None + self, + *, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + include_deleted: typing.Optional[bool] = None, + search_key: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[typing.List[BrowserProfile]]: """ Get all browser profiles for the organization Parameters ---------- + page : typing.Optional[int] + + page_size : typing.Optional[int] + include_deleted : typing.Optional[bool] Include deleted browser profiles + search_key : typing.Optional[str] + Case-insensitive substring search across: browser profile name and description. A profile is returned if either field matches. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -2044,7 +2141,10 @@ class RawSkyvern: "v1/browser_profiles", method="GET", params={ + "page": page, + "page_size": page_size, "include_deleted": include_deleted, + "search_key": search_key, }, request_options=request_options, ) @@ -2285,6 +2385,97 @@ class RawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def update_browser_profile( + self, + profile_id: str, + *, + name: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[BrowserProfile]: + """ + Update a browser profile's name and/or description + + Parameters + ---------- + profile_id : str + The ID of the browser profile to update. browser_profile_id starts with `bp_` + + name : typing.Optional[str] + New name for the browser profile + + description : typing.Optional[str] + New description for the browser profile + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[BrowserProfile] + Successfully updated browser profile + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/browser_profiles/{jsonable_encoder(profile_id)}", + method="PATCH", + json={ + "name": name, + "description": description, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + BrowserProfile, + parse_obj_as( + type_=BrowserProfile, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 409: + raise ConflictError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def get_browser_sessions( self, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[typing.List[BrowserSessionResponse]]: @@ -2347,7 +2538,7 @@ class RawSkyvern: self, *, timeout: typing.Optional[int] = OMIT, - proxy_location: typing.Optional[ProxyLocation] = OMIT, + proxy_location: typing.Optional[CreateBrowserSessionRequestProxyLocation] = OMIT, extensions: typing.Optional[typing.Sequence[Extensions]] = OMIT, browser_type: typing.Optional[PersistentBrowserType] = OMIT, browser_profile_id: typing.Optional[str] = OMIT, @@ -2361,7 +2552,7 @@ class RawSkyvern: timeout : typing.Optional[int] Timeout in minutes for the session. Timeout is applied after the session is started. Must be between 5 and 1440. Defaults to 60. - proxy_location : typing.Optional[ProxyLocation] + proxy_location : typing.Optional[CreateBrowserSessionRequestProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -2377,6 +2568,7 @@ class RawSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -2394,6 +2586,9 @@ class RawSkyvern: - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"}, or a custom proxy URL dict for self-hosted deployments: {"url": "http://user:password@proxy.example.com:8080"} + extensions : typing.Optional[typing.Sequence[Extensions]] A list of extensions to install in the browser session. @@ -2416,7 +2611,9 @@ class RawSkyvern: method="POST", json={ "timeout": timeout, - "proxy_location": proxy_location, + "proxy_location": convert_and_respect_annotation_metadata( + object_=proxy_location, annotation=CreateBrowserSessionRequestProxyLocation, direction="write" + ), "extensions": extensions, "browser_type": browser_type, "browser_profile_id": browser_profile_id, @@ -3024,7 +3221,8 @@ class RawSkyvern: def login( self, *, - credential_type: SkyvernSchemasRunBlocksCredentialType, + credential_type: SkyvernSchemasCredentialTypeCredentialType, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -3034,6 +3232,7 @@ class RawSkyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, prompt: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -3052,9 +3251,11 @@ class RawSkyvern: Parameters ---------- - credential_type : SkyvernSchemasRunBlocksCredentialType + credential_type : SkyvernSchemasCredentialTypeCredentialType Where to get the credential from + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -3082,6 +3283,9 @@ class RawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -3136,6 +3340,7 @@ class RawSkyvern: "browser_profile_id": browser_profile_id, "browser_address": browser_address, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "max_screenshot_scrolling_times": max_screenshot_scrolling_times, "credential_type": credential_type, "prompt": prompt, @@ -3151,6 +3356,7 @@ class RawSkyvern: }, headers={ "content-type": "application/json", + "x-user-agent": str(user_agent) if user_agent is not None else None, }, request_options=request_options, omit=OMIT, @@ -3185,6 +3391,7 @@ class RawSkyvern: self, *, navigation_goal: str, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -3194,6 +3401,7 @@ class RawSkyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, download_suffix: typing.Optional[str] = OMIT, download_timeout: typing.Optional[float] = OMIT, @@ -3208,6 +3416,8 @@ class RawSkyvern: navigation_goal : str Instructions for navigating to and downloading the file + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -3235,6 +3445,9 @@ class RawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -3268,6 +3481,7 @@ class RawSkyvern: "browser_profile_id": browser_profile_id, "browser_address": browser_address, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "max_screenshot_scrolling_times": max_screenshot_scrolling_times, "navigation_goal": navigation_goal, "download_suffix": download_suffix, @@ -3276,6 +3490,7 @@ class RawSkyvern: }, headers={ "content-type": "application/json", + "x-user-agent": str(user_agent) if user_agent is not None else None, }, request_options=request_options, omit=OMIT, @@ -3650,8 +3865,8 @@ class AsyncRawSkyvern: url: typing.Optional[str] = OMIT, engine: typing.Optional[RunEngine] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[TaskRunRequestProxyLocation] = OMIT, - data_extraction_schema: typing.Optional[TaskRunRequestDataExtractionSchema] = OMIT, + proxy_location: typing.Optional[TaskRunRequestInputProxyLocation] = OMIT, + data_extraction_schema: typing.Optional[TaskRunRequestInputDataExtractionSchema] = OMIT, error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_steps: typing.Optional[int] = OMIT, webhook_url: typing.Optional[str] = OMIT, @@ -3660,6 +3875,7 @@ class AsyncRawSkyvern: browser_session_id: typing.Optional[str] = OMIT, model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, publish_workflow: typing.Optional[bool] = OMIT, include_action_history_in_verification: typing.Optional[bool] = OMIT, max_screenshot_scrolls: typing.Optional[int] = OMIT, @@ -3689,7 +3905,7 @@ class AsyncRawSkyvern: title : typing.Optional[str] The title for the task - proxy_location : typing.Optional[TaskRunRequestProxyLocation] + proxy_location : typing.Optional[TaskRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -3705,6 +3921,7 @@ class AsyncRawSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -3721,9 +3938,11 @@ class AsyncRawSkyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} - data_extraction_schema : typing.Optional[TaskRunRequestDataExtractionSchema] + data_extraction_schema : typing.Optional[TaskRunRequestInputDataExtractionSchema] The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. @@ -3758,6 +3977,9 @@ class AsyncRawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + publish_workflow : typing.Optional[bool] Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. @@ -3790,10 +4012,12 @@ class AsyncRawSkyvern: "engine": engine, "title": title, "proxy_location": convert_and_respect_annotation_metadata( - object_=proxy_location, annotation=TaskRunRequestProxyLocation, direction="write" + object_=proxy_location, annotation=TaskRunRequestInputProxyLocation, direction="write" ), "data_extraction_schema": convert_and_respect_annotation_metadata( - object_=data_extraction_schema, annotation=TaskRunRequestDataExtractionSchema, direction="write" + object_=data_extraction_schema, + annotation=TaskRunRequestInputDataExtractionSchema, + direction="write", ), "error_code_mapping": error_code_mapping, "max_steps": max_steps, @@ -3803,6 +4027,7 @@ class AsyncRawSkyvern: "browser_session_id": browser_session_id, "model": model, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "publish_workflow": publish_workflow, "include_action_history_in_verification": include_action_history_in_verification, "max_screenshot_scrolls": max_screenshot_scrolls, @@ -3862,7 +4087,7 @@ class AsyncRawSkyvern: user_agent: typing.Optional[str] = None, parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, title: typing.Optional[str] = OMIT, - proxy_location: typing.Optional[WorkflowRunRequestProxyLocation] = OMIT, + proxy_location: typing.Optional[WorkflowRunRequestInputProxyLocation] = OMIT, webhook_url: typing.Optional[str] = OMIT, totp_url: typing.Optional[str] = OMIT, totp_identifier: typing.Optional[str] = OMIT, @@ -3871,10 +4096,11 @@ class AsyncRawSkyvern: max_screenshot_scrolls: typing.Optional[int] = OMIT, max_elapsed_time_minutes: typing.Optional[int] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, browser_address: typing.Optional[str] = OMIT, ai_fallback: typing.Optional[bool] = OMIT, run_with: typing.Optional[str] = OMIT, - run_metadata: typing.Optional[typing.Dict[str, str]] = OMIT, + run_metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[WorkflowRunResponse]: """ @@ -3897,7 +4123,7 @@ class AsyncRawSkyvern: title : typing.Optional[str] The title for this workflow run - proxy_location : typing.Optional[WorkflowRunRequestProxyLocation] + proxy_location : typing.Optional[WorkflowRunRequestInputProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -3913,6 +4139,7 @@ class AsyncRawSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -3929,6 +4156,8 @@ class AsyncRawSkyvern: - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} webhook_url : typing.Optional[str] @@ -3957,6 +4186,9 @@ class AsyncRawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] The extra HTTP headers for the requests in browser. + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + browser_address : typing.Optional[str] The CDP address for the workflow run. @@ -3966,7 +4198,7 @@ class AsyncRawSkyvern: run_with : typing.Optional[str] Whether to run the workflow with agent or code. Null inherits from the workflow setting. - run_metadata : typing.Optional[typing.Dict[str, str]] + run_metadata : typing.Optional[typing.Dict[str, typing.Optional[str]]] String key/value metadata to attach to this workflow run for analytics tag filtering. request_options : typing.Optional[RequestOptions] @@ -3988,7 +4220,7 @@ class AsyncRawSkyvern: "parameters": parameters, "title": title, "proxy_location": convert_and_respect_annotation_metadata( - object_=proxy_location, annotation=WorkflowRunRequestProxyLocation, direction="write" + object_=proxy_location, annotation=WorkflowRunRequestInputProxyLocation, direction="write" ), "webhook_url": webhook_url, "totp_url": totp_url, @@ -3998,6 +4230,7 @@ class AsyncRawSkyvern: "max_screenshot_scrolls": max_screenshot_scrolls, "max_elapsed_time_minutes": max_elapsed_time_minutes, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "browser_address": browser_address, "ai_fallback": ai_fallback, "run_with": run_with, @@ -4048,92 +4281,6 @@ class AsyncRawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - async def retry_workflow_run( - self, - workflow_run_id: str, - *, - max_steps_override: typing.Optional[int] = None, - user_agent: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[WorkflowRunResponse]: - """ - Retry a workflow run using the original run parameters. - - Parameters - ---------- - workflow_run_id : str - The id of the workflow run to retry. - - max_steps_override : typing.Optional[int] - - user_agent : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[WorkflowRunResponse] - Successfully retried workflow run - """ - _response = await self._client_wrapper.httpx_client.request( - f"v1/workflows/runs/{jsonable_encoder(workflow_run_id)}/retry", - method="POST", - headers={ - "x-max-steps-override": str(max_steps_override) if max_steps_override is not None else None, - "x-user-agent": str(user_agent) if user_agent is not None else None, - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - WorkflowRunResponse, - parse_obj_as( - type_=WorkflowRunResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 404: - raise NotFoundError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_response.json(), - ), - ), - ) - if _response.status_code == 422: - raise UnprocessableEntityError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_response.json(), - ), - ), - ) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) - raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) - async def get_run( self, run_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[GetRunResponse]: @@ -4247,6 +4394,63 @@ class AsyncRawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def bulk_cancel_runs( + self, *, run_ids: typing.Sequence[str], request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[BulkCancelRunsResponse]: + """ + Cancel multiple runs (tasks or workflows) in a single request + + Parameters + ---------- + run_ids : typing.Sequence[str] + List of run IDs to cancel + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[BulkCancelRunsResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + "v1/runs/cancel", + method="POST", + json={ + "run_ids": run_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + BulkCancelRunsResponse, + parse_obj_as( + type_=BulkCancelRunsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def get_workflows( self, *, @@ -5050,7 +5254,7 @@ class AsyncRawSkyvern: *, request: typing.Optional[RetryRunWebhookRequest] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[typing.Optional[typing.Any]]: + ) -> AsyncHttpResponse[RunWebhookReplayResponse]: """ Retry sending the webhook for a run @@ -5066,7 +5270,7 @@ class AsyncRawSkyvern: Returns ------- - AsyncHttpResponse[typing.Optional[typing.Any]] + AsyncHttpResponse[RunWebhookReplayResponse] Successful Response """ _response = await self._client_wrapper.httpx_client.request( @@ -5082,13 +5286,11 @@ class AsyncRawSkyvern: omit=OMIT, ) try: - if _response is None or not _response.text.strip(): - return AsyncHttpResponse(response=_response, data=None) if 200 <= _response.status_code < 300: _data = typing.cast( - typing.Optional[typing.Any], + RunWebhookReplayResponse, parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore + type_=RunWebhookReplayResponse, # type: ignore object_=_response.json(), ), ) @@ -5181,6 +5383,91 @@ class AsyncRawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def retry_workflow_run( + self, + workflow_run_id: str, + *, + max_steps_override: typing.Optional[int] = None, + user_agent: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[WorkflowRunResponse]: + """ + Retry a workflow run using the original run parameters. + + Parameters + ---------- + workflow_run_id : str + The id of the workflow run to retry. + + max_steps_override : typing.Optional[int] + + user_agent : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[WorkflowRunResponse] + Successfully retried workflow run + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/workflows/runs/{jsonable_encoder(workflow_run_id)}/retry", + method="POST", + headers={ + "x-max-steps-override": str(max_steps_override) if max_steps_override is not None else None, + "x-user-agent": str(user_agent) if user_agent is not None else None, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + WorkflowRunResponse, + parse_obj_as( + type_=WorkflowRunResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def get_runs_v2( self, *, @@ -5364,10 +5651,19 @@ class AsyncRawSkyvern: """ List runs for a specific workflow. + Supports filtering by **status**, **search_key**, and **error_code**. All filters are combined with **AND** logic. + + ### search_key + + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. Soft-deleted parameter definitions are excluded. + + ### error_code + + Exact-match filter on the `error_code` field inside each task's `errors` JSON array. A run matches if any of its tasks contains an error with a matching `error_code`. + Parameters ---------- workflow_id : str - Workflow permanent ID. Workflow ID starts with `wpid_`. page : typing.Optional[int] Page number for pagination. @@ -5379,10 +5675,10 @@ class AsyncRawSkyvern: Filter by one or more run statuses. search_key : typing.Optional[str] - Case-insensitive substring search across workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. + Case-insensitive substring search across: workflow run ID, parameter key, parameter description, run parameter value, and extra HTTP headers. A run is returned if any of these fields match. Soft-deleted parameter definitions are excluded from key/description matching. error_code : typing.Optional[str] - Exact-match filter on the error_code field inside each task's errors JSON array. + Exact-match filter on the error_code field inside each task's errors JSON array. A run matches if any of its tasks contains an error with a matching error_code. Error codes are user-defined strings set during workflow execution. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -5602,16 +5898,29 @@ class AsyncRawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def list_browser_profiles( - self, *, include_deleted: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None + self, + *, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + include_deleted: typing.Optional[bool] = None, + search_key: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[typing.List[BrowserProfile]]: """ Get all browser profiles for the organization Parameters ---------- + page : typing.Optional[int] + + page_size : typing.Optional[int] + include_deleted : typing.Optional[bool] Include deleted browser profiles + search_key : typing.Optional[str] + Case-insensitive substring search across: browser profile name and description. A profile is returned if either field matches. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -5624,7 +5933,10 @@ class AsyncRawSkyvern: "v1/browser_profiles", method="GET", params={ + "page": page, + "page_size": page_size, "include_deleted": include_deleted, + "search_key": search_key, }, request_options=request_options, ) @@ -5865,6 +6177,97 @@ class AsyncRawSkyvern: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def update_browser_profile( + self, + profile_id: str, + *, + name: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[BrowserProfile]: + """ + Update a browser profile's name and/or description + + Parameters + ---------- + profile_id : str + The ID of the browser profile to update. browser_profile_id starts with `bp_` + + name : typing.Optional[str] + New name for the browser profile + + description : typing.Optional[str] + New description for the browser profile + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[BrowserProfile] + Successfully updated browser profile + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/browser_profiles/{jsonable_encoder(profile_id)}", + method="PATCH", + json={ + "name": name, + "description": description, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + BrowserProfile, + parse_obj_as( + type_=BrowserProfile, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 409: + raise ConflictError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def get_browser_sessions( self, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[typing.List[BrowserSessionResponse]]: @@ -5927,7 +6330,7 @@ class AsyncRawSkyvern: self, *, timeout: typing.Optional[int] = OMIT, - proxy_location: typing.Optional[ProxyLocation] = OMIT, + proxy_location: typing.Optional[CreateBrowserSessionRequestProxyLocation] = OMIT, extensions: typing.Optional[typing.Sequence[Extensions]] = OMIT, browser_type: typing.Optional[PersistentBrowserType] = OMIT, browser_profile_id: typing.Optional[str] = OMIT, @@ -5941,7 +6344,7 @@ class AsyncRawSkyvern: timeout : typing.Optional[int] Timeout in minutes for the session. Timeout is applied after the session is started. Must be between 5 and 1440. Defaults to 60. - proxy_location : typing.Optional[ProxyLocation] + proxy_location : typing.Optional[CreateBrowserSessionRequestProxyLocation] Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -5957,6 +6360,7 @@ class AsyncRawSkyvern: - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -5974,6 +6378,9 @@ class AsyncRawSkyvern: - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. + Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"}, or a custom proxy URL dict for self-hosted deployments: {"url": "http://user:password@proxy.example.com:8080"} + extensions : typing.Optional[typing.Sequence[Extensions]] A list of extensions to install in the browser session. @@ -5996,7 +6403,9 @@ class AsyncRawSkyvern: method="POST", json={ "timeout": timeout, - "proxy_location": proxy_location, + "proxy_location": convert_and_respect_annotation_metadata( + object_=proxy_location, annotation=CreateBrowserSessionRequestProxyLocation, direction="write" + ), "extensions": extensions, "browser_type": browser_type, "browser_profile_id": browser_profile_id, @@ -6604,7 +7013,8 @@ class AsyncRawSkyvern: async def login( self, *, - credential_type: SkyvernSchemasRunBlocksCredentialType, + credential_type: SkyvernSchemasCredentialTypeCredentialType, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -6614,6 +7024,7 @@ class AsyncRawSkyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, prompt: typing.Optional[str] = OMIT, credential_id: typing.Optional[str] = OMIT, @@ -6632,9 +7043,11 @@ class AsyncRawSkyvern: Parameters ---------- - credential_type : SkyvernSchemasRunBlocksCredentialType + credential_type : SkyvernSchemasCredentialTypeCredentialType Where to get the credential from + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -6662,6 +7075,9 @@ class AsyncRawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -6716,6 +7132,7 @@ class AsyncRawSkyvern: "browser_profile_id": browser_profile_id, "browser_address": browser_address, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "max_screenshot_scrolling_times": max_screenshot_scrolling_times, "credential_type": credential_type, "prompt": prompt, @@ -6731,6 +7148,7 @@ class AsyncRawSkyvern: }, headers={ "content-type": "application/json", + "x-user-agent": str(user_agent) if user_agent is not None else None, }, request_options=request_options, omit=OMIT, @@ -6765,6 +7183,7 @@ class AsyncRawSkyvern: self, *, navigation_goal: str, + user_agent: typing.Optional[str] = None, url: typing.Optional[str] = OMIT, webhook_url: typing.Optional[str] = OMIT, proxy_location: typing.Optional[ProxyLocation] = OMIT, @@ -6774,6 +7193,7 @@ class AsyncRawSkyvern: browser_profile_id: typing.Optional[str] = OMIT, browser_address: typing.Optional[str] = OMIT, extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT, max_screenshot_scrolling_times: typing.Optional[int] = OMIT, download_suffix: typing.Optional[str] = OMIT, download_timeout: typing.Optional[float] = OMIT, @@ -6788,6 +7208,8 @@ class AsyncRawSkyvern: navigation_goal : str Instructions for navigating to and downloading the file + user_agent : typing.Optional[str] + url : typing.Optional[str] Website URL @@ -6815,6 +7237,9 @@ class AsyncRawSkyvern: extra_http_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] Additional HTTP headers to include in requests + cdp_connect_headers : typing.Optional[typing.Dict[str, typing.Optional[str]]] + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Never forwarded to target websites. + max_screenshot_scrolling_times : typing.Optional[int] Maximum number of times to scroll for screenshots @@ -6848,6 +7273,7 @@ class AsyncRawSkyvern: "browser_profile_id": browser_profile_id, "browser_address": browser_address, "extra_http_headers": extra_http_headers, + "cdp_connect_headers": cdp_connect_headers, "max_screenshot_scrolling_times": max_screenshot_scrolling_times, "navigation_goal": navigation_goal, "download_suffix": download_suffix, @@ -6856,6 +7282,7 @@ class AsyncRawSkyvern: }, headers={ "content-type": "application/json", + "x-user-agent": str(user_agent) if user_agent is not None else None, }, request_options=request_options, omit=OMIT, diff --git a/skyvern/client/server/__init__.py b/skyvern/client/server/__init__.py new file mode 100644 index 000000000..5cde0202d --- /dev/null +++ b/skyvern/client/server/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/skyvern/client/server/client.py b/skyvern/client/server/client.py new file mode 100644 index 000000000..35ccce241 --- /dev/null +++ b/skyvern/client/server/client.py @@ -0,0 +1,99 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from .raw_client import AsyncRawServerClient, RawServerClient + + +class ServerClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawServerClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawServerClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawServerClient + """ + return self._raw_client + + def get_version(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Dict[str, str]: + """ + Returns the current Skyvern server version (git SHA for official builds). + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.Dict[str, str] + Current server version + + Examples + -------- + from skyvern import Skyvern + + client = Skyvern( + api_key="YOUR_API_KEY", + ) + client.server.get_version() + """ + _response = self._raw_client.get_version(request_options=request_options) + return _response.data + + +class AsyncServerClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawServerClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawServerClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawServerClient + """ + return self._raw_client + + async def get_version(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Dict[str, str]: + """ + Returns the current Skyvern server version (git SHA for official builds). + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.Dict[str, str] + Current server version + + Examples + -------- + import asyncio + + from skyvern import AsyncSkyvern + + client = AsyncSkyvern( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.server.get_version() + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_version(request_options=request_options) + return _response.data diff --git a/skyvern/client/server/raw_client.py b/skyvern/client/server/raw_client.py new file mode 100644 index 000000000..333e6a5ca --- /dev/null +++ b/skyvern/client/server/raw_client.py @@ -0,0 +1,92 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions + + +class RawServerClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def get_version( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[typing.Dict[str, str]]: + """ + Returns the current Skyvern server version (git SHA for official builds). + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[typing.Dict[str, str]] + Current server version + """ + _response = self._client_wrapper.httpx_client.request( + "v1/version", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + typing.Dict[str, str], + parse_obj_as( + type_=typing.Dict[str, str], # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + +class AsyncRawServerClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def get_version( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[typing.Dict[str, str]]: + """ + Returns the current Skyvern server version (git SHA for official builds). + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[typing.Dict[str, str]] + Current server version + """ + _response = await self._client_wrapper.httpx_client.request( + "v1/version", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + typing.Dict[str, str], + parse_obj_as( + type_=typing.Dict[str, str], # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/skyvern/client/types/__init__.py b/skyvern/client/types/__init__.py index 38799a4df..2a7111109 100644 --- a/skyvern/client/types/__init__.py +++ b/skyvern/client/types/__init__.py @@ -26,6 +26,7 @@ if typing.TYPE_CHECKING: ActionBlockParametersItem_Workflow, ) from .action_block_yaml import ActionBlockYaml + from .action_output import ActionOutput from .action_status import ActionStatus from .action_type import ActionType from .artifact import Artifact @@ -53,6 +54,7 @@ if typing.TYPE_CHECKING: from .branch_criteria_yaml_criteria_type import BranchCriteriaYamlCriteriaType from .browser_profile import BrowserProfile from .browser_session_response import BrowserSessionResponse + from .bulk_cancel_runs_response import BulkCancelRunsResponse from .click_action import ClickAction from .click_action_data import ClickActionData from .click_context import ClickContext @@ -91,6 +93,7 @@ if typing.TYPE_CHECKING: ) from .context_parameter_value import ContextParameterValue from .context_parameter_yaml import ContextParameterYaml + from .create_browser_session_request_proxy_location import CreateBrowserSessionRequestProxyLocation from .create_credential_request import CreateCredentialRequest from .create_credential_request_credential import CreateCredentialRequestCredential from .create_script_response import CreateScriptResponse @@ -166,6 +169,8 @@ if typing.TYPE_CHECKING: ForLoopBlockLoopBlocksItem_FileUpload, ForLoopBlockLoopBlocksItem_FileUrlParser, ForLoopBlockLoopBlocksItem_ForLoop, + ForLoopBlockLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockLoopBlocksItem_GoogleSheetsWrite, ForLoopBlockLoopBlocksItem_GotoUrl, ForLoopBlockLoopBlocksItem_HttpRequest, ForLoopBlockLoopBlocksItem_HumanInteraction, @@ -210,6 +215,8 @@ if typing.TYPE_CHECKING: ForLoopBlockYamlLoopBlocksItem_FileUpload, ForLoopBlockYamlLoopBlocksItem_FileUrlParser, ForLoopBlockYamlLoopBlocksItem_ForLoop, + ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite, ForLoopBlockYamlLoopBlocksItem_GotoUrl, ForLoopBlockYamlLoopBlocksItem_HttpRequest, ForLoopBlockYamlLoopBlocksItem_HumanInteraction, @@ -236,7 +243,42 @@ if typing.TYPE_CHECKING: GetRunResponse_TaskV2, GetRunResponse_UiTars, GetRunResponse_WorkflowRun, + GetRunResponse_YutoriNavigator, ) + from .google_sheets_read_block import GoogleSheetsReadBlock + from .google_sheets_read_block_parameters_item import ( + GoogleSheetsReadBlockParametersItem, + GoogleSheetsReadBlockParametersItem_AwsSecret, + GoogleSheetsReadBlockParametersItem_AzureSecret, + GoogleSheetsReadBlockParametersItem_AzureVaultCredential, + GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData, + GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential, + GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation, + GoogleSheetsReadBlockParametersItem_Context, + GoogleSheetsReadBlockParametersItem_Credential, + GoogleSheetsReadBlockParametersItem_Onepassword, + GoogleSheetsReadBlockParametersItem_Output, + GoogleSheetsReadBlockParametersItem_Workflow, + ) + from .google_sheets_read_block_yaml import GoogleSheetsReadBlockYaml + from .google_sheets_write_block import GoogleSheetsWriteBlock + from .google_sheets_write_block_parameters_item import ( + GoogleSheetsWriteBlockParametersItem, + GoogleSheetsWriteBlockParametersItem_AwsSecret, + GoogleSheetsWriteBlockParametersItem_AzureSecret, + GoogleSheetsWriteBlockParametersItem_AzureVaultCredential, + GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData, + GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential, + GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation, + GoogleSheetsWriteBlockParametersItem_Context, + GoogleSheetsWriteBlockParametersItem_Credential, + GoogleSheetsWriteBlockParametersItem_Onepassword, + GoogleSheetsWriteBlockParametersItem_Output, + GoogleSheetsWriteBlockParametersItem_Workflow, + ) + from .google_sheets_write_block_write_mode import GoogleSheetsWriteBlockWriteMode + from .google_sheets_write_block_yaml import GoogleSheetsWriteBlockYaml + from .google_sheets_write_block_yaml_write_mode import GoogleSheetsWriteBlockYamlWriteMode from .http_request_block import HttpRequestBlock from .http_request_block_parameters_item import ( HttpRequestBlockParametersItem, @@ -359,6 +401,7 @@ if typing.TYPE_CHECKING: ) from .run_sdk_action_response import RunSdkActionResponse from .run_status import RunStatus + from .run_webhook_replay_response import RunWebhookReplayResponse from .script import Script from .script_file_create import ScriptFileCreate from .script_run_response import ScriptRunResponse @@ -370,7 +413,7 @@ if typing.TYPE_CHECKING: from .send_email_block import SendEmailBlock from .send_email_block_yaml import SendEmailBlockYaml from .skyvern_forge_sdk_schemas_credentials_credential_type import SkyvernForgeSdkSchemasCredentialsCredentialType - from .skyvern_schemas_run_blocks_credential_type import SkyvernSchemasRunBlocksCredentialType + from .skyvern_schemas_credential_type_credential_type import SkyvernSchemasCredentialTypeCredentialType from .task_block import TaskBlock from .task_block_data_schema import TaskBlockDataSchema from .task_block_parameters_item import ( @@ -390,9 +433,11 @@ if typing.TYPE_CHECKING: from .task_block_yaml import TaskBlockYaml from .task_block_yaml_data_schema import TaskBlockYamlDataSchema from .task_run_list_item import TaskRunListItem - from .task_run_request import TaskRunRequest - from .task_run_request_data_extraction_schema import TaskRunRequestDataExtractionSchema - from .task_run_request_proxy_location import TaskRunRequestProxyLocation + from .task_run_request_input_data_extraction_schema import TaskRunRequestInputDataExtractionSchema + from .task_run_request_input_proxy_location import TaskRunRequestInputProxyLocation + from .task_run_request_output import TaskRunRequestOutput + from .task_run_request_output_data_extraction_schema import TaskRunRequestOutputDataExtractionSchema + from .task_run_request_output_proxy_location import TaskRunRequestOutputProxyLocation from .task_run_response import TaskRunResponse from .task_run_response_output import TaskRunResponseOutput from .task_v2block import TaskV2Block @@ -494,6 +539,8 @@ if typing.TYPE_CHECKING: WhileLoopBlockLoopBlocksItem_FileUpload, WhileLoopBlockLoopBlocksItem_FileUrlParser, WhileLoopBlockLoopBlocksItem_ForLoop, + WhileLoopBlockLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite, WhileLoopBlockLoopBlocksItem_GotoUrl, WhileLoopBlockLoopBlocksItem_HttpRequest, WhileLoopBlockLoopBlocksItem_HumanInteraction, @@ -523,6 +570,8 @@ if typing.TYPE_CHECKING: WhileLoopBlockYamlLoopBlocksItem_FileUpload, WhileLoopBlockYamlLoopBlocksItem_FileUrlParser, WhileLoopBlockYamlLoopBlocksItem_ForLoop, + WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite, WhileLoopBlockYamlLoopBlocksItem_GotoUrl, WhileLoopBlockYamlLoopBlocksItem_HttpRequest, WhileLoopBlockYamlLoopBlocksItem_HumanInteraction, @@ -555,6 +604,8 @@ if typing.TYPE_CHECKING: WorkflowDefinitionBlocksItem_FileUpload, WorkflowDefinitionBlocksItem_FileUrlParser, WorkflowDefinitionBlocksItem_ForLoop, + WorkflowDefinitionBlocksItem_GoogleSheetsRead, + WorkflowDefinitionBlocksItem_GoogleSheetsWrite, WorkflowDefinitionBlocksItem_GotoUrl, WorkflowDefinitionBlocksItem_HttpRequest, WorkflowDefinitionBlocksItem_HumanInteraction, @@ -598,6 +649,8 @@ if typing.TYPE_CHECKING: WorkflowDefinitionYamlBlocksItem_FileUpload, WorkflowDefinitionYamlBlocksItem_FileUrlParser, WorkflowDefinitionYamlBlocksItem_ForLoop, + WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead, + WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite, WorkflowDefinitionYamlBlocksItem_GotoUrl, WorkflowDefinitionYamlBlocksItem_HttpRequest, WorkflowDefinitionYamlBlocksItem_HumanInteraction, @@ -641,8 +694,9 @@ if typing.TYPE_CHECKING: from .workflow_run_block_navigation_payload import WorkflowRunBlockNavigationPayload from .workflow_run_block_output import WorkflowRunBlockOutput from .workflow_run_proxy_location import WorkflowRunProxyLocation - from .workflow_run_request import WorkflowRunRequest - from .workflow_run_request_proxy_location import WorkflowRunRequestProxyLocation + from .workflow_run_request_input_proxy_location import WorkflowRunRequestInputProxyLocation + from .workflow_run_request_output import WorkflowRunRequestOutput + from .workflow_run_request_output_proxy_location import WorkflowRunRequestOutputProxyLocation from .workflow_run_response import WorkflowRunResponse from .workflow_run_response_output import WorkflowRunResponseOutput from .workflow_run_status import WorkflowRunStatus @@ -689,6 +743,7 @@ _dynamic_imports: typing.Dict[str, str] = { "ActionBlockParametersItem_Output": ".action_block_parameters_item", "ActionBlockParametersItem_Workflow": ".action_block_parameters_item", "ActionBlockYaml": ".action_block_yaml", + "ActionOutput": ".action_output", "ActionStatus": ".action_status", "ActionType": ".action_type", "Artifact": ".artifact", @@ -714,6 +769,7 @@ _dynamic_imports: typing.Dict[str, str] = { "BranchCriteriaYamlCriteriaType": ".branch_criteria_yaml_criteria_type", "BrowserProfile": ".browser_profile", "BrowserSessionResponse": ".browser_session_response", + "BulkCancelRunsResponse": ".bulk_cancel_runs_response", "ClickAction": ".click_action", "ClickActionData": ".click_action_data", "ClickContext": ".click_context", @@ -748,6 +804,7 @@ _dynamic_imports: typing.Dict[str, str] = { "ContextParameterSource_Workflow": ".context_parameter_source", "ContextParameterValue": ".context_parameter_value", "ContextParameterYaml": ".context_parameter_yaml", + "CreateBrowserSessionRequestProxyLocation": ".create_browser_session_request_proxy_location", "CreateCredentialRequest": ".create_credential_request", "CreateCredentialRequestCredential": ".create_credential_request_credential", "CreateScriptResponse": ".create_script_response", @@ -818,6 +875,8 @@ _dynamic_imports: typing.Dict[str, str] = { "ForLoopBlockLoopBlocksItem_FileUpload": ".for_loop_block_loop_blocks_item", "ForLoopBlockLoopBlocksItem_FileUrlParser": ".for_loop_block_loop_blocks_item", "ForLoopBlockLoopBlocksItem_ForLoop": ".for_loop_block_loop_blocks_item", + "ForLoopBlockLoopBlocksItem_GoogleSheetsRead": ".for_loop_block_loop_blocks_item", + "ForLoopBlockLoopBlocksItem_GoogleSheetsWrite": ".for_loop_block_loop_blocks_item", "ForLoopBlockLoopBlocksItem_GotoUrl": ".for_loop_block_loop_blocks_item", "ForLoopBlockLoopBlocksItem_HttpRequest": ".for_loop_block_loop_blocks_item", "ForLoopBlockLoopBlocksItem_HumanInteraction": ".for_loop_block_loop_blocks_item", @@ -858,6 +917,8 @@ _dynamic_imports: typing.Dict[str, str] = { "ForLoopBlockYamlLoopBlocksItem_FileUpload": ".for_loop_block_yaml_loop_blocks_item", "ForLoopBlockYamlLoopBlocksItem_FileUrlParser": ".for_loop_block_yaml_loop_blocks_item", "ForLoopBlockYamlLoopBlocksItem_ForLoop": ".for_loop_block_yaml_loop_blocks_item", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead": ".for_loop_block_yaml_loop_blocks_item", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite": ".for_loop_block_yaml_loop_blocks_item", "ForLoopBlockYamlLoopBlocksItem_GotoUrl": ".for_loop_block_yaml_loop_blocks_item", "ForLoopBlockYamlLoopBlocksItem_HttpRequest": ".for_loop_block_yaml_loop_blocks_item", "ForLoopBlockYamlLoopBlocksItem_HumanInteraction": ".for_loop_block_yaml_loop_blocks_item", @@ -882,6 +943,37 @@ _dynamic_imports: typing.Dict[str, str] = { "GetRunResponse_TaskV2": ".get_run_response", "GetRunResponse_UiTars": ".get_run_response", "GetRunResponse_WorkflowRun": ".get_run_response", + "GetRunResponse_YutoriNavigator": ".get_run_response", + "GoogleSheetsReadBlock": ".google_sheets_read_block", + "GoogleSheetsReadBlockParametersItem": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_AwsSecret": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_AzureSecret": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_AzureVaultCredential": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_Context": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_Credential": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_Onepassword": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_Output": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockParametersItem_Workflow": ".google_sheets_read_block_parameters_item", + "GoogleSheetsReadBlockYaml": ".google_sheets_read_block_yaml", + "GoogleSheetsWriteBlock": ".google_sheets_write_block", + "GoogleSheetsWriteBlockParametersItem": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_AwsSecret": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_AzureSecret": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_AzureVaultCredential": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_Context": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_Credential": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_Onepassword": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_Output": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockParametersItem_Workflow": ".google_sheets_write_block_parameters_item", + "GoogleSheetsWriteBlockWriteMode": ".google_sheets_write_block_write_mode", + "GoogleSheetsWriteBlockYaml": ".google_sheets_write_block_yaml", + "GoogleSheetsWriteBlockYamlWriteMode": ".google_sheets_write_block_yaml_write_mode", "HttpRequestBlock": ".http_request_block", "HttpRequestBlockParametersItem": ".http_request_block_parameters_item", "HttpRequestBlockParametersItem_AwsSecret": ".http_request_block_parameters_item", @@ -992,6 +1084,7 @@ _dynamic_imports: typing.Dict[str, str] = { "RunSdkActionRequestAction_Validate": ".run_sdk_action_request_action", "RunSdkActionResponse": ".run_sdk_action_response", "RunStatus": ".run_status", + "RunWebhookReplayResponse": ".run_webhook_replay_response", "Script": ".script", "ScriptFileCreate": ".script_file_create", "ScriptRunResponse": ".script_run_response", @@ -1003,7 +1096,7 @@ _dynamic_imports: typing.Dict[str, str] = { "SendEmailBlock": ".send_email_block", "SendEmailBlockYaml": ".send_email_block_yaml", "SkyvernForgeSdkSchemasCredentialsCredentialType": ".skyvern_forge_sdk_schemas_credentials_credential_type", - "SkyvernSchemasRunBlocksCredentialType": ".skyvern_schemas_run_blocks_credential_type", + "SkyvernSchemasCredentialTypeCredentialType": ".skyvern_schemas_credential_type_credential_type", "TaskBlock": ".task_block", "TaskBlockDataSchema": ".task_block_data_schema", "TaskBlockParametersItem": ".task_block_parameters_item", @@ -1021,9 +1114,11 @@ _dynamic_imports: typing.Dict[str, str] = { "TaskBlockYaml": ".task_block_yaml", "TaskBlockYamlDataSchema": ".task_block_yaml_data_schema", "TaskRunListItem": ".task_run_list_item", - "TaskRunRequest": ".task_run_request", - "TaskRunRequestDataExtractionSchema": ".task_run_request_data_extraction_schema", - "TaskRunRequestProxyLocation": ".task_run_request_proxy_location", + "TaskRunRequestInputDataExtractionSchema": ".task_run_request_input_data_extraction_schema", + "TaskRunRequestInputProxyLocation": ".task_run_request_input_proxy_location", + "TaskRunRequestOutput": ".task_run_request_output", + "TaskRunRequestOutputDataExtractionSchema": ".task_run_request_output_data_extraction_schema", + "TaskRunRequestOutputProxyLocation": ".task_run_request_output_proxy_location", "TaskRunResponse": ".task_run_response", "TaskRunResponseOutput": ".task_run_response_output", "TaskV2Block": ".task_v2block", @@ -1114,6 +1209,8 @@ _dynamic_imports: typing.Dict[str, str] = { "WhileLoopBlockLoopBlocksItem_FileUpload": ".while_loop_block_loop_blocks_item", "WhileLoopBlockLoopBlocksItem_FileUrlParser": ".while_loop_block_loop_blocks_item", "WhileLoopBlockLoopBlocksItem_ForLoop": ".while_loop_block_loop_blocks_item", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsRead": ".while_loop_block_loop_blocks_item", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite": ".while_loop_block_loop_blocks_item", "WhileLoopBlockLoopBlocksItem_GotoUrl": ".while_loop_block_loop_blocks_item", "WhileLoopBlockLoopBlocksItem_HttpRequest": ".while_loop_block_loop_blocks_item", "WhileLoopBlockLoopBlocksItem_HumanInteraction": ".while_loop_block_loop_blocks_item", @@ -1141,6 +1238,8 @@ _dynamic_imports: typing.Dict[str, str] = { "WhileLoopBlockYamlLoopBlocksItem_FileUpload": ".while_loop_block_yaml_loop_blocks_item", "WhileLoopBlockYamlLoopBlocksItem_FileUrlParser": ".while_loop_block_yaml_loop_blocks_item", "WhileLoopBlockYamlLoopBlocksItem_ForLoop": ".while_loop_block_yaml_loop_blocks_item", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead": ".while_loop_block_yaml_loop_blocks_item", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite": ".while_loop_block_yaml_loop_blocks_item", "WhileLoopBlockYamlLoopBlocksItem_GotoUrl": ".while_loop_block_yaml_loop_blocks_item", "WhileLoopBlockYamlLoopBlocksItem_HttpRequest": ".while_loop_block_yaml_loop_blocks_item", "WhileLoopBlockYamlLoopBlocksItem_HumanInteraction": ".while_loop_block_yaml_loop_blocks_item", @@ -1171,6 +1270,8 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowDefinitionBlocksItem_FileUpload": ".workflow_definition_blocks_item", "WorkflowDefinitionBlocksItem_FileUrlParser": ".workflow_definition_blocks_item", "WorkflowDefinitionBlocksItem_ForLoop": ".workflow_definition_blocks_item", + "WorkflowDefinitionBlocksItem_GoogleSheetsRead": ".workflow_definition_blocks_item", + "WorkflowDefinitionBlocksItem_GoogleSheetsWrite": ".workflow_definition_blocks_item", "WorkflowDefinitionBlocksItem_GotoUrl": ".workflow_definition_blocks_item", "WorkflowDefinitionBlocksItem_HttpRequest": ".workflow_definition_blocks_item", "WorkflowDefinitionBlocksItem_HumanInteraction": ".workflow_definition_blocks_item", @@ -1210,6 +1311,8 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowDefinitionYamlBlocksItem_FileUpload": ".workflow_definition_yaml_blocks_item", "WorkflowDefinitionYamlBlocksItem_FileUrlParser": ".workflow_definition_yaml_blocks_item", "WorkflowDefinitionYamlBlocksItem_ForLoop": ".workflow_definition_yaml_blocks_item", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead": ".workflow_definition_yaml_blocks_item", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite": ".workflow_definition_yaml_blocks_item", "WorkflowDefinitionYamlBlocksItem_GotoUrl": ".workflow_definition_yaml_blocks_item", "WorkflowDefinitionYamlBlocksItem_HttpRequest": ".workflow_definition_yaml_blocks_item", "WorkflowDefinitionYamlBlocksItem_HumanInteraction": ".workflow_definition_yaml_blocks_item", @@ -1250,8 +1353,9 @@ _dynamic_imports: typing.Dict[str, str] = { "WorkflowRunBlockNavigationPayload": ".workflow_run_block_navigation_payload", "WorkflowRunBlockOutput": ".workflow_run_block_output", "WorkflowRunProxyLocation": ".workflow_run_proxy_location", - "WorkflowRunRequest": ".workflow_run_request", - "WorkflowRunRequestProxyLocation": ".workflow_run_request_proxy_location", + "WorkflowRunRequestInputProxyLocation": ".workflow_run_request_input_proxy_location", + "WorkflowRunRequestOutput": ".workflow_run_request_output", + "WorkflowRunRequestOutputProxyLocation": ".workflow_run_request_output_proxy_location", "WorkflowRunResponse": ".workflow_run_response", "WorkflowRunResponseOutput": ".workflow_run_response_output", "WorkflowRunStatus": ".workflow_run_status", @@ -1320,6 +1424,7 @@ __all__ = [ "ActionBlockParametersItem_Output", "ActionBlockParametersItem_Workflow", "ActionBlockYaml", + "ActionOutput", "ActionStatus", "ActionType", "Artifact", @@ -1345,6 +1450,7 @@ __all__ = [ "BranchCriteriaYamlCriteriaType", "BrowserProfile", "BrowserSessionResponse", + "BulkCancelRunsResponse", "ClickAction", "ClickActionData", "ClickContext", @@ -1379,6 +1485,7 @@ __all__ = [ "ContextParameterSource_Workflow", "ContextParameterValue", "ContextParameterYaml", + "CreateBrowserSessionRequestProxyLocation", "CreateCredentialRequest", "CreateCredentialRequestCredential", "CreateScriptResponse", @@ -1449,6 +1556,8 @@ __all__ = [ "ForLoopBlockLoopBlocksItem_FileUpload", "ForLoopBlockLoopBlocksItem_FileUrlParser", "ForLoopBlockLoopBlocksItem_ForLoop", + "ForLoopBlockLoopBlocksItem_GoogleSheetsRead", + "ForLoopBlockLoopBlocksItem_GoogleSheetsWrite", "ForLoopBlockLoopBlocksItem_GotoUrl", "ForLoopBlockLoopBlocksItem_HttpRequest", "ForLoopBlockLoopBlocksItem_HumanInteraction", @@ -1489,6 +1598,8 @@ __all__ = [ "ForLoopBlockYamlLoopBlocksItem_FileUpload", "ForLoopBlockYamlLoopBlocksItem_FileUrlParser", "ForLoopBlockYamlLoopBlocksItem_ForLoop", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead", + "ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite", "ForLoopBlockYamlLoopBlocksItem_GotoUrl", "ForLoopBlockYamlLoopBlocksItem_HttpRequest", "ForLoopBlockYamlLoopBlocksItem_HumanInteraction", @@ -1513,6 +1624,37 @@ __all__ = [ "GetRunResponse_TaskV2", "GetRunResponse_UiTars", "GetRunResponse_WorkflowRun", + "GetRunResponse_YutoriNavigator", + "GoogleSheetsReadBlock", + "GoogleSheetsReadBlockParametersItem", + "GoogleSheetsReadBlockParametersItem_AwsSecret", + "GoogleSheetsReadBlockParametersItem_AzureSecret", + "GoogleSheetsReadBlockParametersItem_AzureVaultCredential", + "GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData", + "GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential", + "GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation", + "GoogleSheetsReadBlockParametersItem_Context", + "GoogleSheetsReadBlockParametersItem_Credential", + "GoogleSheetsReadBlockParametersItem_Onepassword", + "GoogleSheetsReadBlockParametersItem_Output", + "GoogleSheetsReadBlockParametersItem_Workflow", + "GoogleSheetsReadBlockYaml", + "GoogleSheetsWriteBlock", + "GoogleSheetsWriteBlockParametersItem", + "GoogleSheetsWriteBlockParametersItem_AwsSecret", + "GoogleSheetsWriteBlockParametersItem_AzureSecret", + "GoogleSheetsWriteBlockParametersItem_AzureVaultCredential", + "GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData", + "GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential", + "GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation", + "GoogleSheetsWriteBlockParametersItem_Context", + "GoogleSheetsWriteBlockParametersItem_Credential", + "GoogleSheetsWriteBlockParametersItem_Onepassword", + "GoogleSheetsWriteBlockParametersItem_Output", + "GoogleSheetsWriteBlockParametersItem_Workflow", + "GoogleSheetsWriteBlockWriteMode", + "GoogleSheetsWriteBlockYaml", + "GoogleSheetsWriteBlockYamlWriteMode", "HttpRequestBlock", "HttpRequestBlockParametersItem", "HttpRequestBlockParametersItem_AwsSecret", @@ -1623,6 +1765,7 @@ __all__ = [ "RunSdkActionRequestAction_Validate", "RunSdkActionResponse", "RunStatus", + "RunWebhookReplayResponse", "Script", "ScriptFileCreate", "ScriptRunResponse", @@ -1634,7 +1777,7 @@ __all__ = [ "SendEmailBlock", "SendEmailBlockYaml", "SkyvernForgeSdkSchemasCredentialsCredentialType", - "SkyvernSchemasRunBlocksCredentialType", + "SkyvernSchemasCredentialTypeCredentialType", "TaskBlock", "TaskBlockDataSchema", "TaskBlockParametersItem", @@ -1652,9 +1795,11 @@ __all__ = [ "TaskBlockYaml", "TaskBlockYamlDataSchema", "TaskRunListItem", - "TaskRunRequest", - "TaskRunRequestDataExtractionSchema", - "TaskRunRequestProxyLocation", + "TaskRunRequestInputDataExtractionSchema", + "TaskRunRequestInputProxyLocation", + "TaskRunRequestOutput", + "TaskRunRequestOutputDataExtractionSchema", + "TaskRunRequestOutputProxyLocation", "TaskRunResponse", "TaskRunResponseOutput", "TaskV2Block", @@ -1745,6 +1890,8 @@ __all__ = [ "WhileLoopBlockLoopBlocksItem_FileUpload", "WhileLoopBlockLoopBlocksItem_FileUrlParser", "WhileLoopBlockLoopBlocksItem_ForLoop", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsRead", + "WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite", "WhileLoopBlockLoopBlocksItem_GotoUrl", "WhileLoopBlockLoopBlocksItem_HttpRequest", "WhileLoopBlockLoopBlocksItem_HumanInteraction", @@ -1772,6 +1919,8 @@ __all__ = [ "WhileLoopBlockYamlLoopBlocksItem_FileUpload", "WhileLoopBlockYamlLoopBlocksItem_FileUrlParser", "WhileLoopBlockYamlLoopBlocksItem_ForLoop", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead", + "WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite", "WhileLoopBlockYamlLoopBlocksItem_GotoUrl", "WhileLoopBlockYamlLoopBlocksItem_HttpRequest", "WhileLoopBlockYamlLoopBlocksItem_HumanInteraction", @@ -1802,6 +1951,8 @@ __all__ = [ "WorkflowDefinitionBlocksItem_FileUpload", "WorkflowDefinitionBlocksItem_FileUrlParser", "WorkflowDefinitionBlocksItem_ForLoop", + "WorkflowDefinitionBlocksItem_GoogleSheetsRead", + "WorkflowDefinitionBlocksItem_GoogleSheetsWrite", "WorkflowDefinitionBlocksItem_GotoUrl", "WorkflowDefinitionBlocksItem_HttpRequest", "WorkflowDefinitionBlocksItem_HumanInteraction", @@ -1841,6 +1992,8 @@ __all__ = [ "WorkflowDefinitionYamlBlocksItem_FileUpload", "WorkflowDefinitionYamlBlocksItem_FileUrlParser", "WorkflowDefinitionYamlBlocksItem_ForLoop", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead", + "WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite", "WorkflowDefinitionYamlBlocksItem_GotoUrl", "WorkflowDefinitionYamlBlocksItem_HttpRequest", "WorkflowDefinitionYamlBlocksItem_HumanInteraction", @@ -1881,8 +2034,9 @@ __all__ = [ "WorkflowRunBlockNavigationPayload", "WorkflowRunBlockOutput", "WorkflowRunProxyLocation", - "WorkflowRunRequest", - "WorkflowRunRequestProxyLocation", + "WorkflowRunRequestInputProxyLocation", + "WorkflowRunRequestOutput", + "WorkflowRunRequestOutputProxyLocation", "WorkflowRunResponse", "WorkflowRunResponseOutput", "WorkflowRunStatus", diff --git a/skyvern/client/types/action.py b/skyvern/client/types/action.py index 1611652eb..9a95043af 100644 --- a/skyvern/client/types/action.py +++ b/skyvern/client/types/action.py @@ -5,6 +5,7 @@ import typing import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .action_output import ActionOutput from .action_status import ActionStatus from .action_type import ActionType from .click_context import ClickContext @@ -36,7 +37,9 @@ class Action(UniversalBaseModel): tool_call_id: typing.Optional[str] = None xpath: typing.Optional[str] = None errors: typing.Optional[typing.List[UserDefinedError]] = None + terminal_user_errors: typing.Optional[bool] = None data_extraction_goal: typing.Optional[str] = None + output: typing.Optional[ActionOutput] = None file_name: typing.Optional[str] = None file_url: typing.Optional[str] = None download: typing.Optional[bool] = None diff --git a/skyvern/client/types/action_block.py b/skyvern/client/types/action_block.py index 139876d8c..aa9b30d0a 100644 --- a/skyvern/client/types/action_block.py +++ b/skyvern/client/types/action_block.py @@ -27,6 +27,7 @@ class ActionBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class ActionBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/action_block_yaml.py b/skyvern/client/types/action_block_yaml.py index 1e0d31456..dd3abd85c 100644 --- a/skyvern/client/types/action_block_yaml.py +++ b/skyvern/client/types/action_block_yaml.py @@ -20,6 +20,7 @@ class ActionBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None diff --git a/skyvern/client/types/task_run_request_data_extraction_schema.py b/skyvern/client/types/action_output.py similarity index 77% rename from skyvern/client/types/task_run_request_data_extraction_schema.py rename to skyvern/client/types/action_output.py index d315a4c22..07f0cbc26 100644 --- a/skyvern/client/types/task_run_request_data_extraction_schema.py +++ b/skyvern/client/types/action_output.py @@ -2,6 +2,6 @@ import typing -TaskRunRequestDataExtractionSchema = typing.Union[ +ActionOutput = typing.Union[ typing.Dict[str, typing.Optional[typing.Any]], typing.List[typing.Optional[typing.Any]], str ] diff --git a/skyvern/client/types/action_type.py b/skyvern/client/types/action_type.py index 1a37282c9..7fe706d12 100644 --- a/skyvern/client/types/action_type.py +++ b/skyvern/client/types/action_type.py @@ -21,11 +21,14 @@ ActionType = typing.Union[ "extract", "verification_code", "goto_url", + "go_back", + "go_forward", "scroll", "keypress", "move", "drag", "left_mouse", + "execute_js", ], typing.Any, ] diff --git a/skyvern/client/types/artifact.py b/skyvern/client/types/artifact.py index 55481168b..f34d6e66c 100644 --- a/skyvern/client/types/artifact.py +++ b/skyvern/client/types/artifact.py @@ -22,15 +22,19 @@ class Artifact(UniversalBaseModel): artifact_type: ArtifactType uri: str bundle_key: typing.Optional[str] = None + checksum: typing.Optional[str] = None + file_size: typing.Optional[int] = None task_id: typing.Optional[str] = None step_id: typing.Optional[str] = None workflow_run_id: typing.Optional[str] = None workflow_run_block_id: typing.Optional[str] = None run_id: typing.Optional[str] = None + browser_session_id: typing.Optional[str] = None observer_cruise_id: typing.Optional[str] = None observer_thought_id: typing.Optional[str] = None ai_suggestion_id: typing.Optional[str] = None signed_url: typing.Optional[str] = None + archived: typing.Optional[bool] = None organization_id: str if IS_PYDANTIC_V2: diff --git a/skyvern/client/types/artifact_type.py b/skyvern/client/types/artifact_type.py index 781381086..c9e599864 100644 --- a/skyvern/client/types/artifact_type.py +++ b/skyvern/client/types/artifact_type.py @@ -33,6 +33,7 @@ ArtifactType = typing.Union[ "pdf", "step_archive", "task_archive", + "download", ], typing.Any, ] diff --git a/skyvern/client/types/block_type.py b/skyvern/client/types/block_type.py index 18d6f30cc..8aacc37a1 100644 --- a/skyvern/client/types/block_type.py +++ b/skyvern/client/types/block_type.py @@ -29,6 +29,8 @@ BlockType = typing.Union[ "human_interaction", "print_page", "workflow_trigger", + "google_sheets_read", + "google_sheets_write", ], typing.Any, ] diff --git a/skyvern/client/types/browser_profile.py b/skyvern/client/types/browser_profile.py index cce682751..3e9bc7e39 100644 --- a/skyvern/client/types/browser_profile.py +++ b/skyvern/client/types/browser_profile.py @@ -12,6 +12,7 @@ class BrowserProfile(UniversalBaseModel): organization_id: str name: str description: typing.Optional[str] = None + source_browser_type: typing.Optional[str] = None created_at: dt.datetime modified_at: dt.datetime deleted_at: typing.Optional[dt.datetime] = None diff --git a/skyvern/client/types/bulk_cancel_runs_response.py b/skyvern/client/types/bulk_cancel_runs_response.py new file mode 100644 index 000000000..bd80ca4e3 --- /dev/null +++ b/skyvern/client/types/bulk_cancel_runs_response.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class BulkCancelRunsResponse(UniversalBaseModel): + cancelled: typing.List[str] = pydantic.Field() + """ + Run IDs that were successfully cancelled + """ + + failed: typing.List[str] = pydantic.Field() + """ + Run IDs that could not be cancelled + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/skyvern/client/types/code_block.py b/skyvern/client/types/code_block.py index 0615ccb5d..ca9857bb6 100644 --- a/skyvern/client/types/code_block.py +++ b/skyvern/client/types/code_block.py @@ -25,6 +25,7 @@ class CodeBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameters: typing.Optional[typing.List[CodeBlockParametersItem]] = None diff --git a/skyvern/client/types/code_block_yaml.py b/skyvern/client/types/code_block_yaml.py index 1860b5e19..0cea41310 100644 --- a/skyvern/client/types/code_block_yaml.py +++ b/skyvern/client/types/code_block_yaml.py @@ -19,6 +19,7 @@ class CodeBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameter_keys: typing.Optional[typing.List[str]] = None diff --git a/skyvern/client/types/conditional_block.py b/skyvern/client/types/conditional_block.py index 4d663e9b1..77b62b8d2 100644 --- a/skyvern/client/types/conditional_block.py +++ b/skyvern/client/types/conditional_block.py @@ -27,6 +27,7 @@ class ConditionalBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchCondition]] = None diff --git a/skyvern/client/types/conditional_block_yaml.py b/skyvern/client/types/conditional_block_yaml.py index 95caaae49..934eaaf35 100644 --- a/skyvern/client/types/conditional_block_yaml.py +++ b/skyvern/client/types/conditional_block_yaml.py @@ -20,6 +20,7 @@ class ConditionalBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchConditionYaml]] = None diff --git a/skyvern/client/types/create_browser_session_request_proxy_location.py b/skyvern/client/types/create_browser_session_request_proxy_location.py new file mode 100644 index 000000000..1324c3528 --- /dev/null +++ b/skyvern/client/types/create_browser_session_request_proxy_location.py @@ -0,0 +1,10 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from .geo_target import GeoTarget +from .proxy_location import ProxyLocation + +CreateBrowserSessionRequestProxyLocation = typing.Union[ + ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]] +] diff --git a/skyvern/client/types/download_to_s3block.py b/skyvern/client/types/download_to_s3block.py index 5b0a74ba5..82d7adbbf 100644 --- a/skyvern/client/types/download_to_s3block.py +++ b/skyvern/client/types/download_to_s3block.py @@ -22,6 +22,7 @@ class DownloadToS3Block(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str diff --git a/skyvern/client/types/download_to_s3block_yaml.py b/skyvern/client/types/download_to_s3block_yaml.py index 8b8335772..ae9e05454 100644 --- a/skyvern/client/types/download_to_s3block_yaml.py +++ b/skyvern/client/types/download_to_s3block_yaml.py @@ -19,6 +19,7 @@ class DownloadToS3BlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str diff --git a/skyvern/client/types/extraction_block.py b/skyvern/client/types/extraction_block.py index 1405ec78d..adb7accd1 100644 --- a/skyvern/client/types/extraction_block.py +++ b/skyvern/client/types/extraction_block.py @@ -27,6 +27,7 @@ class ExtractionBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class ExtractionBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/extraction_block_yaml.py b/skyvern/client/types/extraction_block_yaml.py index 3e98e42b7..869ed755c 100644 --- a/skyvern/client/types/extraction_block_yaml.py +++ b/skyvern/client/types/extraction_block_yaml.py @@ -21,6 +21,7 @@ class ExtractionBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None data_extraction_goal: str url: typing.Optional[str] = None diff --git a/skyvern/client/types/file_download_block.py b/skyvern/client/types/file_download_block.py index ae327e355..ea33b918f 100644 --- a/skyvern/client/types/file_download_block.py +++ b/skyvern/client/types/file_download_block.py @@ -27,6 +27,7 @@ class FileDownloadBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class FileDownloadBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/file_download_block_yaml.py b/skyvern/client/types/file_download_block_yaml.py index 3c2a6b914..0341cc7d7 100644 --- a/skyvern/client/types/file_download_block_yaml.py +++ b/skyvern/client/types/file_download_block_yaml.py @@ -20,6 +20,7 @@ class FileDownloadBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None diff --git a/skyvern/client/types/file_info.py b/skyvern/client/types/file_info.py index 6495fad8a..c693138f2 100644 --- a/skyvern/client/types/file_info.py +++ b/skyvern/client/types/file_info.py @@ -27,11 +27,21 @@ class FileInfo(UniversalBaseModel): Original filename """ + file_size: typing.Optional[int] = pydantic.Field(default=None) + """ + Size of the file in bytes + """ + modified_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) """ Modified time of the file """ + artifact_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Artifact row id for refresh-on-read + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/skyvern/client/types/file_parser_block.py b/skyvern/client/types/file_parser_block.py index e43bf501f..63e6afd34 100644 --- a/skyvern/client/types/file_parser_block.py +++ b/skyvern/client/types/file_parser_block.py @@ -23,6 +23,7 @@ class FileParserBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None diff --git a/skyvern/client/types/file_parser_block_yaml.py b/skyvern/client/types/file_parser_block_yaml.py index fea8c7a9c..66c8b55c0 100644 --- a/skyvern/client/types/file_parser_block_yaml.py +++ b/skyvern/client/types/file_parser_block_yaml.py @@ -20,9 +20,10 @@ class FileParserBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str - file_type: FileType + file_type: typing.Optional[FileType] = None json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None if IS_PYDANTIC_V2: diff --git a/skyvern/client/types/file_upload_block.py b/skyvern/client/types/file_upload_block.py index 521b93a23..540d093aa 100644 --- a/skyvern/client/types/file_upload_block.py +++ b/skyvern/client/types/file_upload_block.py @@ -25,6 +25,7 @@ class FileUploadBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None diff --git a/skyvern/client/types/file_upload_block_yaml.py b/skyvern/client/types/file_upload_block_yaml.py index 670bab192..d2976511b 100644 --- a/skyvern/client/types/file_upload_block_yaml.py +++ b/skyvern/client/types/file_upload_block_yaml.py @@ -22,6 +22,7 @@ class FileUploadBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None diff --git a/skyvern/client/types/for_loop_block.py b/skyvern/client/types/for_loop_block.py index 30c2f5cc1..c0a2300b1 100644 --- a/skyvern/client/types/for_loop_block.py +++ b/skyvern/client/types/for_loop_block.py @@ -26,6 +26,7 @@ class ForLoopBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"] loop_over: typing.Optional[ForLoopBlockLoopOver] = None @@ -44,6 +45,15 @@ class ForLoopBlock(UniversalBaseModel): from .context_parameter import ContextParameter # noqa: E402, F401, I001 -from .for_loop_block_loop_blocks_item import ForLoopBlockLoopBlocksItem # noqa: E402, F401, I001 + +# Manual patch: Fern v4.31.1 emits bottom-cross-imports that deadlock at module +# load (for_loop ↔ while_loop ↔ *_loop_blocks_item). Catch the mid-load +# ImportError; the symmetric *_loop_blocks_item module back-resolves once both +# unions are fully defined. Reapply on every regen — see fern_build_python_sdk.sh. +try: + from .while_loop_block import WhileLoopBlock # noqa: E402, F401, I001 + from .for_loop_block_loop_blocks_item import ForLoopBlockLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass update_forward_refs(ForLoopBlock) diff --git a/skyvern/client/types/for_loop_block_loop_blocks_item.py b/skyvern/client/types/for_loop_block_loop_blocks_item.py index 4d64a8050..af4e94f33 100644 --- a/skyvern/client/types/for_loop_block_loop_blocks_item.py +++ b/skyvern/client/types/for_loop_block_loop_blocks_item.py @@ -21,6 +21,9 @@ from .file_storage_type import FileStorageType from .file_type import FileType from .for_loop_block_data_schema import ForLoopBlockDataSchema from .for_loop_block_loop_over import ForLoopBlockLoopOver +from .google_sheets_read_block_parameters_item import GoogleSheetsReadBlockParametersItem +from .google_sheets_write_block_parameters_item import GoogleSheetsWriteBlockParametersItem +from .google_sheets_write_block_write_mode import GoogleSheetsWriteBlockWriteMode from .http_request_block_parameters_item import HttpRequestBlockParametersItem from .human_interaction_block_data_schema import HumanInteractionBlockDataSchema from .human_interaction_block_parameters_item import HumanInteractionBlockParametersItem @@ -51,6 +54,7 @@ class ForLoopBlockLoopBlocksItem_Action(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -72,6 +76,7 @@ class ForLoopBlockLoopBlocksItem_Action(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -91,6 +96,7 @@ class ForLoopBlockLoopBlocksItem_Code(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameters: typing.Optional[typing.List[CodeBlockParametersItem]] = None @@ -113,6 +119,7 @@ class ForLoopBlockLoopBlocksItem_Conditional(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchCondition]] = None @@ -134,6 +141,7 @@ class ForLoopBlockLoopBlocksItem_DownloadToS3(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -155,6 +163,7 @@ class ForLoopBlockLoopBlocksItem_Extraction(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -176,6 +185,7 @@ class ForLoopBlockLoopBlocksItem_Extraction(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -195,6 +205,7 @@ class ForLoopBlockLoopBlocksItem_FileDownload(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -216,6 +227,7 @@ class ForLoopBlockLoopBlocksItem_FileDownload(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -235,6 +247,7 @@ class ForLoopBlockLoopBlocksItem_FileUpload(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None @@ -264,6 +277,7 @@ class ForLoopBlockLoopBlocksItem_FileUrlParser(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None @@ -287,6 +301,7 @@ class ForLoopBlockLoopBlocksItem_ForLoop(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"] loop_over: typing.Optional[ForLoopBlockLoopOver] = None @@ -304,7 +319,61 @@ class ForLoopBlockLoopBlocksItem_ForLoop(UniversalBaseModel): extra = pydantic.Extra.allow -from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +class ForLoopBlockLoopBlocksItem_GoogleSheetsRead(UniversalBaseModel): + block_type: typing.Literal["google_sheets_read"] = "google_sheets_read" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsReadBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class ForLoopBlockLoopBlocksItem_GoogleSheetsWrite(UniversalBaseModel): + block_type: typing.Literal["google_sheets_write"] = "google_sheets_write" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsWriteBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow class ForLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel): @@ -315,6 +384,7 @@ class ForLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: str @@ -336,6 +406,7 @@ class ForLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -355,6 +426,7 @@ class ForLoopBlockLoopBlocksItem_HttpRequest(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None @@ -385,6 +457,7 @@ class ForLoopBlockLoopBlocksItem_HumanInteraction(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -406,6 +479,7 @@ class ForLoopBlockLoopBlocksItem_HumanInteraction(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None negative_descriptor: typing.Optional[str] = None @@ -433,6 +507,7 @@ class ForLoopBlockLoopBlocksItem_Login(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -454,6 +529,7 @@ class ForLoopBlockLoopBlocksItem_Login(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -473,6 +549,7 @@ class ForLoopBlockLoopBlocksItem_Navigation(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -494,6 +571,7 @@ class ForLoopBlockLoopBlocksItem_Navigation(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -513,6 +591,7 @@ class ForLoopBlockLoopBlocksItem_PdfParser(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -535,6 +614,7 @@ class ForLoopBlockLoopBlocksItem_PrintPage(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None @@ -561,6 +641,7 @@ class ForLoopBlockLoopBlocksItem_SendEmail(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host: AwsSecretParameter smtp_port: AwsSecretParameter @@ -590,6 +671,7 @@ class ForLoopBlockLoopBlocksItem_Task(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -611,6 +693,7 @@ class ForLoopBlockLoopBlocksItem_Task(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -630,6 +713,7 @@ class ForLoopBlockLoopBlocksItem_TaskV2(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None @@ -656,6 +740,7 @@ class ForLoopBlockLoopBlocksItem_TextPrompt(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str @@ -680,6 +765,7 @@ class ForLoopBlockLoopBlocksItem_UploadToS3(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None @@ -701,6 +787,7 @@ class ForLoopBlockLoopBlocksItem_Validation(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -722,6 +809,7 @@ class ForLoopBlockLoopBlocksItem_Validation(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -741,6 +829,7 @@ class ForLoopBlockLoopBlocksItem_Wait(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: int parameters: typing.Optional[typing.List[WaitBlockParametersItem]] = None @@ -755,32 +844,6 @@ class ForLoopBlockLoopBlocksItem_Wait(UniversalBaseModel): extra = pydantic.Extra.allow -class ForLoopBlockLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): - block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" - label: str - next_block_label: typing.Optional[str] = None - output_parameter: OutputParameter - continue_on_failure: typing.Optional[bool] = None - model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - disable_cache: typing.Optional[bool] = None - next_loop_on_failure: typing.Optional[bool] = None - workflow_permanent_id: str - payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - wait_for_completion: typing.Optional[bool] = None - browser_session_id: typing.Optional[str] = None - use_parent_browser_session: typing.Optional[bool] = None - parameters: typing.Optional[typing.List[WorkflowTriggerBlockParametersItem]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow - - class ForLoopBlockLoopBlocksItem_WhileLoop(UniversalBaseModel): block_type: typing.Literal["while_loop"] = "while_loop" label: str @@ -789,8 +852,9 @@ class ForLoopBlockLoopBlocksItem_WhileLoop(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"] + loop_blocks: typing.List["WhileLoopBlockLoopBlocksItem"] condition: WhileLoopBlockCondition if IS_PYDANTIC_V2: @@ -803,6 +867,37 @@ class ForLoopBlockLoopBlocksItem_WhileLoop(UniversalBaseModel): extra = pydantic.Extra.allow +from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +from .while_loop_block import WhileLoopBlock # noqa: E402, F401, I001 + + +class ForLoopBlockLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): + block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + workflow_permanent_id: str + payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + wait_for_completion: typing.Optional[bool] = None + browser_session_id: typing.Optional[str] = None + use_parent_browser_session: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[WorkflowTriggerBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + from .context_parameter import ContextParameter # noqa: E402, F401, I001 ForLoopBlockLoopBlocksItem = typing.Union[ @@ -815,6 +910,8 @@ ForLoopBlockLoopBlocksItem = typing.Union[ ForLoopBlockLoopBlocksItem_FileUpload, ForLoopBlockLoopBlocksItem_FileUrlParser, ForLoopBlockLoopBlocksItem_ForLoop, + ForLoopBlockLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockLoopBlocksItem_GoogleSheetsWrite, ForLoopBlockLoopBlocksItem_GotoUrl, ForLoopBlockLoopBlocksItem_HttpRequest, ForLoopBlockLoopBlocksItem_HumanInteraction, @@ -832,20 +929,69 @@ ForLoopBlockLoopBlocksItem = typing.Union[ ForLoopBlockLoopBlocksItem_WhileLoop, ForLoopBlockLoopBlocksItem_WorkflowTrigger, ] -update_forward_refs(ForLoopBlockLoopBlocksItem_Action) -update_forward_refs(ForLoopBlockLoopBlocksItem_Code) -update_forward_refs(ForLoopBlockLoopBlocksItem_Extraction) -update_forward_refs(ForLoopBlockLoopBlocksItem_FileDownload) -update_forward_refs(ForLoopBlockLoopBlocksItem_ForLoop) -update_forward_refs(ForLoopBlockLoopBlocksItem_GotoUrl) -update_forward_refs(ForLoopBlockLoopBlocksItem_HttpRequest) -update_forward_refs(ForLoopBlockLoopBlocksItem_HumanInteraction) -update_forward_refs(ForLoopBlockLoopBlocksItem_Login) -update_forward_refs(ForLoopBlockLoopBlocksItem_Navigation) -update_forward_refs(ForLoopBlockLoopBlocksItem_PrintPage) -update_forward_refs(ForLoopBlockLoopBlocksItem_Task) -update_forward_refs(ForLoopBlockLoopBlocksItem_TextPrompt) -update_forward_refs(ForLoopBlockLoopBlocksItem_Validation) -update_forward_refs(ForLoopBlockLoopBlocksItem_Wait) -update_forward_refs(ForLoopBlockLoopBlocksItem_WhileLoop) -update_forward_refs(ForLoopBlockLoopBlocksItem_WorkflowTrigger) +# Manual patch: see for_loop_block.py header note. The cross-import below fails +# when this module is loaded mid-chain via while_loop_block_loop_blocks_item. +# The other side back-resolves us once it finishes loading. +try: + from .while_loop_block_loop_blocks_item import WhileLoopBlockLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass +else: + for _cls in ( + ForLoopBlockLoopBlocksItem_Action, + ForLoopBlockLoopBlocksItem_Code, + ForLoopBlockLoopBlocksItem_Extraction, + ForLoopBlockLoopBlocksItem_FileDownload, + ForLoopBlockLoopBlocksItem_ForLoop, + ForLoopBlockLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockLoopBlocksItem_GoogleSheetsWrite, + ForLoopBlockLoopBlocksItem_GotoUrl, + ForLoopBlockLoopBlocksItem_HttpRequest, + ForLoopBlockLoopBlocksItem_HumanInteraction, + ForLoopBlockLoopBlocksItem_Login, + ForLoopBlockLoopBlocksItem_Navigation, + ForLoopBlockLoopBlocksItem_PrintPage, + ForLoopBlockLoopBlocksItem_Task, + ForLoopBlockLoopBlocksItem_TextPrompt, + ForLoopBlockLoopBlocksItem_Validation, + ForLoopBlockLoopBlocksItem_Wait, + ForLoopBlockLoopBlocksItem_WhileLoop, + ForLoopBlockLoopBlocksItem_WorkflowTrigger, + ): + update_forward_refs(_cls) + # Back-resolve everything that couldn't resolve mid-chain: + # 1. while_loop_block_loop_blocks_item variants (need our ForLoopBlockLoopBlocksItem) + from . import while_loop_block_loop_blocks_item as _wllb + _wllb.ForLoopBlockLoopBlocksItem = ForLoopBlockLoopBlocksItem # type: ignore[attr-defined] + for _cls in ( + _wllb.WhileLoopBlockLoopBlocksItem_Action, + _wllb.WhileLoopBlockLoopBlocksItem_Code, + _wllb.WhileLoopBlockLoopBlocksItem_Extraction, + _wllb.WhileLoopBlockLoopBlocksItem_FileDownload, + _wllb.WhileLoopBlockLoopBlocksItem_ForLoop, + _wllb.WhileLoopBlockLoopBlocksItem_GoogleSheetsRead, + _wllb.WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite, + _wllb.WhileLoopBlockLoopBlocksItem_GotoUrl, + _wllb.WhileLoopBlockLoopBlocksItem_HttpRequest, + _wllb.WhileLoopBlockLoopBlocksItem_HumanInteraction, + _wllb.WhileLoopBlockLoopBlocksItem_Login, + _wllb.WhileLoopBlockLoopBlocksItem_Navigation, + _wllb.WhileLoopBlockLoopBlocksItem_PrintPage, + _wllb.WhileLoopBlockLoopBlocksItem_Task, + _wllb.WhileLoopBlockLoopBlocksItem_TextPrompt, + _wllb.WhileLoopBlockLoopBlocksItem_Validation, + _wllb.WhileLoopBlockLoopBlocksItem_Wait, + _wllb.WhileLoopBlockLoopBlocksItem_WhileLoop, + _wllb.WhileLoopBlockLoopBlocksItem_WorkflowTrigger, + ): + update_forward_refs(_cls) + # 2. for_loop_block.ForLoopBlock (needs our ForLoopBlockLoopBlocksItem in its globals) + from . import for_loop_block as _flb + _flb.ForLoopBlockLoopBlocksItem = ForLoopBlockLoopBlocksItem # type: ignore[attr-defined] + _flb.WhileLoopBlockLoopBlocksItem = WhileLoopBlockLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_flb.ForLoopBlock) + # 3. while_loop_block.WhileLoopBlock + from . import while_loop_block as _wlb + _wlb.ForLoopBlockLoopBlocksItem = ForLoopBlockLoopBlocksItem # type: ignore[attr-defined] + _wlb.WhileLoopBlockLoopBlocksItem = WhileLoopBlockLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_wlb.WhileLoopBlock) diff --git a/skyvern/client/types/for_loop_block_yaml.py b/skyvern/client/types/for_loop_block_yaml.py index 807562283..4cf687393 100644 --- a/skyvern/client/types/for_loop_block_yaml.py +++ b/skyvern/client/types/for_loop_block_yaml.py @@ -22,6 +22,7 @@ class ForLoopBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"] loop_over_parameter_key: typing.Optional[str] = None @@ -39,6 +40,12 @@ class ForLoopBlockYaml(UniversalBaseModel): extra = pydantic.Extra.allow -from .for_loop_block_yaml_loop_blocks_item import ForLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +# Manual patch: Fern v4.31.1 emits bottom-cross-imports that deadlock at module +# load. See for_loop_block.py for the explanation. +try: + from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 + from .for_loop_block_yaml_loop_blocks_item import ForLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass update_forward_refs(ForLoopBlockYaml) diff --git a/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py b/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py index 7a87b74ec..85a9036fe 100644 --- a/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py +++ b/skyvern/client/types/for_loop_block_yaml_loop_blocks_item.py @@ -14,6 +14,7 @@ from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema from .file_storage_type import FileStorageType from .file_type import FileType from .for_loop_block_yaml_data_schema import ForLoopBlockYamlDataSchema +from .google_sheets_write_block_yaml_write_mode import GoogleSheetsWriteBlockYamlWriteMode from .pdf_format import PdfFormat from .run_engine import RunEngine from .task_block_yaml_data_schema import TaskBlockYamlDataSchema @@ -25,6 +26,7 @@ class ForLoopBlockYamlLoopBlocksItem_Task(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -62,6 +64,7 @@ class ForLoopBlockYamlLoopBlocksItem_ForLoop(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"] loop_over_parameter_key: typing.Optional[str] = None @@ -79,7 +82,29 @@ class ForLoopBlockYamlLoopBlocksItem_ForLoop(UniversalBaseModel): extra = pydantic.Extra.allow +class ForLoopBlockYamlLoopBlocksItem_WhileLoop(UniversalBaseModel): + block_type: typing.Literal["while_loop"] = "while_loop" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + loop_blocks: typing.List["WhileLoopBlockYamlLoopBlocksItem"] + condition: BranchCriteriaYaml + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 class ForLoopBlockYamlLoopBlocksItem_Code(UniversalBaseModel): @@ -88,6 +113,7 @@ class ForLoopBlockYamlLoopBlocksItem_Code(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameter_keys: typing.Optional[typing.List[str]] = None @@ -108,6 +134,7 @@ class ForLoopBlockYamlLoopBlocksItem_TextPrompt(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str @@ -130,6 +157,7 @@ class ForLoopBlockYamlLoopBlocksItem_DownloadToS3(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -149,6 +177,7 @@ class ForLoopBlockYamlLoopBlocksItem_UploadToS3(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None @@ -168,6 +197,7 @@ class ForLoopBlockYamlLoopBlocksItem_FileUpload(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None @@ -196,6 +226,7 @@ class ForLoopBlockYamlLoopBlocksItem_SendEmail(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host_secret_parameter_key: str smtp_port_secret_parameter_key: str @@ -223,6 +254,7 @@ class ForLoopBlockYamlLoopBlocksItem_FileUrlParser(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None @@ -244,6 +276,7 @@ class ForLoopBlockYamlLoopBlocksItem_Validation(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None complete_criterion: typing.Optional[str] = None terminate_criterion: typing.Optional[str] = None @@ -267,6 +300,7 @@ class ForLoopBlockYamlLoopBlocksItem_Action(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -297,6 +331,7 @@ class ForLoopBlockYamlLoopBlocksItem_Navigation(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None @@ -332,6 +367,7 @@ class ForLoopBlockYamlLoopBlocksItem_Extraction(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None data_extraction_goal: str url: typing.Optional[str] = None @@ -359,6 +395,7 @@ class ForLoopBlockYamlLoopBlocksItem_Login(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -391,6 +428,7 @@ class ForLoopBlockYamlLoopBlocksItem_Wait(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: typing.Optional[int] = None @@ -410,6 +448,7 @@ class ForLoopBlockYamlLoopBlocksItem_HumanInteraction(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None @@ -436,6 +475,7 @@ class ForLoopBlockYamlLoopBlocksItem_FileDownload(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None @@ -467,6 +507,7 @@ class ForLoopBlockYamlLoopBlocksItem_GotoUrl(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -486,6 +527,7 @@ class ForLoopBlockYamlLoopBlocksItem_PdfParser(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -506,6 +548,7 @@ class ForLoopBlockYamlLoopBlocksItem_TaskV2(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None @@ -531,6 +574,7 @@ class ForLoopBlockYamlLoopBlocksItem_HttpRequest(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None @@ -559,6 +603,7 @@ class ForLoopBlockYamlLoopBlocksItem_Conditional(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchConditionYaml]] = None @@ -578,6 +623,7 @@ class ForLoopBlockYamlLoopBlocksItem_PrintPage(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None @@ -602,6 +648,7 @@ class ForLoopBlockYamlLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None workflow_permanent_id: str payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -620,15 +667,48 @@ class ForLoopBlockYamlLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): extra = pydantic.Extra.allow -class ForLoopBlockYamlLoopBlocksItem_WhileLoop(UniversalBaseModel): - block_type: typing.Literal["while_loop"] = "while_loop" +class ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead(UniversalBaseModel): + block_type: typing.Literal["google_sheets_read"] = "google_sheets_read" label: str next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"] - condition: BranchCriteriaYaml + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite(UniversalBaseModel): + block_type: typing.Literal["google_sheets_write"] = "google_sheets_write" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockYamlWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -643,6 +723,7 @@ class ForLoopBlockYamlLoopBlocksItem_WhileLoop(UniversalBaseModel): ForLoopBlockYamlLoopBlocksItem = typing.Union[ ForLoopBlockYamlLoopBlocksItem_Task, ForLoopBlockYamlLoopBlocksItem_ForLoop, + ForLoopBlockYamlLoopBlocksItem_WhileLoop, ForLoopBlockYamlLoopBlocksItem_Code, ForLoopBlockYamlLoopBlocksItem_TextPrompt, ForLoopBlockYamlLoopBlocksItem_DownloadToS3, @@ -664,8 +745,27 @@ ForLoopBlockYamlLoopBlocksItem = typing.Union[ ForLoopBlockYamlLoopBlocksItem_HttpRequest, ForLoopBlockYamlLoopBlocksItem_Conditional, ForLoopBlockYamlLoopBlocksItem_PrintPage, - ForLoopBlockYamlLoopBlocksItem_WhileLoop, ForLoopBlockYamlLoopBlocksItem_WorkflowTrigger, + ForLoopBlockYamlLoopBlocksItem_GoogleSheetsRead, + ForLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite, ] -update_forward_refs(ForLoopBlockYamlLoopBlocksItem_ForLoop) -update_forward_refs(ForLoopBlockYamlLoopBlocksItem_WhileLoop) +# Manual patch: see for_loop_block.py header note. +try: + from .while_loop_block_yaml_loop_blocks_item import WhileLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass +else: + update_forward_refs(ForLoopBlockYamlLoopBlocksItem_ForLoop) + update_forward_refs(ForLoopBlockYamlLoopBlocksItem_WhileLoop) + from . import while_loop_block_yaml_loop_blocks_item as _wlylb + _wlylb.ForLoopBlockYamlLoopBlocksItem = ForLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_wlylb.WhileLoopBlockYamlLoopBlocksItem_ForLoop) + update_forward_refs(_wlylb.WhileLoopBlockYamlLoopBlocksItem_WhileLoop) + from . import for_loop_block_yaml as _flby + _flby.ForLoopBlockYamlLoopBlocksItem = ForLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + _flby.WhileLoopBlockYamlLoopBlocksItem = WhileLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_flby.ForLoopBlockYaml) + from . import while_loop_block_yaml as _wlby + _wlby.ForLoopBlockYamlLoopBlocksItem = ForLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + _wlby.WhileLoopBlockYamlLoopBlocksItem = WhileLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_wlby.WhileLoopBlockYaml) diff --git a/skyvern/client/types/geo_target.py b/skyvern/client/types/geo_target.py index 592cc76d6..a9428cbc2 100644 --- a/skyvern/client/types/geo_target.py +++ b/skyvern/client/types/geo_target.py @@ -8,17 +8,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel class GeoTarget(UniversalBaseModel): """ - Granular geographic targeting for proxy selection. - - Supports country, subdivision (state/region), and city level targeting. - Uses ISO 3166-1 alpha-2 for countries, ISO 3166-2 for subdivisions, - and GeoNames English names for cities. - - Examples: - - {"country": "US"} - United States (same as RESIDENTIAL) - - {"country": "US", "subdivision": "CA"} - California, US - - {"country": "US", "subdivision": "NY", "city": "New York"} - New York City - - {"country": "GB", "city": "London"} - London, UK + Granular proxy geo-targeting request with country, optional subdivision, and optional city. """ country: str = pydantic.Field() diff --git a/skyvern/client/types/get_run_response.py b/skyvern/client/types/get_run_response.py index 8898a7cb7..2933c6095 100644 --- a/skyvern/client/types/get_run_response.py +++ b/skyvern/client/types/get_run_response.py @@ -10,9 +10,9 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .file_info import FileInfo from .run_status import RunStatus from .script_run_response import ScriptRunResponse -from .task_run_request import TaskRunRequest +from .task_run_request_output import TaskRunRequestOutput from .task_run_response_output import TaskRunResponseOutput -from .workflow_run_request import WorkflowRunRequest +from .workflow_run_request_output import WorkflowRunRequestOutput from .workflow_run_response_output import WorkflowRunResponseOutput @@ -23,6 +23,7 @@ class GetRunResponse_TaskV1(UniversalBaseModel): output: typing.Optional[TaskRunResponseOutput] = None downloaded_files: typing.Optional[typing.List[FileInfo]] = None recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None screenshot_urls: typing.Optional[typing.List[str]] = None failure_reason: typing.Optional[str] = None created_at: dt.datetime @@ -37,7 +38,7 @@ class GetRunResponse_TaskV1(UniversalBaseModel): script_run: typing.Optional[ScriptRunResponse] = None errors: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None step_count: typing.Optional[int] = None - run_request: typing.Optional[TaskRunRequest] = None + run_request: typing.Optional[TaskRunRequestOutput] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -56,6 +57,7 @@ class GetRunResponse_TaskV2(UniversalBaseModel): output: typing.Optional[TaskRunResponseOutput] = None downloaded_files: typing.Optional[typing.List[FileInfo]] = None recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None screenshot_urls: typing.Optional[typing.List[str]] = None failure_reason: typing.Optional[str] = None created_at: dt.datetime @@ -70,7 +72,7 @@ class GetRunResponse_TaskV2(UniversalBaseModel): script_run: typing.Optional[ScriptRunResponse] = None errors: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None step_count: typing.Optional[int] = None - run_request: typing.Optional[TaskRunRequest] = None + run_request: typing.Optional[TaskRunRequestOutput] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -89,6 +91,7 @@ class GetRunResponse_OpenaiCua(UniversalBaseModel): output: typing.Optional[TaskRunResponseOutput] = None downloaded_files: typing.Optional[typing.List[FileInfo]] = None recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None screenshot_urls: typing.Optional[typing.List[str]] = None failure_reason: typing.Optional[str] = None created_at: dt.datetime @@ -103,7 +106,7 @@ class GetRunResponse_OpenaiCua(UniversalBaseModel): script_run: typing.Optional[ScriptRunResponse] = None errors: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None step_count: typing.Optional[int] = None - run_request: typing.Optional[TaskRunRequest] = None + run_request: typing.Optional[TaskRunRequestOutput] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -122,6 +125,7 @@ class GetRunResponse_AnthropicCua(UniversalBaseModel): output: typing.Optional[TaskRunResponseOutput] = None downloaded_files: typing.Optional[typing.List[FileInfo]] = None recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None screenshot_urls: typing.Optional[typing.List[str]] = None failure_reason: typing.Optional[str] = None created_at: dt.datetime @@ -136,7 +140,7 @@ class GetRunResponse_AnthropicCua(UniversalBaseModel): script_run: typing.Optional[ScriptRunResponse] = None errors: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None step_count: typing.Optional[int] = None - run_request: typing.Optional[TaskRunRequest] = None + run_request: typing.Optional[TaskRunRequestOutput] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -155,6 +159,7 @@ class GetRunResponse_UiTars(UniversalBaseModel): output: typing.Optional[TaskRunResponseOutput] = None downloaded_files: typing.Optional[typing.List[FileInfo]] = None recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None screenshot_urls: typing.Optional[typing.List[str]] = None failure_reason: typing.Optional[str] = None created_at: dt.datetime @@ -169,7 +174,41 @@ class GetRunResponse_UiTars(UniversalBaseModel): script_run: typing.Optional[ScriptRunResponse] = None errors: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None step_count: typing.Optional[int] = None - run_request: typing.Optional[TaskRunRequest] = None + run_request: typing.Optional[TaskRunRequestOutput] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GetRunResponse_YutoriNavigator(UniversalBaseModel): + run_type: typing.Literal["yutori_navigator"] = "yutori_navigator" + run_id: str + status: RunStatus + output: typing.Optional[TaskRunResponseOutput] = None + downloaded_files: typing.Optional[typing.List[FileInfo]] = None + recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None + screenshot_urls: typing.Optional[typing.List[str]] = None + failure_reason: typing.Optional[str] = None + created_at: dt.datetime + modified_at: dt.datetime + queued_at: typing.Optional[dt.datetime] = None + started_at: typing.Optional[dt.datetime] = None + finished_at: typing.Optional[dt.datetime] = None + app_url: typing.Optional[str] = None + browser_session_id: typing.Optional[str] = None + browser_profile_id: typing.Optional[str] = None + max_screenshot_scrolls: typing.Optional[int] = None + script_run: typing.Optional[ScriptRunResponse] = None + errors: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None + step_count: typing.Optional[int] = None + run_request: typing.Optional[TaskRunRequestOutput] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -188,6 +227,7 @@ class GetRunResponse_WorkflowRun(UniversalBaseModel): output: typing.Optional[WorkflowRunResponseOutput] = None downloaded_files: typing.Optional[typing.List[FileInfo]] = None recording_url: typing.Optional[str] = None + recording_archived: typing.Optional[bool] = None screenshot_urls: typing.Optional[typing.List[str]] = None failure_reason: typing.Optional[str] = None created_at: dt.datetime @@ -204,7 +244,8 @@ class GetRunResponse_WorkflowRun(UniversalBaseModel): step_count: typing.Optional[int] = None run_with: typing.Optional[str] = None ai_fallback: typing.Optional[bool] = None - run_request: typing.Optional[WorkflowRunRequest] = None + script_id: typing.Optional[str] = None + run_request: typing.Optional[WorkflowRunRequestOutput] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -222,5 +263,6 @@ GetRunResponse = typing.Union[ GetRunResponse_OpenaiCua, GetRunResponse_AnthropicCua, GetRunResponse_UiTars, + GetRunResponse_YutoriNavigator, GetRunResponse_WorkflowRun, ] diff --git a/skyvern/client/types/google_sheets_read_block.py b/skyvern/client/types/google_sheets_read_block.py new file mode 100644 index 000000000..127aa0394 --- /dev/null +++ b/skyvern/client/types/google_sheets_read_block.py @@ -0,0 +1,49 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs +from .google_sheets_read_block_parameters_item import GoogleSheetsReadBlockParametersItem +from .output_parameter import OutputParameter + + +class GoogleSheetsReadBlock(UniversalBaseModel): + label: str = pydantic.Field() + """ + Author-facing identifier for a block; unique within a workflow. + """ + + next_block_label: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted. + """ + + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsReadBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +from .context_parameter import ContextParameter # noqa: E402, F401, I001 + +update_forward_refs(GoogleSheetsReadBlock) diff --git a/skyvern/client/types/google_sheets_read_block_parameters_item.py b/skyvern/client/types/google_sheets_read_block_parameters_item.py new file mode 100644 index 000000000..d06af1366 --- /dev/null +++ b/skyvern/client/types/google_sheets_read_block_parameters_item.py @@ -0,0 +1,277 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs +from .context_parameter_value import ContextParameterValue +from .workflow_parameter_default_value import WorkflowParameterDefaultValue +from .workflow_parameter_type import WorkflowParameterType + + +class GoogleSheetsReadBlockParametersItem_AwsSecret(UniversalBaseModel): + parameter_type: typing.Literal["aws_secret"] = "aws_secret" + key: str + description: typing.Optional[str] = None + aws_secret_parameter_id: str + workflow_id: str + aws_key: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_AzureSecret(UniversalBaseModel): + parameter_type: typing.Literal["azure_secret"] = "azure_secret" + key: str + description: typing.Optional[str] = None + azure_secret_parameter_id: str + workflow_id: str + azure_key: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_AzureVaultCredential(UniversalBaseModel): + parameter_type: typing.Literal["azure_vault_credential"] = "azure_vault_credential" + key: str + description: typing.Optional[str] = None + azure_vault_credential_parameter_id: str + workflow_id: str + vault_name: str + username_key: str + password_key: str + totp_secret_key: typing.Optional[str] = None + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData(UniversalBaseModel): + parameter_type: typing.Literal["bitwarden_credit_card_data"] = "bitwarden_credit_card_data" + key: str + description: typing.Optional[str] = None + bitwarden_credit_card_data_parameter_id: str + workflow_id: str + bitwarden_client_id_aws_secret_key: str + bitwarden_client_secret_aws_secret_key: str + bitwarden_master_password_aws_secret_key: str + bitwarden_collection_id: str + bitwarden_item_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential(UniversalBaseModel): + parameter_type: typing.Literal["bitwarden_login_credential"] = "bitwarden_login_credential" + key: str + description: typing.Optional[str] = None + bitwarden_login_credential_parameter_id: str + workflow_id: str + bitwarden_client_id_aws_secret_key: str + bitwarden_client_secret_aws_secret_key: str + bitwarden_master_password_aws_secret_key: str + url_parameter_key: typing.Optional[str] = None + bitwarden_collection_id: typing.Optional[str] = None + bitwarden_item_id: typing.Optional[str] = None + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation(UniversalBaseModel): + parameter_type: typing.Literal["bitwarden_sensitive_information"] = "bitwarden_sensitive_information" + key: str + description: typing.Optional[str] = None + bitwarden_sensitive_information_parameter_id: str + workflow_id: str + bitwarden_client_id_aws_secret_key: str + bitwarden_client_secret_aws_secret_key: str + bitwarden_master_password_aws_secret_key: str + bitwarden_collection_id: str + bitwarden_identity_key: str + bitwarden_identity_fields: typing.List[str] + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_Context(UniversalBaseModel): + parameter_type: typing.Literal["context"] = "context" + key: str + description: typing.Optional[str] = None + source: "ContextParameterSource" + value: typing.Optional[ContextParameterValue] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +from .context_parameter import ContextParameter # noqa: E402, F401, I001 +from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001 + + +class GoogleSheetsReadBlockParametersItem_Credential(UniversalBaseModel): + parameter_type: typing.Literal["credential"] = "credential" + key: str + description: typing.Optional[str] = None + credential_parameter_id: str + workflow_id: str + credential_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_Onepassword(UniversalBaseModel): + parameter_type: typing.Literal["onepassword"] = "onepassword" + key: str + description: typing.Optional[str] = None + onepassword_credential_parameter_id: str + workflow_id: str + vault_id: str + item_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_Output(UniversalBaseModel): + parameter_type: typing.Literal["output"] = "output" + key: str + description: typing.Optional[str] = None + output_parameter_id: str + workflow_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsReadBlockParametersItem_Workflow(UniversalBaseModel): + parameter_type: typing.Literal["workflow"] = "workflow" + key: str + description: typing.Optional[str] = None + workflow_parameter_id: str + workflow_parameter_type: WorkflowParameterType + workflow_id: str + default_value: typing.Optional[WorkflowParameterDefaultValue] = None + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +GoogleSheetsReadBlockParametersItem = typing.Union[ + GoogleSheetsReadBlockParametersItem_AwsSecret, + GoogleSheetsReadBlockParametersItem_AzureSecret, + GoogleSheetsReadBlockParametersItem_AzureVaultCredential, + GoogleSheetsReadBlockParametersItem_BitwardenCreditCardData, + GoogleSheetsReadBlockParametersItem_BitwardenLoginCredential, + GoogleSheetsReadBlockParametersItem_BitwardenSensitiveInformation, + GoogleSheetsReadBlockParametersItem_Context, + GoogleSheetsReadBlockParametersItem_Credential, + GoogleSheetsReadBlockParametersItem_Onepassword, + GoogleSheetsReadBlockParametersItem_Output, + GoogleSheetsReadBlockParametersItem_Workflow, +] +update_forward_refs(GoogleSheetsReadBlockParametersItem_Context) diff --git a/skyvern/client/types/google_sheets_read_block_yaml.py b/skyvern/client/types/google_sheets_read_block_yaml.py new file mode 100644 index 000000000..43b16ee0e --- /dev/null +++ b/skyvern/client/types/google_sheets_read_block_yaml.py @@ -0,0 +1,38 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class GoogleSheetsReadBlockYaml(UniversalBaseModel): + label: str = pydantic.Field() + """ + Author-facing identifier; must be unique per workflow. + """ + + next_block_label: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]. + """ + + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/skyvern/client/types/google_sheets_write_block.py b/skyvern/client/types/google_sheets_write_block.py new file mode 100644 index 000000000..c9c0edc64 --- /dev/null +++ b/skyvern/client/types/google_sheets_write_block.py @@ -0,0 +1,53 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs +from .google_sheets_write_block_parameters_item import GoogleSheetsWriteBlockParametersItem +from .google_sheets_write_block_write_mode import GoogleSheetsWriteBlockWriteMode +from .output_parameter import OutputParameter + + +class GoogleSheetsWriteBlock(UniversalBaseModel): + label: str = pydantic.Field() + """ + Author-facing identifier for a block; unique within a workflow. + """ + + next_block_label: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional pointer to the next block label when constructing a DAG. Defaults to sequential order when omitted. + """ + + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsWriteBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +from .context_parameter import ContextParameter # noqa: E402, F401, I001 + +update_forward_refs(GoogleSheetsWriteBlock) diff --git a/skyvern/client/types/google_sheets_write_block_parameters_item.py b/skyvern/client/types/google_sheets_write_block_parameters_item.py new file mode 100644 index 000000000..0497c61a0 --- /dev/null +++ b/skyvern/client/types/google_sheets_write_block_parameters_item.py @@ -0,0 +1,277 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs +from .context_parameter_value import ContextParameterValue +from .workflow_parameter_default_value import WorkflowParameterDefaultValue +from .workflow_parameter_type import WorkflowParameterType + + +class GoogleSheetsWriteBlockParametersItem_AwsSecret(UniversalBaseModel): + parameter_type: typing.Literal["aws_secret"] = "aws_secret" + key: str + description: typing.Optional[str] = None + aws_secret_parameter_id: str + workflow_id: str + aws_key: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_AzureSecret(UniversalBaseModel): + parameter_type: typing.Literal["azure_secret"] = "azure_secret" + key: str + description: typing.Optional[str] = None + azure_secret_parameter_id: str + workflow_id: str + azure_key: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_AzureVaultCredential(UniversalBaseModel): + parameter_type: typing.Literal["azure_vault_credential"] = "azure_vault_credential" + key: str + description: typing.Optional[str] = None + azure_vault_credential_parameter_id: str + workflow_id: str + vault_name: str + username_key: str + password_key: str + totp_secret_key: typing.Optional[str] = None + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData(UniversalBaseModel): + parameter_type: typing.Literal["bitwarden_credit_card_data"] = "bitwarden_credit_card_data" + key: str + description: typing.Optional[str] = None + bitwarden_credit_card_data_parameter_id: str + workflow_id: str + bitwarden_client_id_aws_secret_key: str + bitwarden_client_secret_aws_secret_key: str + bitwarden_master_password_aws_secret_key: str + bitwarden_collection_id: str + bitwarden_item_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential(UniversalBaseModel): + parameter_type: typing.Literal["bitwarden_login_credential"] = "bitwarden_login_credential" + key: str + description: typing.Optional[str] = None + bitwarden_login_credential_parameter_id: str + workflow_id: str + bitwarden_client_id_aws_secret_key: str + bitwarden_client_secret_aws_secret_key: str + bitwarden_master_password_aws_secret_key: str + url_parameter_key: typing.Optional[str] = None + bitwarden_collection_id: typing.Optional[str] = None + bitwarden_item_id: typing.Optional[str] = None + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation(UniversalBaseModel): + parameter_type: typing.Literal["bitwarden_sensitive_information"] = "bitwarden_sensitive_information" + key: str + description: typing.Optional[str] = None + bitwarden_sensitive_information_parameter_id: str + workflow_id: str + bitwarden_client_id_aws_secret_key: str + bitwarden_client_secret_aws_secret_key: str + bitwarden_master_password_aws_secret_key: str + bitwarden_collection_id: str + bitwarden_identity_key: str + bitwarden_identity_fields: typing.List[str] + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_Context(UniversalBaseModel): + parameter_type: typing.Literal["context"] = "context" + key: str + description: typing.Optional[str] = None + source: "ContextParameterSource" + value: typing.Optional[ContextParameterValue] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +from .context_parameter import ContextParameter # noqa: E402, F401, I001 +from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001 + + +class GoogleSheetsWriteBlockParametersItem_Credential(UniversalBaseModel): + parameter_type: typing.Literal["credential"] = "credential" + key: str + description: typing.Optional[str] = None + credential_parameter_id: str + workflow_id: str + credential_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_Onepassword(UniversalBaseModel): + parameter_type: typing.Literal["onepassword"] = "onepassword" + key: str + description: typing.Optional[str] = None + onepassword_credential_parameter_id: str + workflow_id: str + vault_id: str + item_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_Output(UniversalBaseModel): + parameter_type: typing.Literal["output"] = "output" + key: str + description: typing.Optional[str] = None + output_parameter_id: str + workflow_id: str + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class GoogleSheetsWriteBlockParametersItem_Workflow(UniversalBaseModel): + parameter_type: typing.Literal["workflow"] = "workflow" + key: str + description: typing.Optional[str] = None + workflow_parameter_id: str + workflow_parameter_type: WorkflowParameterType + workflow_id: str + default_value: typing.Optional[WorkflowParameterDefaultValue] = None + created_at: dt.datetime + modified_at: dt.datetime + deleted_at: typing.Optional[dt.datetime] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +GoogleSheetsWriteBlockParametersItem = typing.Union[ + GoogleSheetsWriteBlockParametersItem_AwsSecret, + GoogleSheetsWriteBlockParametersItem_AzureSecret, + GoogleSheetsWriteBlockParametersItem_AzureVaultCredential, + GoogleSheetsWriteBlockParametersItem_BitwardenCreditCardData, + GoogleSheetsWriteBlockParametersItem_BitwardenLoginCredential, + GoogleSheetsWriteBlockParametersItem_BitwardenSensitiveInformation, + GoogleSheetsWriteBlockParametersItem_Context, + GoogleSheetsWriteBlockParametersItem_Credential, + GoogleSheetsWriteBlockParametersItem_Onepassword, + GoogleSheetsWriteBlockParametersItem_Output, + GoogleSheetsWriteBlockParametersItem_Workflow, +] +update_forward_refs(GoogleSheetsWriteBlockParametersItem_Context) diff --git a/skyvern/client/types/google_sheets_write_block_write_mode.py b/skyvern/client/types/google_sheets_write_block_write_mode.py new file mode 100644 index 000000000..a31e12174 --- /dev/null +++ b/skyvern/client/types/google_sheets_write_block_write_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +GoogleSheetsWriteBlockWriteMode = typing.Union[typing.Literal["append", "update"], typing.Any] diff --git a/skyvern/client/types/google_sheets_write_block_yaml.py b/skyvern/client/types/google_sheets_write_block_yaml.py new file mode 100644 index 000000000..c4e1abea7 --- /dev/null +++ b/skyvern/client/types/google_sheets_write_block_yaml.py @@ -0,0 +1,42 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .google_sheets_write_block_yaml_write_mode import GoogleSheetsWriteBlockYamlWriteMode + + +class GoogleSheetsWriteBlockYaml(UniversalBaseModel): + label: str = pydantic.Field() + """ + Author-facing identifier; must be unique per workflow. + """ + + next_block_label: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional pointer to the label of the next block. When omitted, it will default to sequential order. See [[s-4bnl]]. + """ + + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockYamlWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/skyvern/client/types/google_sheets_write_block_yaml_write_mode.py b/skyvern/client/types/google_sheets_write_block_yaml_write_mode.py new file mode 100644 index 000000000..f1ef4fd5e --- /dev/null +++ b/skyvern/client/types/google_sheets_write_block_yaml_write_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +GoogleSheetsWriteBlockYamlWriteMode = typing.Union[typing.Literal["append", "update"], typing.Any] diff --git a/skyvern/client/types/http_request_block.py b/skyvern/client/types/http_request_block.py index 319258549..4fc1e6e8f 100644 --- a/skyvern/client/types/http_request_block.py +++ b/skyvern/client/types/http_request_block.py @@ -25,6 +25,7 @@ class HttpRequestBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None diff --git a/skyvern/client/types/http_request_block_yaml.py b/skyvern/client/types/http_request_block_yaml.py index 7d6ef8eb3..b2bd6ae15 100644 --- a/skyvern/client/types/http_request_block_yaml.py +++ b/skyvern/client/types/http_request_block_yaml.py @@ -19,6 +19,7 @@ class HttpRequestBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None diff --git a/skyvern/client/types/human_interaction_block.py b/skyvern/client/types/human_interaction_block.py index e1e74a138..6c1879ee3 100644 --- a/skyvern/client/types/human_interaction_block.py +++ b/skyvern/client/types/human_interaction_block.py @@ -39,6 +39,7 @@ class HumanInteractionBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -60,6 +61,7 @@ class HumanInteractionBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None negative_descriptor: typing.Optional[str] = None diff --git a/skyvern/client/types/human_interaction_block_yaml.py b/skyvern/client/types/human_interaction_block_yaml.py index efccee61d..c3c38d91e 100644 --- a/skyvern/client/types/human_interaction_block_yaml.py +++ b/skyvern/client/types/human_interaction_block_yaml.py @@ -19,6 +19,7 @@ class HumanInteractionBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None diff --git a/skyvern/client/types/login_block.py b/skyvern/client/types/login_block.py index b832bb35a..3675e1928 100644 --- a/skyvern/client/types/login_block.py +++ b/skyvern/client/types/login_block.py @@ -27,6 +27,7 @@ class LoginBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class LoginBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/login_block_yaml.py b/skyvern/client/types/login_block_yaml.py index 480f43c18..b64f4e033 100644 --- a/skyvern/client/types/login_block_yaml.py +++ b/skyvern/client/types/login_block_yaml.py @@ -20,6 +20,7 @@ class LoginBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None diff --git a/skyvern/client/types/navigation_block.py b/skyvern/client/types/navigation_block.py index ccdea0568..31c59b8f7 100644 --- a/skyvern/client/types/navigation_block.py +++ b/skyvern/client/types/navigation_block.py @@ -27,6 +27,7 @@ class NavigationBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class NavigationBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/navigation_block_yaml.py b/skyvern/client/types/navigation_block_yaml.py index c0bf45ff2..574143688 100644 --- a/skyvern/client/types/navigation_block_yaml.py +++ b/skyvern/client/types/navigation_block_yaml.py @@ -20,6 +20,7 @@ class NavigationBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None diff --git a/skyvern/client/types/pdf_parser_block.py b/skyvern/client/types/pdf_parser_block.py index 898dfb4f1..cca9067f4 100644 --- a/skyvern/client/types/pdf_parser_block.py +++ b/skyvern/client/types/pdf_parser_block.py @@ -27,6 +27,7 @@ class PdfParserBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None diff --git a/skyvern/client/types/pdf_parser_block_yaml.py b/skyvern/client/types/pdf_parser_block_yaml.py index 89f336765..c5ff77881 100644 --- a/skyvern/client/types/pdf_parser_block_yaml.py +++ b/skyvern/client/types/pdf_parser_block_yaml.py @@ -19,6 +19,7 @@ class PdfParserBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None diff --git a/skyvern/client/types/print_page_block.py b/skyvern/client/types/print_page_block.py index 608de8d78..aa5735af0 100644 --- a/skyvern/client/types/print_page_block.py +++ b/skyvern/client/types/print_page_block.py @@ -25,6 +25,7 @@ class PrintPageBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None diff --git a/skyvern/client/types/print_page_block_yaml.py b/skyvern/client/types/print_page_block_yaml.py index 489415ecb..08d896726 100644 --- a/skyvern/client/types/print_page_block_yaml.py +++ b/skyvern/client/types/print_page_block_yaml.py @@ -20,6 +20,7 @@ class PrintPageBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None diff --git a/skyvern/client/types/run_engine.py b/skyvern/client/types/run_engine.py index 15900a49d..71e78ecc6 100644 --- a/skyvern/client/types/run_engine.py +++ b/skyvern/client/types/run_engine.py @@ -3,5 +3,6 @@ import typing RunEngine = typing.Union[ - typing.Literal["skyvern-1.0", "skyvern-2.0", "openai-cua", "anthropic-cua", "ui-tars", "yutori-navigator"], typing.Any + typing.Literal["skyvern-1.0", "skyvern-2.0", "openai-cua", "anthropic-cua", "ui-tars", "yutori-navigator"], + typing.Any, ] diff --git a/skyvern/client/types/run_webhook_replay_response.py b/skyvern/client/types/run_webhook_replay_response.py new file mode 100644 index 000000000..3bb0083d2 --- /dev/null +++ b/skyvern/client/types/run_webhook_replay_response.py @@ -0,0 +1,67 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class RunWebhookReplayResponse(UniversalBaseModel): + run_id: str = pydantic.Field() + """ + Identifier of the run that was replayed + """ + + run_type: str = pydantic.Field() + """ + Run type associated with the payload + """ + + default_webhook_url: typing.Optional[str] = pydantic.Field(default=None) + """ + Webhook URL stored on the original run configuration + """ + + target_webhook_url: typing.Optional[str] = pydantic.Field(default=None) + """ + Webhook URL that the replay attempted to reach + """ + + payload: str = pydantic.Field() + """ + JSON payload that was delivered during the replay attempt + """ + + headers: typing.Dict[str, str] = pydantic.Field() + """ + Signed headers that were generated for the replay attempt + """ + + status_code: typing.Optional[int] = pydantic.Field(default=None) + """ + HTTP status code returned by the webhook receiver, if available + """ + + latency_ms: typing.Optional[int] = pydantic.Field(default=None) + """ + Round-trip latency in milliseconds for the replay attempt + """ + + response_body: typing.Optional[str] = pydantic.Field(default=None) + """ + Body returned by the webhook receiver (truncated to 2KB) + """ + + error: typing.Optional[str] = pydantic.Field(default=None) + """ + Error message if the replay attempt failed + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/skyvern/client/types/send_email_block.py b/skyvern/client/types/send_email_block.py index 02253f692..389fae4c6 100644 --- a/skyvern/client/types/send_email_block.py +++ b/skyvern/client/types/send_email_block.py @@ -23,6 +23,7 @@ class SendEmailBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host: AwsSecretParameter smtp_port: AwsSecretParameter diff --git a/skyvern/client/types/send_email_block_yaml.py b/skyvern/client/types/send_email_block_yaml.py index 3ade6fdf3..be1b4dd36 100644 --- a/skyvern/client/types/send_email_block_yaml.py +++ b/skyvern/client/types/send_email_block_yaml.py @@ -19,6 +19,7 @@ class SendEmailBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host_secret_parameter_key: str smtp_port_secret_parameter_key: str diff --git a/skyvern/client/types/skyvern_schemas_run_blocks_credential_type.py b/skyvern/client/types/skyvern_schemas_credential_type_credential_type.py similarity index 73% rename from skyvern/client/types/skyvern_schemas_run_blocks_credential_type.py rename to skyvern/client/types/skyvern_schemas_credential_type_credential_type.py index e153f92ec..4341fec22 100644 --- a/skyvern/client/types/skyvern_schemas_run_blocks_credential_type.py +++ b/skyvern/client/types/skyvern_schemas_credential_type_credential_type.py @@ -2,6 +2,6 @@ import typing -SkyvernSchemasRunBlocksCredentialType = typing.Union[ +SkyvernSchemasCredentialTypeCredentialType = typing.Union[ typing.Literal["skyvern", "bitwarden", "1password", "azure_vault"], typing.Any ] diff --git a/skyvern/client/types/task_block.py b/skyvern/client/types/task_block.py index afeb98698..39c3db001 100644 --- a/skyvern/client/types/task_block.py +++ b/skyvern/client/types/task_block.py @@ -27,6 +27,7 @@ class TaskBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class TaskBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/task_block_yaml.py b/skyvern/client/types/task_block_yaml.py index f55bd08ee..0a1d42bdc 100644 --- a/skyvern/client/types/task_block_yaml.py +++ b/skyvern/client/types/task_block_yaml.py @@ -21,6 +21,7 @@ class TaskBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None diff --git a/skyvern/client/types/task_run_list_item.py b/skyvern/client/types/task_run_list_item.py index f5b629da2..f816909de 100644 --- a/skyvern/client/types/task_run_list_item.py +++ b/skyvern/client/types/task_run_list_item.py @@ -21,7 +21,7 @@ class TaskRunListItem(UniversalBaseModel): finished_at: typing.Optional[dt.datetime] = None created_at: dt.datetime workflow_permanent_id: typing.Optional[str] = None - workflow_deleted: bool = False + workflow_deleted: typing.Optional[bool] = None script_run: typing.Optional[bool] = None if IS_PYDANTIC_V2: diff --git a/skyvern/client/types/task_run_request_input_data_extraction_schema.py b/skyvern/client/types/task_run_request_input_data_extraction_schema.py new file mode 100644 index 000000000..d41ea0abd --- /dev/null +++ b/skyvern/client/types/task_run_request_input_data_extraction_schema.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +TaskRunRequestInputDataExtractionSchema = typing.Union[ + typing.Dict[str, typing.Optional[typing.Any]], typing.List[typing.Optional[typing.Any]], str +] diff --git a/skyvern/client/types/workflow_run_request_proxy_location.py b/skyvern/client/types/task_run_request_input_proxy_location.py similarity index 56% rename from skyvern/client/types/workflow_run_request_proxy_location.py rename to skyvern/client/types/task_run_request_input_proxy_location.py index b1218e399..a20845410 100644 --- a/skyvern/client/types/workflow_run_request_proxy_location.py +++ b/skyvern/client/types/task_run_request_input_proxy_location.py @@ -5,4 +5,4 @@ import typing from .geo_target import GeoTarget from .proxy_location import ProxyLocation -WorkflowRunRequestProxyLocation = typing.Union[ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]]] +TaskRunRequestInputProxyLocation = typing.Union[ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]]] diff --git a/skyvern/client/types/task_run_request.py b/skyvern/client/types/task_run_request_output.py similarity index 84% rename from skyvern/client/types/task_run_request.py rename to skyvern/client/types/task_run_request_output.py index cf280707b..7bb105976 100644 --- a/skyvern/client/types/task_run_request.py +++ b/skyvern/client/types/task_run_request_output.py @@ -5,11 +5,11 @@ import typing import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .run_engine import RunEngine -from .task_run_request_data_extraction_schema import TaskRunRequestDataExtractionSchema -from .task_run_request_proxy_location import TaskRunRequestProxyLocation +from .task_run_request_output_data_extraction_schema import TaskRunRequestOutputDataExtractionSchema +from .task_run_request_output_proxy_location import TaskRunRequestOutputProxyLocation -class TaskRunRequest(UniversalBaseModel): +class TaskRunRequestOutput(UniversalBaseModel): prompt: str = pydantic.Field() """ @@ -33,7 +33,7 @@ class TaskRunRequest(UniversalBaseModel): The title for the task """ - proxy_location: typing.Optional[TaskRunRequestProxyLocation] = pydantic.Field(default=None) + proxy_location: typing.Optional[TaskRunRequestOutputProxyLocation] = pydantic.Field(default=None) """ Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -50,6 +50,7 @@ class TaskRunRequest(UniversalBaseModel): - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -66,10 +67,12 @@ class TaskRunRequest(UniversalBaseModel): - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} """ - data_extraction_schema: typing.Optional[TaskRunRequestDataExtractionSchema] = pydantic.Field(default=None) + data_extraction_schema: typing.Optional[TaskRunRequestOutputDataExtractionSchema] = pydantic.Field(default=None) """ The schema for data to be extracted from the webpage. If you're looking for consistent data schema being returned by the agent, it's highly recommended to use https://json-schema.org/. @@ -122,6 +125,11 @@ class TaskRunRequest(UniversalBaseModel): The extra HTTP headers for the requests in browser. """ + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = pydantic.Field(default=None) + """ + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + """ + publish_workflow: typing.Optional[bool] = pydantic.Field(default=None) """ Deprecated. Whether to publish a `skyvern-2.0` task as a reusable workflow. For backwards compatibility, this routes the request through the legacy `skyvern-2.0` publish path. Prefer creating reusable workflows through the workflow APIs. diff --git a/skyvern/client/types/task_run_request_output_data_extraction_schema.py b/skyvern/client/types/task_run_request_output_data_extraction_schema.py new file mode 100644 index 000000000..9e291122b --- /dev/null +++ b/skyvern/client/types/task_run_request_output_data_extraction_schema.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +TaskRunRequestOutputDataExtractionSchema = typing.Union[ + typing.Dict[str, typing.Optional[typing.Any]], typing.List[typing.Optional[typing.Any]], str +] diff --git a/skyvern/client/types/task_run_request_proxy_location.py b/skyvern/client/types/task_run_request_output_proxy_location.py similarity index 55% rename from skyvern/client/types/task_run_request_proxy_location.py rename to skyvern/client/types/task_run_request_output_proxy_location.py index 7f67743ae..d1f420057 100644 --- a/skyvern/client/types/task_run_request_proxy_location.py +++ b/skyvern/client/types/task_run_request_output_proxy_location.py @@ -5,4 +5,6 @@ import typing from .geo_target import GeoTarget from .proxy_location import ProxyLocation -TaskRunRequestProxyLocation = typing.Union[ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]]] +TaskRunRequestOutputProxyLocation = typing.Union[ + ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]] +] diff --git a/skyvern/client/types/task_run_response.py b/skyvern/client/types/task_run_response.py index 623125ba4..702bb6c9f 100644 --- a/skyvern/client/types/task_run_response.py +++ b/skyvern/client/types/task_run_response.py @@ -8,7 +8,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .file_info import FileInfo from .run_status import RunStatus from .script_run_response import ScriptRunResponse -from .task_run_request import TaskRunRequest +from .task_run_request_output import TaskRunRequestOutput from .task_run_response_output import TaskRunResponseOutput @@ -38,6 +38,11 @@ class TaskRunResponse(UniversalBaseModel): URL to the recording of the run """ + recording_archived: typing.Optional[bool] = pydantic.Field(default=None) + """ + True when the recording exists but has been archived to cold storage and is not currently accessible. + """ + screenshot_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None) """ List of last n screenshot URLs in reverse chronological order - the first one the list is the latest screenshot. @@ -108,7 +113,7 @@ class TaskRunResponse(UniversalBaseModel): Total number of steps executed in this run """ - run_request: typing.Optional[TaskRunRequest] = pydantic.Field(default=None) + run_request: typing.Optional[TaskRunRequestOutput] = pydantic.Field(default=None) """ The original request parameters used to start this task run """ diff --git a/skyvern/client/types/task_v2block.py b/skyvern/client/types/task_v2block.py index fd25ffcbf..68592b304 100644 --- a/skyvern/client/types/task_v2block.py +++ b/skyvern/client/types/task_v2block.py @@ -22,6 +22,7 @@ class TaskV2Block(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None diff --git a/skyvern/client/types/task_v2block_yaml.py b/skyvern/client/types/task_v2block_yaml.py index 3536eb193..3a93f1d35 100644 --- a/skyvern/client/types/task_v2block_yaml.py +++ b/skyvern/client/types/task_v2block_yaml.py @@ -19,6 +19,7 @@ class TaskV2BlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None diff --git a/skyvern/client/types/text_prompt_block.py b/skyvern/client/types/text_prompt_block.py index 9e54f308e..6101df694 100644 --- a/skyvern/client/types/text_prompt_block.py +++ b/skyvern/client/types/text_prompt_block.py @@ -25,6 +25,7 @@ class TextPromptBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str diff --git a/skyvern/client/types/text_prompt_block_yaml.py b/skyvern/client/types/text_prompt_block_yaml.py index 627f85514..eda1414d5 100644 --- a/skyvern/client/types/text_prompt_block_yaml.py +++ b/skyvern/client/types/text_prompt_block_yaml.py @@ -19,6 +19,7 @@ class TextPromptBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str diff --git a/skyvern/client/types/thought.py b/skyvern/client/types/thought.py index c632dba88..e5e67b1b3 100644 --- a/skyvern/client/types/thought.py +++ b/skyvern/client/types/thought.py @@ -29,6 +29,7 @@ class Thought(UniversalBaseModel): reasoning_token_count: typing.Optional[int] = None cached_token_count: typing.Optional[int] = None thought_cost: typing.Optional[float] = None + last_llm_model: typing.Optional[str] = None created_at: dt.datetime modified_at: dt.datetime diff --git a/skyvern/client/types/upload_to_s3block.py b/skyvern/client/types/upload_to_s3block.py index e7dac9eca..f1c9e2e96 100644 --- a/skyvern/client/types/upload_to_s3block.py +++ b/skyvern/client/types/upload_to_s3block.py @@ -22,6 +22,7 @@ class UploadToS3Block(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None diff --git a/skyvern/client/types/upload_to_s3block_yaml.py b/skyvern/client/types/upload_to_s3block_yaml.py index c904e0d44..52ea30e07 100644 --- a/skyvern/client/types/upload_to_s3block_yaml.py +++ b/skyvern/client/types/upload_to_s3block_yaml.py @@ -19,6 +19,7 @@ class UploadToS3BlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None diff --git a/skyvern/client/types/url_block.py b/skyvern/client/types/url_block.py index 20166c711..f29461d27 100644 --- a/skyvern/client/types/url_block.py +++ b/skyvern/client/types/url_block.py @@ -27,6 +27,7 @@ class UrlBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: str @@ -48,6 +49,7 @@ class UrlBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/url_block_yaml.py b/skyvern/client/types/url_block_yaml.py index c4d7e2042..dc3d3d213 100644 --- a/skyvern/client/types/url_block_yaml.py +++ b/skyvern/client/types/url_block_yaml.py @@ -19,6 +19,7 @@ class UrlBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str diff --git a/skyvern/client/types/user_defined_error.py b/skyvern/client/types/user_defined_error.py index 4dcd2e01a..85732e98a 100644 --- a/skyvern/client/types/user_defined_error.py +++ b/skyvern/client/types/user_defined_error.py @@ -10,6 +10,7 @@ class UserDefinedError(UniversalBaseModel): error_code: str reasoning: str confidence_float: float + error_type: typing.Optional[typing.Literal["USER_DEFINED_ERROR"]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/validation_block.py b/skyvern/client/types/validation_block.py index 5d6166633..8b9869c65 100644 --- a/skyvern/client/types/validation_block.py +++ b/skyvern/client/types/validation_block.py @@ -27,6 +27,7 @@ class ValidationBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -48,6 +49,7 @@ class ValidationBlock(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/skyvern/client/types/validation_block_yaml.py b/skyvern/client/types/validation_block_yaml.py index 4bdd9434d..ff9ba78a4 100644 --- a/skyvern/client/types/validation_block_yaml.py +++ b/skyvern/client/types/validation_block_yaml.py @@ -19,6 +19,7 @@ class ValidationBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None complete_criterion: typing.Optional[str] = None terminate_criterion: typing.Optional[str] = None diff --git a/skyvern/client/types/wait_block.py b/skyvern/client/types/wait_block.py index 79947b709..fdc10986d 100644 --- a/skyvern/client/types/wait_block.py +++ b/skyvern/client/types/wait_block.py @@ -25,6 +25,7 @@ class WaitBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: int parameters: typing.Optional[typing.List[WaitBlockParametersItem]] = None diff --git a/skyvern/client/types/wait_block_yaml.py b/skyvern/client/types/wait_block_yaml.py index a5354594a..299776248 100644 --- a/skyvern/client/types/wait_block_yaml.py +++ b/skyvern/client/types/wait_block_yaml.py @@ -19,6 +19,7 @@ class WaitBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: typing.Optional[int] = None diff --git a/skyvern/client/types/while_loop_block.py b/skyvern/client/types/while_loop_block.py index af4f30334..597f51bf9 100644 --- a/skyvern/client/types/while_loop_block.py +++ b/skyvern/client/types/while_loop_block.py @@ -11,6 +11,17 @@ from .while_loop_block_condition import WhileLoopBlockCondition class WhileLoopBlock(UniversalBaseModel): + """ + Loop block driven by a runtime condition. Iterates while ``condition`` evaluates truthy. + + Top-of-loop semantics: the condition is evaluated *before* each iteration (including the + first). If the condition is false on the first check, the body never runs and the block + returns success with an empty output list. + + Safety: the loop is capped at ``DEFAULT_MAX_LOOP_ITERATIONS`` (500). Reaching the cap is + treated as a failure so that a misbehaving condition can never spin forever. + """ + label: str = pydantic.Field() """ Author-facing identifier for a block; unique within a workflow. @@ -25,6 +36,7 @@ class WhileLoopBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["WhileLoopBlockLoopBlocksItem"] condition: WhileLoopBlockCondition @@ -40,6 +52,13 @@ class WhileLoopBlock(UniversalBaseModel): from .context_parameter import ContextParameter # noqa: E402, F401, I001 -from .while_loop_block_loop_blocks_item import WhileLoopBlockLoopBlocksItem # noqa: E402, F401, I001 + +# Manual patch: Fern v4.31.1 emits bottom-cross-imports that deadlock at module +# load. See for_loop_block.py for the explanation. +try: + from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 + from .while_loop_block_loop_blocks_item import WhileLoopBlockLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass update_forward_refs(WhileLoopBlock) diff --git a/skyvern/client/types/while_loop_block_loop_blocks_item.py b/skyvern/client/types/while_loop_block_loop_blocks_item.py index fd62a87e0..59d2a0672 100644 --- a/skyvern/client/types/while_loop_block_loop_blocks_item.py +++ b/skyvern/client/types/while_loop_block_loop_blocks_item.py @@ -21,6 +21,9 @@ from .file_storage_type import FileStorageType from .file_type import FileType from .for_loop_block_data_schema import ForLoopBlockDataSchema from .for_loop_block_loop_over import ForLoopBlockLoopOver +from .google_sheets_read_block_parameters_item import GoogleSheetsReadBlockParametersItem +from .google_sheets_write_block_parameters_item import GoogleSheetsWriteBlockParametersItem +from .google_sheets_write_block_write_mode import GoogleSheetsWriteBlockWriteMode from .http_request_block_parameters_item import HttpRequestBlockParametersItem from .human_interaction_block_data_schema import HumanInteractionBlockDataSchema from .human_interaction_block_parameters_item import HumanInteractionBlockParametersItem @@ -51,6 +54,7 @@ class WhileLoopBlockLoopBlocksItem_Action(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -72,6 +76,7 @@ class WhileLoopBlockLoopBlocksItem_Action(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -91,6 +96,7 @@ class WhileLoopBlockLoopBlocksItem_Code(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameters: typing.Optional[typing.List[CodeBlockParametersItem]] = None @@ -113,6 +119,7 @@ class WhileLoopBlockLoopBlocksItem_Conditional(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchCondition]] = None @@ -134,6 +141,7 @@ class WhileLoopBlockLoopBlocksItem_DownloadToS3(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -155,6 +163,7 @@ class WhileLoopBlockLoopBlocksItem_Extraction(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -176,6 +185,7 @@ class WhileLoopBlockLoopBlocksItem_Extraction(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -195,6 +205,7 @@ class WhileLoopBlockLoopBlocksItem_FileDownload(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -216,6 +227,7 @@ class WhileLoopBlockLoopBlocksItem_FileDownload(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -235,6 +247,7 @@ class WhileLoopBlockLoopBlocksItem_FileUpload(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None @@ -264,6 +277,7 @@ class WhileLoopBlockLoopBlocksItem_FileUrlParser(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None @@ -287,8 +301,9 @@ class WhileLoopBlockLoopBlocksItem_ForLoop(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["WhileLoopBlockLoopBlocksItem"] + loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"] loop_over: typing.Optional[ForLoopBlockLoopOver] = None loop_variable_reference: typing.Optional[str] = None complete_if_empty: typing.Optional[bool] = None @@ -304,7 +319,61 @@ class WhileLoopBlockLoopBlocksItem_ForLoop(UniversalBaseModel): extra = pydantic.Extra.allow -from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +class WhileLoopBlockLoopBlocksItem_GoogleSheetsRead(UniversalBaseModel): + block_type: typing.Literal["google_sheets_read"] = "google_sheets_read" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsReadBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite(UniversalBaseModel): + block_type: typing.Literal["google_sheets_write"] = "google_sheets_write" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsWriteBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow class WhileLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel): @@ -315,6 +384,7 @@ class WhileLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: str @@ -336,6 +406,7 @@ class WhileLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -355,6 +426,7 @@ class WhileLoopBlockLoopBlocksItem_HttpRequest(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None @@ -385,6 +457,7 @@ class WhileLoopBlockLoopBlocksItem_HumanInteraction(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -406,6 +479,7 @@ class WhileLoopBlockLoopBlocksItem_HumanInteraction(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None negative_descriptor: typing.Optional[str] = None @@ -433,6 +507,7 @@ class WhileLoopBlockLoopBlocksItem_Login(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -454,6 +529,7 @@ class WhileLoopBlockLoopBlocksItem_Login(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -473,6 +549,7 @@ class WhileLoopBlockLoopBlocksItem_Navigation(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -494,6 +571,7 @@ class WhileLoopBlockLoopBlocksItem_Navigation(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -513,6 +591,7 @@ class WhileLoopBlockLoopBlocksItem_PdfParser(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -535,6 +614,7 @@ class WhileLoopBlockLoopBlocksItem_PrintPage(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None @@ -561,6 +641,7 @@ class WhileLoopBlockLoopBlocksItem_SendEmail(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host: AwsSecretParameter smtp_port: AwsSecretParameter @@ -590,6 +671,7 @@ class WhileLoopBlockLoopBlocksItem_Task(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -611,6 +693,7 @@ class WhileLoopBlockLoopBlocksItem_Task(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -630,6 +713,7 @@ class WhileLoopBlockLoopBlocksItem_TaskV2(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None @@ -656,6 +740,7 @@ class WhileLoopBlockLoopBlocksItem_TextPrompt(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str @@ -680,6 +765,7 @@ class WhileLoopBlockLoopBlocksItem_UploadToS3(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None @@ -701,6 +787,7 @@ class WhileLoopBlockLoopBlocksItem_Validation(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -722,6 +809,7 @@ class WhileLoopBlockLoopBlocksItem_Validation(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -741,6 +829,7 @@ class WhileLoopBlockLoopBlocksItem_Wait(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: int parameters: typing.Optional[typing.List[WaitBlockParametersItem]] = None @@ -755,32 +844,6 @@ class WhileLoopBlockLoopBlocksItem_Wait(UniversalBaseModel): extra = pydantic.Extra.allow -class WhileLoopBlockLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): - block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" - label: str - next_block_label: typing.Optional[str] = None - output_parameter: OutputParameter - continue_on_failure: typing.Optional[bool] = None - model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - disable_cache: typing.Optional[bool] = None - next_loop_on_failure: typing.Optional[bool] = None - workflow_permanent_id: str - payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - wait_for_completion: typing.Optional[bool] = None - browser_session_id: typing.Optional[str] = None - use_parent_browser_session: typing.Optional[bool] = None - parameters: typing.Optional[typing.List[WorkflowTriggerBlockParametersItem]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow - - class WhileLoopBlockLoopBlocksItem_WhileLoop(UniversalBaseModel): block_type: typing.Literal["while_loop"] = "while_loop" label: str @@ -789,6 +852,7 @@ class WhileLoopBlockLoopBlocksItem_WhileLoop(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["WhileLoopBlockLoopBlocksItem"] condition: WhileLoopBlockCondition @@ -803,6 +867,37 @@ class WhileLoopBlockLoopBlocksItem_WhileLoop(UniversalBaseModel): extra = pydantic.Extra.allow +from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +from .while_loop_block import WhileLoopBlock # noqa: E402, F401, I001 + + +class WhileLoopBlockLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): + block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + workflow_permanent_id: str + payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + wait_for_completion: typing.Optional[bool] = None + browser_session_id: typing.Optional[str] = None + use_parent_browser_session: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[WorkflowTriggerBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + from .context_parameter import ContextParameter # noqa: E402, F401, I001 WhileLoopBlockLoopBlocksItem = typing.Union[ @@ -815,6 +910,8 @@ WhileLoopBlockLoopBlocksItem = typing.Union[ WhileLoopBlockLoopBlocksItem_FileUpload, WhileLoopBlockLoopBlocksItem_FileUrlParser, WhileLoopBlockLoopBlocksItem_ForLoop, + WhileLoopBlockLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite, WhileLoopBlockLoopBlocksItem_GotoUrl, WhileLoopBlockLoopBlocksItem_HttpRequest, WhileLoopBlockLoopBlocksItem_HumanInteraction, @@ -832,20 +929,64 @@ WhileLoopBlockLoopBlocksItem = typing.Union[ WhileLoopBlockLoopBlocksItem_WhileLoop, WhileLoopBlockLoopBlocksItem_WorkflowTrigger, ] -update_forward_refs(WhileLoopBlockLoopBlocksItem_Action) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Code) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Extraction) -update_forward_refs(WhileLoopBlockLoopBlocksItem_FileDownload) -update_forward_refs(WhileLoopBlockLoopBlocksItem_ForLoop) -update_forward_refs(WhileLoopBlockLoopBlocksItem_GotoUrl) -update_forward_refs(WhileLoopBlockLoopBlocksItem_HttpRequest) -update_forward_refs(WhileLoopBlockLoopBlocksItem_HumanInteraction) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Login) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Navigation) -update_forward_refs(WhileLoopBlockLoopBlocksItem_PrintPage) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Task) -update_forward_refs(WhileLoopBlockLoopBlocksItem_TextPrompt) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Validation) -update_forward_refs(WhileLoopBlockLoopBlocksItem_Wait) -update_forward_refs(WhileLoopBlockLoopBlocksItem_WhileLoop) -update_forward_refs(WhileLoopBlockLoopBlocksItem_WorkflowTrigger) +# Manual patch: see for_loop_block.py header note. +try: + from .for_loop_block_loop_blocks_item import ForLoopBlockLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass +else: + for _cls in ( + WhileLoopBlockLoopBlocksItem_Action, + WhileLoopBlockLoopBlocksItem_Code, + WhileLoopBlockLoopBlocksItem_Extraction, + WhileLoopBlockLoopBlocksItem_FileDownload, + WhileLoopBlockLoopBlocksItem_ForLoop, + WhileLoopBlockLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockLoopBlocksItem_GoogleSheetsWrite, + WhileLoopBlockLoopBlocksItem_GotoUrl, + WhileLoopBlockLoopBlocksItem_HttpRequest, + WhileLoopBlockLoopBlocksItem_HumanInteraction, + WhileLoopBlockLoopBlocksItem_Login, + WhileLoopBlockLoopBlocksItem_Navigation, + WhileLoopBlockLoopBlocksItem_PrintPage, + WhileLoopBlockLoopBlocksItem_Task, + WhileLoopBlockLoopBlocksItem_TextPrompt, + WhileLoopBlockLoopBlocksItem_Validation, + WhileLoopBlockLoopBlocksItem_Wait, + WhileLoopBlockLoopBlocksItem_WhileLoop, + WhileLoopBlockLoopBlocksItem_WorkflowTrigger, + ): + update_forward_refs(_cls) + # Back-resolve everything that couldn't resolve mid-chain. + from . import for_loop_block_loop_blocks_item as _fllb + _fllb.WhileLoopBlockLoopBlocksItem = WhileLoopBlockLoopBlocksItem # type: ignore[attr-defined] + for _cls in ( + _fllb.ForLoopBlockLoopBlocksItem_Action, + _fllb.ForLoopBlockLoopBlocksItem_Code, + _fllb.ForLoopBlockLoopBlocksItem_Extraction, + _fllb.ForLoopBlockLoopBlocksItem_FileDownload, + _fllb.ForLoopBlockLoopBlocksItem_ForLoop, + _fllb.ForLoopBlockLoopBlocksItem_GoogleSheetsRead, + _fllb.ForLoopBlockLoopBlocksItem_GoogleSheetsWrite, + _fllb.ForLoopBlockLoopBlocksItem_GotoUrl, + _fllb.ForLoopBlockLoopBlocksItem_HttpRequest, + _fllb.ForLoopBlockLoopBlocksItem_HumanInteraction, + _fllb.ForLoopBlockLoopBlocksItem_Login, + _fllb.ForLoopBlockLoopBlocksItem_Navigation, + _fllb.ForLoopBlockLoopBlocksItem_PrintPage, + _fllb.ForLoopBlockLoopBlocksItem_Task, + _fllb.ForLoopBlockLoopBlocksItem_TextPrompt, + _fllb.ForLoopBlockLoopBlocksItem_Validation, + _fllb.ForLoopBlockLoopBlocksItem_Wait, + _fllb.ForLoopBlockLoopBlocksItem_WhileLoop, + _fllb.ForLoopBlockLoopBlocksItem_WorkflowTrigger, + ): + update_forward_refs(_cls) + from . import for_loop_block as _flb + _flb.ForLoopBlockLoopBlocksItem = ForLoopBlockLoopBlocksItem # type: ignore[attr-defined] + _flb.WhileLoopBlockLoopBlocksItem = WhileLoopBlockLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_flb.ForLoopBlock) + from . import while_loop_block as _wlb + _wlb.ForLoopBlockLoopBlocksItem = ForLoopBlockLoopBlocksItem # type: ignore[attr-defined] + _wlb.WhileLoopBlockLoopBlocksItem = WhileLoopBlockLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_wlb.WhileLoopBlock) diff --git a/skyvern/client/types/while_loop_block_yaml.py b/skyvern/client/types/while_loop_block_yaml.py index 76fcb45ee..a58e8eeab 100644 --- a/skyvern/client/types/while_loop_block_yaml.py +++ b/skyvern/client/types/while_loop_block_yaml.py @@ -22,6 +22,7 @@ class WhileLoopBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["WhileLoopBlockYamlLoopBlocksItem"] condition: BranchCriteriaYaml @@ -36,6 +37,12 @@ class WhileLoopBlockYaml(UniversalBaseModel): extra = pydantic.Extra.allow -from .while_loop_block_yaml_loop_blocks_item import WhileLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +# Manual patch: Fern v4.31.1 emits bottom-cross-imports that deadlock at module +# load. See for_loop_block.py for the explanation. +try: + from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 + from .while_loop_block_yaml_loop_blocks_item import WhileLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass update_forward_refs(WhileLoopBlockYaml) diff --git a/skyvern/client/types/while_loop_block_yaml_loop_blocks_item.py b/skyvern/client/types/while_loop_block_yaml_loop_blocks_item.py index c604507f9..0c4480b18 100644 --- a/skyvern/client/types/while_loop_block_yaml_loop_blocks_item.py +++ b/skyvern/client/types/while_loop_block_yaml_loop_blocks_item.py @@ -14,6 +14,7 @@ from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema from .file_storage_type import FileStorageType from .file_type import FileType from .for_loop_block_yaml_data_schema import ForLoopBlockYamlDataSchema +from .google_sheets_write_block_yaml_write_mode import GoogleSheetsWriteBlockYamlWriteMode from .pdf_format import PdfFormat from .run_engine import RunEngine from .task_block_yaml_data_schema import TaskBlockYamlDataSchema @@ -25,6 +26,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Task(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -62,8 +64,9 @@ class WhileLoopBlockYamlLoopBlocksItem_ForLoop(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["WhileLoopBlockYamlLoopBlocksItem"] + loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"] loop_over_parameter_key: typing.Optional[str] = None loop_variable_reference: typing.Optional[str] = None complete_if_empty: typing.Optional[bool] = None @@ -79,7 +82,29 @@ class WhileLoopBlockYamlLoopBlocksItem_ForLoop(UniversalBaseModel): extra = pydantic.Extra.allow +class WhileLoopBlockYamlLoopBlocksItem_WhileLoop(UniversalBaseModel): + block_type: typing.Literal["while_loop"] = "while_loop" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + loop_blocks: typing.List["WhileLoopBlockYamlLoopBlocksItem"] + condition: BranchCriteriaYaml + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 class WhileLoopBlockYamlLoopBlocksItem_Code(UniversalBaseModel): @@ -88,6 +113,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Code(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameter_keys: typing.Optional[typing.List[str]] = None @@ -108,6 +134,7 @@ class WhileLoopBlockYamlLoopBlocksItem_TextPrompt(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str @@ -130,6 +157,7 @@ class WhileLoopBlockYamlLoopBlocksItem_DownloadToS3(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -149,6 +177,7 @@ class WhileLoopBlockYamlLoopBlocksItem_UploadToS3(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None @@ -168,6 +197,7 @@ class WhileLoopBlockYamlLoopBlocksItem_FileUpload(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None @@ -196,6 +226,7 @@ class WhileLoopBlockYamlLoopBlocksItem_SendEmail(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host_secret_parameter_key: str smtp_port_secret_parameter_key: str @@ -223,6 +254,7 @@ class WhileLoopBlockYamlLoopBlocksItem_FileUrlParser(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None @@ -244,6 +276,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Validation(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None complete_criterion: typing.Optional[str] = None terminate_criterion: typing.Optional[str] = None @@ -267,6 +300,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Action(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -297,6 +331,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Navigation(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None @@ -332,6 +367,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Extraction(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None data_extraction_goal: str url: typing.Optional[str] = None @@ -359,6 +395,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Login(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -391,6 +428,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Wait(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: typing.Optional[int] = None @@ -410,6 +448,7 @@ class WhileLoopBlockYamlLoopBlocksItem_HumanInteraction(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None @@ -436,6 +475,7 @@ class WhileLoopBlockYamlLoopBlocksItem_FileDownload(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None @@ -467,6 +507,7 @@ class WhileLoopBlockYamlLoopBlocksItem_GotoUrl(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -486,6 +527,7 @@ class WhileLoopBlockYamlLoopBlocksItem_PdfParser(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -506,6 +548,7 @@ class WhileLoopBlockYamlLoopBlocksItem_TaskV2(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None @@ -531,6 +574,7 @@ class WhileLoopBlockYamlLoopBlocksItem_HttpRequest(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None @@ -559,6 +603,7 @@ class WhileLoopBlockYamlLoopBlocksItem_Conditional(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchConditionYaml]] = None @@ -578,6 +623,7 @@ class WhileLoopBlockYamlLoopBlocksItem_PrintPage(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None @@ -602,6 +648,7 @@ class WhileLoopBlockYamlLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None workflow_permanent_id: str payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -620,15 +667,48 @@ class WhileLoopBlockYamlLoopBlocksItem_WorkflowTrigger(UniversalBaseModel): extra = pydantic.Extra.allow -class WhileLoopBlockYamlLoopBlocksItem_WhileLoop(UniversalBaseModel): - block_type: typing.Literal["while_loop"] = "while_loop" +class WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead(UniversalBaseModel): + block_type: typing.Literal["google_sheets_read"] = "google_sheets_read" label: str next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["WhileLoopBlockYamlLoopBlocksItem"] - condition: BranchCriteriaYaml + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite(UniversalBaseModel): + block_type: typing.Literal["google_sheets_write"] = "google_sheets_write" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockYamlWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -643,6 +723,7 @@ class WhileLoopBlockYamlLoopBlocksItem_WhileLoop(UniversalBaseModel): WhileLoopBlockYamlLoopBlocksItem = typing.Union[ WhileLoopBlockYamlLoopBlocksItem_Task, WhileLoopBlockYamlLoopBlocksItem_ForLoop, + WhileLoopBlockYamlLoopBlocksItem_WhileLoop, WhileLoopBlockYamlLoopBlocksItem_Code, WhileLoopBlockYamlLoopBlocksItem_TextPrompt, WhileLoopBlockYamlLoopBlocksItem_DownloadToS3, @@ -664,8 +745,27 @@ WhileLoopBlockYamlLoopBlocksItem = typing.Union[ WhileLoopBlockYamlLoopBlocksItem_HttpRequest, WhileLoopBlockYamlLoopBlocksItem_Conditional, WhileLoopBlockYamlLoopBlocksItem_PrintPage, - WhileLoopBlockYamlLoopBlocksItem_WhileLoop, WhileLoopBlockYamlLoopBlocksItem_WorkflowTrigger, + WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsRead, + WhileLoopBlockYamlLoopBlocksItem_GoogleSheetsWrite, ] -update_forward_refs(WhileLoopBlockYamlLoopBlocksItem_ForLoop) -update_forward_refs(WhileLoopBlockYamlLoopBlocksItem_WhileLoop) +# Manual patch: see for_loop_block.py header note. +try: + from .for_loop_block_yaml_loop_blocks_item import ForLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +except ImportError: + pass +else: + update_forward_refs(WhileLoopBlockYamlLoopBlocksItem_ForLoop) + update_forward_refs(WhileLoopBlockYamlLoopBlocksItem_WhileLoop) + from . import for_loop_block_yaml_loop_blocks_item as _flylb + _flylb.WhileLoopBlockYamlLoopBlocksItem = WhileLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_flylb.ForLoopBlockYamlLoopBlocksItem_ForLoop) + update_forward_refs(_flylb.ForLoopBlockYamlLoopBlocksItem_WhileLoop) + from . import for_loop_block_yaml as _flby + _flby.ForLoopBlockYamlLoopBlocksItem = ForLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + _flby.WhileLoopBlockYamlLoopBlocksItem = WhileLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_flby.ForLoopBlockYaml) + from . import while_loop_block_yaml as _wlby + _wlby.ForLoopBlockYamlLoopBlocksItem = ForLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + _wlby.WhileLoopBlockYamlLoopBlocksItem = WhileLoopBlockYamlLoopBlocksItem # type: ignore[attr-defined] + update_forward_refs(_wlby.WhileLoopBlockYaml) diff --git a/skyvern/client/types/workflow.py b/skyvern/client/types/workflow.py index 9b4af933e..99bec408d 100644 --- a/skyvern/client/types/workflow.py +++ b/skyvern/client/types/workflow.py @@ -27,10 +27,13 @@ class Workflow(UniversalBaseModel): totp_verification_url: typing.Optional[str] = None totp_identifier: typing.Optional[str] = None persist_browser_session: typing.Optional[bool] = None + browser_profile_id: typing.Optional[str] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None status: typing.Optional[WorkflowStatus] = None max_screenshot_scrolls: typing.Optional[int] = None + max_elapsed_time_minutes: typing.Optional[int] = None extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None run_with: typing.Optional[str] = None ai_fallback: typing.Optional[bool] = None cache_key: typing.Optional[str] = None @@ -41,6 +44,8 @@ class Workflow(UniversalBaseModel): sequential_key: typing.Optional[str] = None folder_id: typing.Optional[str] = None import_error: typing.Optional[str] = None + created_by: typing.Optional[str] = None + edited_by: typing.Optional[str] = None created_at: dt.datetime modified_at: dt.datetime deleted_at: typing.Optional[dt.datetime] = None @@ -57,5 +62,6 @@ class Workflow(UniversalBaseModel): from .context_parameter import ContextParameter # noqa: E402, F401, I001 from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +from .while_loop_block import WhileLoopBlock # noqa: E402, F401, I001 update_forward_refs(Workflow) diff --git a/skyvern/client/types/workflow_create_yaml_request.py b/skyvern/client/types/workflow_create_yaml_request.py index e30c75e13..d97f912a1 100644 --- a/skyvern/client/types/workflow_create_yaml_request.py +++ b/skyvern/client/types/workflow_create_yaml_request.py @@ -19,11 +19,14 @@ class WorkflowCreateYamlRequest(UniversalBaseModel): totp_verification_url: typing.Optional[str] = None totp_identifier: typing.Optional[str] = None persist_browser_session: typing.Optional[bool] = None + browser_profile_id: typing.Optional[str] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None workflow_definition: WorkflowDefinitionYaml is_saved_task: typing.Optional[bool] = None max_screenshot_scrolls: typing.Optional[int] = None + max_elapsed_time_minutes: typing.Optional[int] = None extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None status: typing.Optional[WorkflowStatus] = None run_with: typing.Optional[str] = None ai_fallback: typing.Optional[bool] = None @@ -46,5 +49,6 @@ class WorkflowCreateYamlRequest(UniversalBaseModel): from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 update_forward_refs(WorkflowCreateYamlRequest) diff --git a/skyvern/client/types/workflow_definition.py b/skyvern/client/types/workflow_definition.py index 55d611f8e..72c4bdde4 100644 --- a/skyvern/client/types/workflow_definition.py +++ b/skyvern/client/types/workflow_definition.py @@ -15,6 +15,8 @@ class WorkflowDefinition(UniversalBaseModel): parameters: typing.List[WorkflowDefinitionParametersItem] blocks: typing.List[WorkflowDefinitionBlocksItem] finally_block_label: typing.Optional[str] = None + error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + workflow_system_prompt: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -28,5 +30,6 @@ class WorkflowDefinition(UniversalBaseModel): from .context_parameter import ContextParameter # noqa: E402, F401, I001 from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +from .while_loop_block import WhileLoopBlock # noqa: E402, F401, I001 update_forward_refs(WorkflowDefinition) diff --git a/skyvern/client/types/workflow_definition_blocks_item.py b/skyvern/client/types/workflow_definition_blocks_item.py index b7f8a85b0..f36781f02 100644 --- a/skyvern/client/types/workflow_definition_blocks_item.py +++ b/skyvern/client/types/workflow_definition_blocks_item.py @@ -21,6 +21,9 @@ from .file_storage_type import FileStorageType from .file_type import FileType from .for_loop_block_data_schema import ForLoopBlockDataSchema from .for_loop_block_loop_over import ForLoopBlockLoopOver +from .google_sheets_read_block_parameters_item import GoogleSheetsReadBlockParametersItem +from .google_sheets_write_block_parameters_item import GoogleSheetsWriteBlockParametersItem +from .google_sheets_write_block_write_mode import GoogleSheetsWriteBlockWriteMode from .http_request_block_parameters_item import HttpRequestBlockParametersItem from .human_interaction_block_data_schema import HumanInteractionBlockDataSchema from .human_interaction_block_parameters_item import HumanInteractionBlockParametersItem @@ -51,6 +54,7 @@ class WorkflowDefinitionBlocksItem_Action(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -72,6 +76,7 @@ class WorkflowDefinitionBlocksItem_Action(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -91,6 +96,7 @@ class WorkflowDefinitionBlocksItem_Code(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameters: typing.Optional[typing.List[CodeBlockParametersItem]] = None @@ -113,6 +119,7 @@ class WorkflowDefinitionBlocksItem_Conditional(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchCondition]] = None @@ -134,6 +141,7 @@ class WorkflowDefinitionBlocksItem_DownloadToS3(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -155,6 +163,7 @@ class WorkflowDefinitionBlocksItem_Extraction(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -176,6 +185,7 @@ class WorkflowDefinitionBlocksItem_Extraction(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -195,6 +205,7 @@ class WorkflowDefinitionBlocksItem_FileDownload(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -216,6 +227,7 @@ class WorkflowDefinitionBlocksItem_FileDownload(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -235,6 +247,7 @@ class WorkflowDefinitionBlocksItem_FileUpload(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None @@ -264,6 +277,7 @@ class WorkflowDefinitionBlocksItem_FileUrlParser(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None @@ -287,6 +301,7 @@ class WorkflowDefinitionBlocksItem_ForLoop(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"] loop_over: typing.Optional[ForLoopBlockLoopOver] = None @@ -304,10 +319,66 @@ class WorkflowDefinitionBlocksItem_ForLoop(UniversalBaseModel): extra = pydantic.Extra.allow -from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 from .for_loop_block_loop_blocks_item import ForLoopBlockLoopBlocksItem # noqa: E402, F401, I001 +class WorkflowDefinitionBlocksItem_GoogleSheetsRead(UniversalBaseModel): + block_type: typing.Literal["google_sheets_read"] = "google_sheets_read" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsReadBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class WorkflowDefinitionBlocksItem_GoogleSheetsWrite(UniversalBaseModel): + block_type: typing.Literal["google_sheets_write"] = "google_sheets_write" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[GoogleSheetsWriteBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + class WorkflowDefinitionBlocksItem_GotoUrl(UniversalBaseModel): block_type: typing.Literal["goto_url"] = "goto_url" label: str @@ -316,6 +387,7 @@ class WorkflowDefinitionBlocksItem_GotoUrl(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: str @@ -337,6 +409,7 @@ class WorkflowDefinitionBlocksItem_GotoUrl(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -356,6 +429,7 @@ class WorkflowDefinitionBlocksItem_HttpRequest(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None @@ -386,6 +460,7 @@ class WorkflowDefinitionBlocksItem_HumanInteraction(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -407,6 +482,7 @@ class WorkflowDefinitionBlocksItem_HumanInteraction(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None negative_descriptor: typing.Optional[str] = None @@ -434,6 +510,7 @@ class WorkflowDefinitionBlocksItem_Login(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -455,6 +532,7 @@ class WorkflowDefinitionBlocksItem_Login(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -474,6 +552,7 @@ class WorkflowDefinitionBlocksItem_Navigation(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -495,6 +574,7 @@ class WorkflowDefinitionBlocksItem_Navigation(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -514,6 +594,7 @@ class WorkflowDefinitionBlocksItem_PdfParser(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -536,6 +617,7 @@ class WorkflowDefinitionBlocksItem_PrintPage(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None @@ -562,6 +644,7 @@ class WorkflowDefinitionBlocksItem_SendEmail(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host: AwsSecretParameter smtp_port: AwsSecretParameter @@ -591,6 +674,7 @@ class WorkflowDefinitionBlocksItem_Task(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -612,6 +696,7 @@ class WorkflowDefinitionBlocksItem_Task(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -631,6 +716,7 @@ class WorkflowDefinitionBlocksItem_TaskV2(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None @@ -657,6 +743,7 @@ class WorkflowDefinitionBlocksItem_TextPrompt(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str @@ -681,6 +768,7 @@ class WorkflowDefinitionBlocksItem_UploadToS3(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None @@ -702,6 +790,7 @@ class WorkflowDefinitionBlocksItem_Validation(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None task_type: typing.Optional[str] = None url: typing.Optional[str] = None @@ -723,6 +812,7 @@ class WorkflowDefinitionBlocksItem_Validation(UniversalBaseModel): complete_verification: typing.Optional[bool] = None include_action_history_in_verification: typing.Optional[bool] = None download_timeout: typing.Optional[float] = None + include_extracted_text: typing.Optional[bool] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -742,6 +832,7 @@ class WorkflowDefinitionBlocksItem_Wait(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: int parameters: typing.Optional[typing.List[WaitBlockParametersItem]] = None @@ -756,32 +847,6 @@ class WorkflowDefinitionBlocksItem_Wait(UniversalBaseModel): extra = pydantic.Extra.allow -class WorkflowDefinitionBlocksItem_WorkflowTrigger(UniversalBaseModel): - block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" - label: str - next_block_label: typing.Optional[str] = None - output_parameter: OutputParameter - continue_on_failure: typing.Optional[bool] = None - model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - disable_cache: typing.Optional[bool] = None - next_loop_on_failure: typing.Optional[bool] = None - workflow_permanent_id: str - payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - wait_for_completion: typing.Optional[bool] = None - browser_session_id: typing.Optional[str] = None - use_parent_browser_session: typing.Optional[bool] = None - parameters: typing.Optional[typing.List[WorkflowTriggerBlockParametersItem]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow - - class WorkflowDefinitionBlocksItem_WhileLoop(UniversalBaseModel): block_type: typing.Literal["while_loop"] = "while_loop" label: str @@ -790,8 +855,9 @@ class WorkflowDefinitionBlocksItem_WhileLoop(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["WorkflowDefinitionBlocksItem"] + loop_blocks: typing.List["WhileLoopBlockLoopBlocksItem"] condition: WhileLoopBlockCondition if IS_PYDANTIC_V2: @@ -804,6 +870,38 @@ class WorkflowDefinitionBlocksItem_WhileLoop(UniversalBaseModel): extra = pydantic.Extra.allow +from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001 +from .while_loop_block import WhileLoopBlock # noqa: E402, F401, I001 +from .while_loop_block_loop_blocks_item import WhileLoopBlockLoopBlocksItem # noqa: E402, F401, I001 + + +class WorkflowDefinitionBlocksItem_WorkflowTrigger(UniversalBaseModel): + block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" + label: str + next_block_label: typing.Optional[str] = None + output_parameter: OutputParameter + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + workflow_permanent_id: str + payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + wait_for_completion: typing.Optional[bool] = None + browser_session_id: typing.Optional[str] = None + use_parent_browser_session: typing.Optional[bool] = None + parameters: typing.Optional[typing.List[WorkflowTriggerBlockParametersItem]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + from .context_parameter import ContextParameter # noqa: E402, F401, I001 WorkflowDefinitionBlocksItem = typing.Union[ @@ -816,6 +914,8 @@ WorkflowDefinitionBlocksItem = typing.Union[ WorkflowDefinitionBlocksItem_FileUpload, WorkflowDefinitionBlocksItem_FileUrlParser, WorkflowDefinitionBlocksItem_ForLoop, + WorkflowDefinitionBlocksItem_GoogleSheetsRead, + WorkflowDefinitionBlocksItem_GoogleSheetsWrite, WorkflowDefinitionBlocksItem_GotoUrl, WorkflowDefinitionBlocksItem_HttpRequest, WorkflowDefinitionBlocksItem_HumanInteraction, @@ -838,6 +938,8 @@ update_forward_refs(WorkflowDefinitionBlocksItem_Code) update_forward_refs(WorkflowDefinitionBlocksItem_Extraction) update_forward_refs(WorkflowDefinitionBlocksItem_FileDownload) update_forward_refs(WorkflowDefinitionBlocksItem_ForLoop) +update_forward_refs(WorkflowDefinitionBlocksItem_GoogleSheetsRead) +update_forward_refs(WorkflowDefinitionBlocksItem_GoogleSheetsWrite) update_forward_refs(WorkflowDefinitionBlocksItem_GotoUrl) update_forward_refs(WorkflowDefinitionBlocksItem_HttpRequest) update_forward_refs(WorkflowDefinitionBlocksItem_HumanInteraction) diff --git a/skyvern/client/types/workflow_definition_yaml.py b/skyvern/client/types/workflow_definition_yaml.py index b59071b12..be5309f08 100644 --- a/skyvern/client/types/workflow_definition_yaml.py +++ b/skyvern/client/types/workflow_definition_yaml.py @@ -15,6 +15,8 @@ class WorkflowDefinitionYaml(UniversalBaseModel): parameters: typing.List[WorkflowDefinitionYamlParametersItem] blocks: typing.List[WorkflowDefinitionYamlBlocksItem] finally_block_label: typing.Optional[str] = None + error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + workflow_system_prompt: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 @@ -27,5 +29,6 @@ class WorkflowDefinitionYaml(UniversalBaseModel): from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 update_forward_refs(WorkflowDefinitionYaml) diff --git a/skyvern/client/types/workflow_definition_yaml_blocks_item.py b/skyvern/client/types/workflow_definition_yaml_blocks_item.py index e43eee71b..5c0b65fd4 100644 --- a/skyvern/client/types/workflow_definition_yaml_blocks_item.py +++ b/skyvern/client/types/workflow_definition_yaml_blocks_item.py @@ -14,6 +14,7 @@ from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema from .file_storage_type import FileStorageType from .file_type import FileType from .for_loop_block_yaml_data_schema import ForLoopBlockYamlDataSchema +from .google_sheets_write_block_yaml_write_mode import GoogleSheetsWriteBlockYamlWriteMode from .pdf_format import PdfFormat from .run_engine import RunEngine from .task_block_yaml_data_schema import TaskBlockYamlDataSchema @@ -25,6 +26,7 @@ class WorkflowDefinitionYamlBlocksItem_Action(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -55,6 +57,7 @@ class WorkflowDefinitionYamlBlocksItem_Code(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None code: str parameter_keys: typing.Optional[typing.List[str]] = None @@ -75,6 +78,7 @@ class WorkflowDefinitionYamlBlocksItem_Conditional(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None branch_conditions: typing.Optional[typing.List[BranchConditionYaml]] = None @@ -94,6 +98,7 @@ class WorkflowDefinitionYamlBlocksItem_DownloadToS3(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -113,6 +118,7 @@ class WorkflowDefinitionYamlBlocksItem_Extraction(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None data_extraction_goal: str url: typing.Optional[str] = None @@ -140,6 +146,7 @@ class WorkflowDefinitionYamlBlocksItem_FileDownload(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None @@ -171,6 +178,7 @@ class WorkflowDefinitionYamlBlocksItem_FileUpload(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None storage_type: typing.Optional[FileStorageType] = None s3bucket: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="s3_bucket")] = None @@ -199,6 +207,7 @@ class WorkflowDefinitionYamlBlocksItem_FileUrlParser(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str file_type: typing.Optional[FileType] = None @@ -220,6 +229,7 @@ class WorkflowDefinitionYamlBlocksItem_ForLoop(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"] loop_over_parameter_key: typing.Optional[str] = None @@ -237,16 +247,69 @@ class WorkflowDefinitionYamlBlocksItem_ForLoop(UniversalBaseModel): extra = pydantic.Extra.allow -from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 from .for_loop_block_yaml_loop_blocks_item import ForLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 +class WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead(UniversalBaseModel): + block_type: typing.Literal["google_sheets_read"] = "google_sheets_read" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + has_header_row: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite(UniversalBaseModel): + block_type: typing.Literal["google_sheets_write"] = "google_sheets_write" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + spreadsheet_url: str + sheet_name: typing.Optional[str] = None + range: typing.Optional[str] = None + credential_id: typing.Optional[str] = None + write_mode: typing.Optional[GoogleSheetsWriteBlockYamlWriteMode] = None + values: typing.Optional[str] = None + column_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + create_sheet_if_missing: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + class WorkflowDefinitionYamlBlocksItem_GotoUrl(UniversalBaseModel): block_type: typing.Literal["goto_url"] = "goto_url" label: str next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: str @@ -266,6 +329,7 @@ class WorkflowDefinitionYamlBlocksItem_HttpRequest(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None method: typing.Optional[str] = None url: typing.Optional[str] = None @@ -294,6 +358,7 @@ class WorkflowDefinitionYamlBlocksItem_HumanInteraction(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None instructions: typing.Optional[str] = None positive_descriptor: typing.Optional[str] = None @@ -320,6 +385,7 @@ class WorkflowDefinitionYamlBlocksItem_Login(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -352,6 +418,7 @@ class WorkflowDefinitionYamlBlocksItem_Navigation(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None navigation_goal: str url: typing.Optional[str] = None @@ -387,6 +454,7 @@ class WorkflowDefinitionYamlBlocksItem_PdfParser(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None file_url: str json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None @@ -407,6 +475,7 @@ class WorkflowDefinitionYamlBlocksItem_PrintPage(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None include_timestamp: typing.Optional[bool] = None custom_filename: typing.Optional[str] = None @@ -431,6 +500,7 @@ class WorkflowDefinitionYamlBlocksItem_SendEmail(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None smtp_host_secret_parameter_key: str smtp_port_secret_parameter_key: str @@ -458,6 +528,7 @@ class WorkflowDefinitionYamlBlocksItem_Task(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None url: typing.Optional[str] = None title: typing.Optional[str] = None @@ -495,6 +566,7 @@ class WorkflowDefinitionYamlBlocksItem_TaskV2(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None prompt: str url: typing.Optional[str] = None @@ -520,6 +592,7 @@ class WorkflowDefinitionYamlBlocksItem_TextPrompt(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None llm_key: typing.Optional[str] = None prompt: str @@ -542,6 +615,7 @@ class WorkflowDefinitionYamlBlocksItem_UploadToS3(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None path: typing.Optional[str] = None @@ -561,6 +635,7 @@ class WorkflowDefinitionYamlBlocksItem_Validation(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None complete_criterion: typing.Optional[str] = None terminate_criterion: typing.Optional[str] = None @@ -584,6 +659,7 @@ class WorkflowDefinitionYamlBlocksItem_Wait(UniversalBaseModel): next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None wait_sec: typing.Optional[int] = None @@ -597,38 +673,15 @@ class WorkflowDefinitionYamlBlocksItem_Wait(UniversalBaseModel): extra = pydantic.Extra.allow -class WorkflowDefinitionYamlBlocksItem_WorkflowTrigger(UniversalBaseModel): - block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" - label: str - next_block_label: typing.Optional[str] = None - continue_on_failure: typing.Optional[bool] = None - model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - next_loop_on_failure: typing.Optional[bool] = None - workflow_permanent_id: str - payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - wait_for_completion: typing.Optional[bool] = None - browser_session_id: typing.Optional[str] = None - use_parent_browser_session: typing.Optional[bool] = None - parameter_keys: typing.Optional[typing.List[str]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow - - class WorkflowDefinitionYamlBlocksItem_WhileLoop(UniversalBaseModel): block_type: typing.Literal["while_loop"] = "while_loop" label: str next_block_label: typing.Optional[str] = None continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None - loop_blocks: typing.List["WorkflowDefinitionYamlBlocksItem"] + loop_blocks: typing.List["WhileLoopBlockYamlLoopBlocksItem"] condition: BranchCriteriaYaml if IS_PYDANTIC_V2: @@ -641,6 +694,36 @@ class WorkflowDefinitionYamlBlocksItem_WhileLoop(UniversalBaseModel): extra = pydantic.Extra.allow +from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml_loop_blocks_item import WhileLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001 + + +class WorkflowDefinitionYamlBlocksItem_WorkflowTrigger(UniversalBaseModel): + block_type: typing.Literal["workflow_trigger"] = "workflow_trigger" + label: str + next_block_label: typing.Optional[str] = None + continue_on_failure: typing.Optional[bool] = None + model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None + next_loop_on_failure: typing.Optional[bool] = None + workflow_permanent_id: str + payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + wait_for_completion: typing.Optional[bool] = None + browser_session_id: typing.Optional[str] = None + use_parent_browser_session: typing.Optional[bool] = None + parameter_keys: typing.Optional[typing.List[str]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + WorkflowDefinitionYamlBlocksItem = typing.Union[ WorkflowDefinitionYamlBlocksItem_Action, WorkflowDefinitionYamlBlocksItem_Code, @@ -651,6 +734,8 @@ WorkflowDefinitionYamlBlocksItem = typing.Union[ WorkflowDefinitionYamlBlocksItem_FileUpload, WorkflowDefinitionYamlBlocksItem_FileUrlParser, WorkflowDefinitionYamlBlocksItem_ForLoop, + WorkflowDefinitionYamlBlocksItem_GoogleSheetsRead, + WorkflowDefinitionYamlBlocksItem_GoogleSheetsWrite, WorkflowDefinitionYamlBlocksItem_GotoUrl, WorkflowDefinitionYamlBlocksItem_HttpRequest, WorkflowDefinitionYamlBlocksItem_HumanInteraction, diff --git a/skyvern/client/types/workflow_request.py b/skyvern/client/types/workflow_request.py index bfe77684e..b21566e65 100644 --- a/skyvern/client/types/workflow_request.py +++ b/skyvern/client/types/workflow_request.py @@ -31,5 +31,6 @@ class WorkflowRequest(UniversalBaseModel): from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001 +from .while_loop_block_yaml import WhileLoopBlockYaml # noqa: E402, F401, I001 update_forward_refs(WorkflowRequest) diff --git a/skyvern/client/types/workflow_run.py b/skyvern/client/types/workflow_run.py index c1bb8e7ab..a201c2188 100644 --- a/skyvern/client/types/workflow_run.py +++ b/skyvern/client/types/workflow_run.py @@ -21,6 +21,7 @@ class WorkflowRun(UniversalBaseModel): debug_session_id: typing.Optional[str] = None status: WorkflowRunStatus extra_http_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None proxy_location: typing.Optional[WorkflowRunProxyLocation] = None webhook_callback_url: typing.Optional[str] = None webhook_failure_reason: typing.Optional[str] = None @@ -31,6 +32,7 @@ class WorkflowRun(UniversalBaseModel): parent_workflow_run_id: typing.Optional[str] = None workflow_title: typing.Optional[str] = None max_screenshot_scrolls: typing.Optional[int] = None + max_elapsed_time_minutes: typing.Optional[int] = None browser_address: typing.Optional[str] = None run_with: typing.Optional[str] = None script_run: typing.Optional[ScriptRunResponse] = None @@ -41,6 +43,10 @@ class WorkflowRun(UniversalBaseModel): code_gen: typing.Optional[bool] = None trigger_type: typing.Optional[WorkflowRunTriggerType] = None workflow_schedule_id: typing.Optional[str] = None + ignore_inherited_workflow_system_prompt: typing.Optional[bool] = None + copilot_session_id: typing.Optional[str] = None + credits_used: typing.Optional[int] = None + cached_credits_used: typing.Optional[int] = None queued_at: typing.Optional[dt.datetime] = None started_at: typing.Optional[dt.datetime] = None finished_at: typing.Optional[dt.datetime] = None diff --git a/skyvern/client/types/workflow_run_block.py b/skyvern/client/types/workflow_run_block.py index b47642342..22d32371b 100644 --- a/skyvern/client/types/workflow_run_block.py +++ b/skyvern/client/types/workflow_run_block.py @@ -41,6 +41,7 @@ class WorkflowRunBlock(UniversalBaseModel): created_at: dt.datetime modified_at: dt.datetime include_action_history_in_verification: typing.Optional[bool] = None + include_extracted_text: typing.Optional[bool] = None duration: typing.Optional[float] = None loop_values: typing.Optional[typing.List[typing.Optional[typing.Any]]] = None current_value: typing.Optional[str] = None diff --git a/skyvern/client/types/workflow_run_request_input_proxy_location.py b/skyvern/client/types/workflow_run_request_input_proxy_location.py new file mode 100644 index 000000000..f9bba1334 --- /dev/null +++ b/skyvern/client/types/workflow_run_request_input_proxy_location.py @@ -0,0 +1,10 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from .geo_target import GeoTarget +from .proxy_location import ProxyLocation + +WorkflowRunRequestInputProxyLocation = typing.Union[ + ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]] +] diff --git a/skyvern/client/types/workflow_run_request.py b/skyvern/client/types/workflow_run_request_output.py similarity index 81% rename from skyvern/client/types/workflow_run_request.py rename to skyvern/client/types/workflow_run_request_output.py index 57fdb1cd2..5c6a2ba49 100644 --- a/skyvern/client/types/workflow_run_request.py +++ b/skyvern/client/types/workflow_run_request_output.py @@ -4,10 +4,10 @@ import typing import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .workflow_run_request_proxy_location import WorkflowRunRequestProxyLocation +from .workflow_run_request_output_proxy_location import WorkflowRunRequestOutputProxyLocation -class WorkflowRunRequest(UniversalBaseModel): +class WorkflowRunRequestOutput(UniversalBaseModel): workflow_id: str = pydantic.Field() """ ID of the workflow to run. Workflow ID starts with `wpid_`. @@ -23,7 +23,7 @@ class WorkflowRunRequest(UniversalBaseModel): The title for this workflow run """ - proxy_location: typing.Optional[WorkflowRunRequestProxyLocation] = pydantic.Field(default=None) + proxy_location: typing.Optional[WorkflowRunRequestOutputProxyLocation] = pydantic.Field(default=None) """ Geographic Proxy location to route the browser traffic through. This is only available in Skyvern Cloud. @@ -40,6 +40,7 @@ class WorkflowRunRequest(UniversalBaseModel): - RESIDENTIAL_NZ: New Zealand - RESIDENTIAL_PH: Philippines - RESIDENTIAL_KR: South Korea + - RESIDENTIAL_SA: Saudi Arabia - RESIDENTIAL_ZA: South Africa - RESIDENTIAL_AR: Argentina - RESIDENTIAL_AU: Australia @@ -56,6 +57,8 @@ class WorkflowRunRequest(UniversalBaseModel): - US-FL: Florida (deprecated, routes through RESIDENTIAL_ISP) - US-WA: Washington (deprecated, routes through RESIDENTIAL_ISP) - NONE: No proxy + + For self-hosted deployments, you can pass a custom proxy URL as a dict: {"url": "http://user:password@proxy.example.com:8080"}. This routes the browser through your own proxy server and takes precedence over any globally configured proxy pool. Can also be a GeoTarget object for granular city/state targeting: {"country": "US", "subdivision": "CA", "city": "San Francisco"} """ @@ -101,6 +104,11 @@ class WorkflowRunRequest(UniversalBaseModel): The extra HTTP headers for the requests in browser. """ + cdp_connect_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = pydantic.Field(default=None) + """ + HTTP headers attached ONLY to the CDP WebSocket handshake when connecting to a remote browser via browser_address. Use this for browser-provider auth (e.g., x-api-key for Skyvern Cloud, Browserless, or similar). These headers are NEVER forwarded to target websites. + """ + browser_address: typing.Optional[str] = pydantic.Field(default=None) """ The CDP address for the workflow run. @@ -116,7 +124,7 @@ class WorkflowRunRequest(UniversalBaseModel): Whether to run the workflow with agent or code. Null inherits from the workflow setting. """ - run_metadata: typing.Optional[typing.Dict[str, str]] = pydantic.Field(default=None) + run_metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = pydantic.Field(default=None) """ String key/value metadata to attach to this workflow run for analytics tag filtering. """ diff --git a/skyvern/client/types/workflow_run_request_output_proxy_location.py b/skyvern/client/types/workflow_run_request_output_proxy_location.py new file mode 100644 index 000000000..2415bee9c --- /dev/null +++ b/skyvern/client/types/workflow_run_request_output_proxy_location.py @@ -0,0 +1,10 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from .geo_target import GeoTarget +from .proxy_location import ProxyLocation + +WorkflowRunRequestOutputProxyLocation = typing.Union[ + ProxyLocation, GeoTarget, typing.Dict[str, typing.Optional[typing.Any]] +] diff --git a/skyvern/client/types/workflow_run_response.py b/skyvern/client/types/workflow_run_response.py index b0476102b..9bcb192f9 100644 --- a/skyvern/client/types/workflow_run_response.py +++ b/skyvern/client/types/workflow_run_response.py @@ -8,7 +8,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .file_info import FileInfo from .run_status import RunStatus from .script_run_response import ScriptRunResponse -from .workflow_run_request import WorkflowRunRequest +from .workflow_run_request_output import WorkflowRunRequestOutput from .workflow_run_response_output import WorkflowRunResponseOutput @@ -38,6 +38,11 @@ class WorkflowRunResponse(UniversalBaseModel): URL to the recording of the run """ + recording_archived: typing.Optional[bool] = pydantic.Field(default=None) + """ + True when the recording exists but has been archived to cold storage and is not currently accessible. + """ + screenshot_urls: typing.Optional[typing.List[str]] = pydantic.Field(default=None) """ List of last n screenshot URLs in reverse chronological order - the first one the list is the latest screenshot. @@ -118,7 +123,12 @@ class WorkflowRunResponse(UniversalBaseModel): Whether to fallback to AI if code run fails. """ - run_request: typing.Optional[WorkflowRunRequest] = pydantic.Field(default=None) + script_id: typing.Optional[str] = pydantic.Field(default=None) + """ + ID of the cached script used for this workflow run, if any. + """ + + run_request: typing.Optional[WorkflowRunRequestOutput] = pydantic.Field(default=None) """ The original request parameters used to start this workflow run """ diff --git a/skyvern/client/types/workflow_trigger_block.py b/skyvern/client/types/workflow_trigger_block.py index 6fac10299..2938083f3 100644 --- a/skyvern/client/types/workflow_trigger_block.py +++ b/skyvern/client/types/workflow_trigger_block.py @@ -25,6 +25,7 @@ class WorkflowTriggerBlock(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None disable_cache: typing.Optional[bool] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None workflow_permanent_id: str payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None diff --git a/skyvern/client/types/workflow_trigger_block_yaml.py b/skyvern/client/types/workflow_trigger_block_yaml.py index 94d24c387..73945b571 100644 --- a/skyvern/client/types/workflow_trigger_block_yaml.py +++ b/skyvern/client/types/workflow_trigger_block_yaml.py @@ -19,6 +19,7 @@ class WorkflowTriggerBlockYaml(UniversalBaseModel): continue_on_failure: typing.Optional[bool] = None model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ignore_workflow_system_prompt: typing.Optional[bool] = None next_loop_on_failure: typing.Optional[bool] = None workflow_permanent_id: str payload: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None diff --git a/skyvern/client/workflows/__init__.py b/skyvern/client/workflows/__init__.py new file mode 100644 index 000000000..5cde0202d --- /dev/null +++ b/skyvern/client/workflows/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/skyvern/client/workflows/client.py b/skyvern/client/workflows/client.py new file mode 100644 index 000000000..ce7c2c376 --- /dev/null +++ b/skyvern/client/workflows/client.py @@ -0,0 +1,115 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from .raw_client import AsyncRawWorkflowsClient, RawWorkflowsClient + + +class WorkflowsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawWorkflowsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawWorkflowsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawWorkflowsClient + """ + return self._raw_client + + def reset_workflow_browser_profile( + self, workflow_permanent_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Clear the persisted browser profile for a workflow that uses `Save & Reuse Session`. The next run will start from a fresh browser state. Use when a saved profile is corrupted. + + Parameters + ---------- + workflow_permanent_id : str + The permanent ID of the workflow. Starts with `wpid_`. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from skyvern import Skyvern + + client = Skyvern( + api_key="YOUR_API_KEY", + ) + client.workflows.reset_workflow_browser_profile( + workflow_permanent_id="wpid_123", + ) + """ + _response = self._raw_client.reset_workflow_browser_profile( + workflow_permanent_id, request_options=request_options + ) + return _response.data + + +class AsyncWorkflowsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawWorkflowsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawWorkflowsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawWorkflowsClient + """ + return self._raw_client + + async def reset_workflow_browser_profile( + self, workflow_permanent_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + Clear the persisted browser profile for a workflow that uses `Save & Reuse Session`. The next run will start from a fresh browser state. Use when a saved profile is corrupted. + + Parameters + ---------- + workflow_permanent_id : str + The permanent ID of the workflow. Starts with `wpid_`. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from skyvern import AsyncSkyvern + + client = AsyncSkyvern( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.workflows.reset_workflow_browser_profile( + workflow_permanent_id="wpid_123", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.reset_workflow_browser_profile( + workflow_permanent_id, request_options=request_options + ) + return _response.data diff --git a/skyvern/client/workflows/raw_client.py b/skyvern/client/workflows/raw_client.py new file mode 100644 index 000000000..75aa6b882 --- /dev/null +++ b/skyvern/client/workflows/raw_client.py @@ -0,0 +1,152 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.jsonable_encoder import jsonable_encoder +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..errors.unprocessable_entity_error import UnprocessableEntityError + + +class RawWorkflowsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def reset_workflow_browser_profile( + self, workflow_permanent_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[None]: + """ + Clear the persisted browser profile for a workflow that uses `Save & Reuse Session`. The next run will start from a fresh browser state. Use when a saved profile is corrupted. + + Parameters + ---------- + workflow_permanent_id : str + The permanent ID of the workflow. Starts with `wpid_`. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[None] + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/workflows/{jsonable_encoder(workflow_permanent_id)}/browser_session/reset_profile", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return HttpResponse(response=_response, data=None) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + +class AsyncRawWorkflowsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def reset_workflow_browser_profile( + self, workflow_permanent_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[None]: + """ + Clear the persisted browser profile for a workflow that uses `Save & Reuse Session`. The next run will start from a fresh browser state. Use when a saved profile is corrupted. + + Parameters + ---------- + workflow_permanent_id : str + The permanent ID of the workflow. Starts with `wpid_`. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[None] + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/workflows/{jsonable_encoder(workflow_permanent_id)}/browser_session/reset_profile", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return AsyncHttpResponse(response=_response, data=None) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + typing.Optional[typing.Any], + parse_obj_as( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/tests/unit/test_mcp_block_type_parity.py b/tests/unit/test_mcp_block_type_parity.py index 13935260e..9ee5c6fee 100644 --- a/tests/unit/test_mcp_block_type_parity.py +++ b/tests/unit/test_mcp_block_type_parity.py @@ -94,22 +94,7 @@ class BlockDriftEntry: # Allowlist: block types present in the backend but not yet regenerated into # the vendored Fern SDK. Run `fern generate` using the Skyvern Cloud-only # runbook to resync, then remove the entry here. -_KNOWN_DRIFT_ALLOWLIST: tuple[BlockDriftEntry, ...] = ( - BlockDriftEntry( - block_type="google_sheets_read", - ticket="SKY-9227", - owner="@wintonzheng", - added_at=date(2026, 4, 23), - notes="Clears with `google_sheets_write` at the next Fern SDK regeneration.", - ), - BlockDriftEntry( - block_type="google_sheets_write", - ticket="SKY-9227", - owner="@wintonzheng", - added_at=date(2026, 4, 23), - notes="Clears with `google_sheets_read` at the next Fern SDK regeneration.", - ), -) +_KNOWN_DRIFT_ALLOWLIST: tuple[BlockDriftEntry, ...] = () def _allowlisted_block_types() -> set[str]: diff --git a/tests/unit/test_sdk_run_metadata.py b/tests/unit/test_sdk_run_metadata.py index dc7c8589c..11e7a2e93 100644 --- a/tests/unit/test_sdk_run_metadata.py +++ b/tests/unit/test_sdk_run_metadata.py @@ -5,7 +5,7 @@ import httpx import pytest from skyvern.client import AsyncSkyvern, Skyvern -from skyvern.client.types.workflow_run_request import WorkflowRunRequest +from skyvern.client.types.workflow_run_request_output import WorkflowRunRequestOutput as WorkflowRunRequest def test_workflow_run_request_accepts_run_metadata() -> None: diff --git a/uv.lock b/uv.lock index 088286ea1..d43dad90a 100644 --- a/uv.lock +++ b/uv.lock @@ -5715,7 +5715,7 @@ wheels = [ [[package]] name = "skyvern" -version = "1.0.36" +version = "1.0.37" source = { editable = "." } dependencies = [ { name = "cachetools" },