SDK: download files improments (#4198)

This commit is contained in:
Stanislav Novosad
2025-12-04 13:44:47 -07:00
committed by GitHub
parent 4665f8907d
commit 4b9c89e22b
114 changed files with 1084 additions and 143 deletions

View File

@@ -1310,12 +1310,12 @@
}
}
},
"400": {
"description": "Folder not found"
},
"404": {
"description": "Workflow not found"
},
"400": {
"description": "Folder not found"
},
"422": {
"description": "Validation Error",
"content": {
@@ -1620,12 +1620,12 @@
}
}
},
"400": {
"description": "Timeline not available for this run type"
},
"404": {
"description": "Run not found"
},
"400": {
"description": "Timeline not available for this run type"
},
"422": {
"description": "Validation Error",
"content": {
@@ -2266,12 +2266,12 @@
}
}
},
"403": {
"description": "Unauthorized - Invalid or missing authentication"
},
"404": {
"description": "Browser session not found"
},
"403": {
"description": "Unauthorized - Invalid or missing authentication"
},
"422": {
"description": "Validation Error",
"content": {
@@ -2836,6 +2836,83 @@
]
}
},
"/v1/run/tasks/download_files": {
"post": {
"tags": [
"Agent"
],
"summary": "File Download Task",
"description": "Download a file from a website by navigating and clicking download buttons",
"operationId": "download_files_v1_run_tasks_download_files_post",
"parameters": [
{
"name": "x-api-key",
"in": "header",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings.",
"title": "X-Api-Key"
},
"description": "Skyvern API key for authentication. API key can be found at https://app.skyvern.com/settings."
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DownloadFilesRequest"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WorkflowRunResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
},
"x-fern-sdk-method-name": "download_files",
"x-fern-examples": [
{
"code-samples": [
{
"sdk": "python",
"code": "from skyvern import Skyvern\n\nskyvern = Skyvern(api_key=\"YOUR_API_KEY\")\nawait skyvern.download_files(\n url=\"https://example.com/downloads\",\n navigation_goal=\"Navigate to the downloads page and click the 'Download PDF' button\",\n download_suffix=\"report.pdf\"\n)\n"
},
{
"sdk": "typescript",
"code": "import { SkyvernClient } from \"@skyvern/client\";\n\nconst skyvern = new SkyvernClient({ apiKey: \"YOUR_API_KEY\" });\nawait skyvern.downloadFiles({\n url: \"https://example.com/downloads\",\n navigation_goal: \"Navigate to the downloads page and click the 'Download PDF' button\",\n download_suffix: \"report.pdf\"\n});\n"
}
]
}
]
}
},
"/v1/scripts": {
"post": {
"tags": [
@@ -3837,6 +3914,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -4122,6 +4204,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"url": {
"anyOf": [
{
@@ -5612,7 +5699,7 @@
"type": "number",
"title": "Timeout",
"description": "Timeout in milliseconds",
"default": 10000
"default": 5000
}
},
"type": "object",
@@ -5697,6 +5784,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"code": {
"type": "string",
"title": "Code"
@@ -5810,6 +5902,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"code": {
"type": "string",
"title": "Code"
@@ -5886,6 +5983,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"branch_conditions": {
"items": {
"$ref": "#/components/schemas/BranchCondition"
@@ -5944,6 +6046,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"branch_conditions": {
"items": {
"$ref": "#/components/schemas/BranchConditionYAML"
@@ -6146,8 +6253,8 @@
"anyOf": [
{
"type": "integer",
"maximum": 1440,
"minimum": 5
"maximum": 1440.0,
"minimum": 5.0
},
{
"type": "null"
@@ -6544,6 +6651,185 @@
"title": "DeployScriptRequest",
"description": "Request model for deploying a script with updated files."
},
"DownloadFilesRequest": {
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url",
"description": "Website URL"
},
"webhook_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Webhook Url",
"description": "Webhook URL to send status updates"
},
"proxy_location": {
"anyOf": [
{
"$ref": "#/components/schemas/ProxyLocation"
},
{
"type": "null"
}
],
"description": "Proxy location to use"
},
"totp_identifier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Totp Identifier",
"description": "Identifier for TOTP (Time-based One-Time Password) if required"
},
"totp_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Totp Url",
"description": "TOTP URL to fetch one-time passwords"
},
"browser_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Browser Session Id",
"description": "ID of the browser session to use, which is prefixed by `pbs_` e.g. `pbs_123456`",
"examples": [
"pbs_123456"
]
},
"browser_profile_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Browser Profile Id",
"description": "ID of a browser profile to reuse for this run"
},
"browser_address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Browser Address",
"description": "The CDP address for the task.",
"examples": [
"http://127.0.0.1:9222",
"ws://127.0.0.1:9222/devtools/browser/1234567890"
]
},
"extra_http_headers": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Extra Http Headers",
"description": "Additional HTTP headers to include in requests"
},
"max_screenshot_scrolling_times": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Screenshot Scrolling Times",
"description": "Maximum number of times to scroll for screenshots"
},
"navigation_goal": {
"type": "string",
"title": "Navigation Goal",
"description": "Instructions for navigating to and downloading the file"
},
"download_suffix": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Download Suffix",
"description": "Suffix or complete filename for the downloaded file"
},
"download_timeout": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Download Timeout",
"description": "Timeout in seconds for the download operation"
},
"max_steps_per_run": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Steps Per Run",
"description": "Maximum number of steps to execute"
}
},
"type": "object",
"required": [
"navigation_goal"
],
"title": "DownloadFilesRequest"
},
"DownloadToS3Block": {
"properties": {
"label": {
@@ -6594,6 +6880,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"url": {
"type": "string",
"title": "Url"
@@ -6649,6 +6940,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"url": {
"type": "string",
"title": "Url"
@@ -6793,6 +7089,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -7072,6 +7373,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"data_extraction_goal": {
"type": "string",
"title": "Data Extraction Goal"
@@ -7208,6 +7514,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -7493,6 +7804,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"navigation_goal": {
"type": "string",
"title": "Navigation Goal"
@@ -7802,6 +8118,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"file_url": {
"type": "string",
"title": "File Url"
@@ -7873,6 +8194,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"file_url": {
"type": "string",
"title": "File Url"
@@ -7968,6 +8294,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"storage_type": {
"$ref": "#/components/schemas/FileStorageType",
"default": "s3"
@@ -8110,6 +8441,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"storage_type": {
"$ref": "#/components/schemas/FileStorageType",
"default": "s3"
@@ -8389,6 +8725,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"loop_blocks": {
"items": {
"oneOf": [
@@ -8618,6 +8959,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"loop_blocks": {
"items": {
"anyOf": [
@@ -8845,6 +9191,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"method": {
"type": "string",
"title": "Method",
@@ -9005,6 +9356,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"method": {
"type": "string",
"title": "Method",
@@ -9128,6 +9484,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -9457,6 +9818,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"instructions": {
"type": "string",
"title": "Instructions",
@@ -9674,7 +10040,7 @@
"type": "number",
"title": "Timeout",
"description": "Timeout in milliseconds",
"default": 10000
"default": 5000
}
},
"type": "object",
@@ -9781,6 +10147,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -10066,6 +10437,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"url": {
"anyOf": [
{
@@ -10204,10 +10580,6 @@
},
"LoginRequest": {
"properties": {
"credential_type": {
"$ref": "#/components/schemas/skyvern__schemas__run_blocks__CredentialType",
"description": "Where to get the credential from"
},
"url": {
"anyOf": [
{
@@ -10218,19 +10590,7 @@
}
],
"title": "Url",
"description": "Website url"
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Prompt",
"description": "Login instructions. Skyvern has default prompt/instruction for login if this field is not provided."
"description": "Website URL"
},
"webhook_url": {
"anyOf": [
@@ -10242,7 +10602,7 @@
}
],
"title": "Webhook Url",
"description": "Webhook URL to send login status updates"
"description": "Webhook URL to send status updates"
},
"proxy_location": {
"anyOf": [
@@ -10349,6 +10709,22 @@
"title": "Max Screenshot Scrolling Times",
"description": "Maximum number of times to scroll for screenshots"
},
"credential_type": {
"$ref": "#/components/schemas/skyvern__schemas__run_blocks__CredentialType",
"description": "Where to get the credential from"
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Prompt",
"description": "Login instructions. Skyvern has default prompt/instruction for login if this field is not provided."
},
"credential_id": {
"anyOf": [
{
@@ -10517,6 +10893,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -10796,6 +11177,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"navigation_goal": {
"type": "string",
"title": "Navigation Goal"
@@ -11350,6 +11736,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"file_url": {
"type": "string",
"title": "File Url"
@@ -11418,6 +11809,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"file_url": {
"type": "string",
"title": "File Url"
@@ -11878,7 +12274,7 @@
"type": "number",
"title": "Timeout",
"description": "Timeout in milliseconds",
"default": 10000
"default": 5000
}
},
"type": "object",
@@ -11935,6 +12331,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"smtp_host": {
"$ref": "#/components/schemas/AWSSecretParameter"
},
@@ -12032,6 +12433,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"smtp_host_secret_parameter_key": {
"type": "string",
"title": "Smtp Host Secret Parameter Key"
@@ -12401,6 +12807,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -12686,6 +13097,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"url": {
"anyOf": [
{
@@ -13469,6 +13885,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"prompt": {
"type": "string",
"title": "Prompt"
@@ -13567,6 +13988,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"prompt": {
"type": "string",
"title": "Prompt"
@@ -13677,6 +14103,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"llm_key": {
"anyOf": [
{
@@ -13813,6 +14244,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"llm_key": {
"anyOf": [
{
@@ -14188,7 +14624,7 @@
"type": "number",
"title": "Timeout",
"description": "Timeout in milliseconds",
"default": 10000
"default": 5000
}
},
"type": "object",
@@ -14245,6 +14681,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"path": {
"anyOf": [
{
@@ -14306,6 +14747,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"path": {
"anyOf": [
{
@@ -14374,6 +14820,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -14653,6 +15104,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"url": {
"type": "string",
"title": "Url"
@@ -14677,8 +15133,8 @@
},
"confidence_float": {
"type": "number",
"maximum": 1,
"minimum": 0,
"maximum": 1.0,
"minimum": 0.0,
"title": "Confidence Float"
}
},
@@ -14740,6 +15196,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"task_type": {
"type": "string",
"title": "Task Type",
@@ -15025,6 +15486,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"complete_criterion": {
"anyOf": [
{
@@ -15170,6 +15636,11 @@
"title": "Disable Cache",
"default": false
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"wait_sec": {
"type": "integer",
"title": "Wait Sec"
@@ -15283,6 +15754,11 @@
],
"title": "Model"
},
"next_loop_on_failure": {
"type": "boolean",
"title": "Next Loop On Failure",
"default": false
},
"wait_sec": {
"type": "integer",
"title": "Wait Sec",

View File

@@ -1586,9 +1586,9 @@
}
},
"node_modules/baseline-browser-mapping": {
"version": "2.8.32",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz",
"integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==",
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz",
"integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -1609,9 +1609,9 @@
}
},
"node_modules/browserslist": {
"version": "4.28.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
"integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
"version": "4.28.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
"integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"dev": true,
"funding": [
{
@@ -1629,11 +1629,11 @@
],
"license": "MIT",
"dependencies": {
"baseline-browser-mapping": "^2.8.25",
"caniuse-lite": "^1.0.30001754",
"electron-to-chromium": "^1.5.249",
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
"electron-to-chromium": "^1.5.263",
"node-releases": "^2.0.27",
"update-browserslist-db": "^1.1.4"
"update-browserslist-db": "^1.2.0"
},
"bin": {
"browserslist": "cli.js"
@@ -1660,9 +1660,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001757",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
"integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
"version": "1.0.30001759",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz",
"integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==",
"dev": true,
"funding": [
{
@@ -1843,9 +1843,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.263",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz",
"integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==",
"version": "1.5.265",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.265.tgz",
"integrity": "sha512-B7IkLR1/AE+9jR2LtVF/1/6PFhY5TlnEHnlrKmGk7PvkJibg5jr+mLXLLzq3QYl6PA1T/vLDthQPqIPAlS/PPA==",
"dev": true,
"license": "ISC"
},
@@ -2990,9 +2990,9 @@
"license": "MIT"
},
"node_modules/update-browserslist-db": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
"integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz",
"integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==",
"dev": true,
"funding": [
{

View File

@@ -2233,6 +2233,88 @@ export class SkyvernClient {
}
}
/**
* Download a file from a website by navigating and clicking download buttons
*
* @param {Skyvern.DownloadFilesRequest} request
* @param {SkyvernClient.RequestOptions} requestOptions - Request-specific configuration.
*
* @throws {@link Skyvern.UnprocessableEntityError}
*
* @example
* await client.downloadFiles({
* navigation_goal: "navigation_goal"
* })
*/
public downloadFiles(
request: Skyvern.DownloadFilesRequest,
requestOptions?: SkyvernClient.RequestOptions,
): core.HttpResponsePromise<Skyvern.WorkflowRunResponse> {
return core.HttpResponsePromise.fromPromise(this.__downloadFiles(request, requestOptions));
}
private async __downloadFiles(
request: Skyvern.DownloadFilesRequest,
requestOptions?: SkyvernClient.RequestOptions,
): Promise<core.WithRawResponse<Skyvern.WorkflowRunResponse>> {
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/run/tasks/download_files",
),
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.WorkflowRunResponse, 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/run/tasks/download_files.",
);
case "unknown":
throw new errors.SkyvernError({
message: _response.error.errorMessage,
rawResponse: _response.rawResponse,
});
}
}
/**
* Retrieves a paginated list of scripts for the current organization
*

View File

@@ -0,0 +1,40 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../../index.js";
/**
* @example
* {
* navigation_goal: "navigation_goal"
* }
*/
export interface DownloadFilesRequest {
/** Website URL */
url?: string;
/** Webhook URL to send status updates */
webhook_url?: string;
/** Proxy location to use */
proxy_location?: Skyvern.ProxyLocation;
/** Identifier for TOTP (Time-based One-Time Password) if required */
totp_identifier?: string;
/** TOTP URL to fetch one-time passwords */
totp_url?: string;
/** ID of the browser session to use, which is prefixed by `pbs_` e.g. `pbs_123456` */
browser_session_id?: string;
/** ID of a browser profile to reuse for this run */
browser_profile_id?: string;
/** The CDP address for the task. */
browser_address?: string;
/** Additional HTTP headers to include in requests */
extra_http_headers?: Record<string, string | undefined>;
/** Maximum number of times to scroll for screenshots */
max_screenshot_scrolling_times?: number;
/** Instructions for navigating to and downloading the file */
navigation_goal: string;
/** Suffix or complete filename for the downloaded file */
download_suffix?: string;
/** Timeout in seconds for the download operation */
download_timeout?: number;
/** Maximum number of steps to execute */
max_steps_per_run?: number;
}

View File

@@ -9,13 +9,9 @@ import type * as Skyvern from "../../index.js";
* }
*/
export interface LoginRequest {
/** Where to get the credential from */
credential_type: Skyvern.SkyvernSchemasRunBlocksCredentialType;
/** Website url */
/** Website URL */
url?: string;
/** Login instructions. Skyvern has default prompt/instruction for login if this field is not provided. */
prompt?: string;
/** Webhook URL to send login status updates */
/** Webhook URL to send status updates */
webhook_url?: string;
/** Proxy location to use */
proxy_location?: Skyvern.ProxyLocation;
@@ -33,6 +29,10 @@ export interface LoginRequest {
extra_http_headers?: Record<string, string | undefined>;
/** Maximum number of times to scroll for screenshots */
max_screenshot_scrolling_times?: number;
/** Where to get the credential from */
credential_type: Skyvern.SkyvernSchemasRunBlocksCredentialType;
/** 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. */
credential_id?: string;
/** Bitwarden collection ID. You can find it in the Bitwarden collection URL. e.g. `https://vault.bitwarden.com/vaults/collection_id/items` */

View File

@@ -4,6 +4,7 @@ export type { CreateCredentialRequest } from "./CreateCredentialRequest.js";
export type { CreateScriptRequest } from "./CreateScriptRequest.js";
export type { CreateWorkflowRequest } from "./CreateWorkflowRequest.js";
export type { DeployScriptRequest } from "./DeployScriptRequest.js";
export type { DownloadFilesRequest } from "./DownloadFilesRequest.js";
export type { GetCredentialsRequest } from "./GetCredentialsRequest.js";
export type { GetRunArtifactsRequest } from "./GetRunArtifactsRequest.js";
export type { GetScriptsRequest } from "./GetScriptsRequest.js";

View File

@@ -11,6 +11,7 @@ export interface ActionBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -9,6 +9,7 @@ export interface ActionBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
url?: string;
title?: string;
engine?: Skyvern.RunEngine;

View File

@@ -6,7 +6,7 @@ import type * as Skyvern from "../index.js";
* Represents a single conditional branch edge within a ConditionalBlock.
*/
export interface BranchCondition {
criteria?: Skyvern.BranchCriteria;
criteria?: Skyvern.BranchConditionCriteria;
next_block_label?: string;
description?: string;
is_default?: boolean;

View File

@@ -0,0 +1,11 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../index.js";
export type BranchConditionCriteria = Skyvern.BranchConditionCriteria.Jinja2Template;
export namespace BranchConditionCriteria {
export interface Jinja2Template extends Skyvern.JinjaBranchCriteria {
criteria_type: "jinja2_template";
}
}

View File

@@ -0,0 +1,10 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../index.js";
export interface BranchConditionYaml {
criteria?: Skyvern.BranchCriteriaYaml;
next_block_label?: string;
description?: string;
is_default?: boolean;
}

View File

@@ -1,10 +0,0 @@
// This file was auto-generated by Fern from our API Definition.
/**
* Abstract interface describing how a branch condition should be evaluated.
*/
export interface BranchCriteria {
criteria_type: string;
expression: string;
description?: string;
}

View File

@@ -0,0 +1,7 @@
// This file was auto-generated by Fern from our API Definition.
export interface BranchCriteriaYaml {
criteria_type?: "jinja2_template";
expression: string;
description?: string;
}

View File

@@ -11,6 +11,7 @@ export interface CodeBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
code: string;
parameters?: Skyvern.CodeBlockParametersItem[];
}

View File

@@ -7,6 +7,7 @@ export interface CodeBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
code: string;
parameter_keys?: string[];
}

View File

@@ -14,5 +14,6 @@ export interface ConditionalBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
branch_conditions?: Skyvern.BranchCondition[];
}

View File

@@ -0,0 +1,14 @@
// This file was auto-generated by Fern from our API Definition.
import type * as Skyvern from "../index.js";
export interface ConditionalBlockYaml {
/** 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<string, unknown>;
next_loop_on_failure?: boolean;
branch_conditions?: Skyvern.BranchConditionYaml[];
}

View File

@@ -11,5 +11,6 @@ export interface DownloadToS3Block {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
url: string;
}

View File

@@ -7,5 +7,6 @@ export interface DownloadToS3BlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
url: string;
}

View File

@@ -11,6 +11,7 @@ export interface ExtractionBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -9,6 +9,7 @@ export interface ExtractionBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
data_extraction_goal: string;
url?: string;
title?: string;

View File

@@ -11,6 +11,7 @@ export interface FileDownloadBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -9,6 +9,7 @@ export interface FileDownloadBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
navigation_goal: string;
url?: string;
title?: string;

View File

@@ -11,6 +11,7 @@ export interface FileParserBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
file_url: string;
file_type: Skyvern.FileType;
json_schema?: Record<string, unknown>;

View File

@@ -9,6 +9,7 @@ export interface FileParserBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
file_url: string;
file_type: Skyvern.FileType;
json_schema?: Record<string, unknown>;

View File

@@ -11,6 +11,7 @@ export interface FileUploadBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
storage_type?: Skyvern.FileStorageType;
s3_bucket?: string;
aws_access_key_id?: string;

View File

@@ -9,6 +9,7 @@ export interface FileUploadBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
storage_type?: Skyvern.FileStorageType;
s3_bucket?: string;
aws_access_key_id?: string;

View File

@@ -11,6 +11,7 @@ export interface ForLoopBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
loop_blocks: Skyvern.ForLoopBlockLoopBlocksItem[];
loop_over?: Skyvern.ForLoopBlockLoopOver;
loop_variable_reference?: string;

View File

@@ -9,6 +9,7 @@ export interface ForLoopBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
loop_blocks: Skyvern.ForLoopBlockYamlLoopBlocksItem[];
loop_over_parameter_key?: string;
loop_variable_reference?: string;

View File

@@ -23,7 +23,8 @@ export type ForLoopBlockYamlLoopBlocksItem =
| Skyvern.ForLoopBlockYamlLoopBlocksItem.GotoUrl
| Skyvern.ForLoopBlockYamlLoopBlocksItem.PdfParser
| Skyvern.ForLoopBlockYamlLoopBlocksItem.TaskV2
| Skyvern.ForLoopBlockYamlLoopBlocksItem.HttpRequest;
| Skyvern.ForLoopBlockYamlLoopBlocksItem.HttpRequest
| Skyvern.ForLoopBlockYamlLoopBlocksItem.Conditional;
export namespace ForLoopBlockYamlLoopBlocksItem {
export interface Task extends Skyvern.TaskBlockYaml {
@@ -109,4 +110,8 @@ export namespace ForLoopBlockYamlLoopBlocksItem {
export interface HttpRequest extends Skyvern.HttpRequestBlockYaml {
block_type: "http_request";
}
export interface Conditional extends Skyvern.ConditionalBlockYaml {
block_type: "conditional";
}
}

View File

@@ -11,6 +11,7 @@ export interface HttpRequestBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
method?: string;
url?: string;
headers?: Record<string, string | undefined>;

View File

@@ -7,6 +7,7 @@ export interface HttpRequestBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
method?: string;
url?: string;
headers?: Record<string, string | undefined>;

View File

@@ -22,6 +22,7 @@ export interface HumanInteractionBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -7,6 +7,7 @@ export interface HumanInteractionBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
instructions?: string;
positive_descriptor?: string;
negative_descriptor?: string;

View File

@@ -0,0 +1,9 @@
// This file was auto-generated by Fern from our API Definition.
/**
* Jinja2-templated branch criteria (only supported criteria type for now).
*/
export interface JinjaBranchCriteria {
expression: string;
description?: string;
}

View File

@@ -11,6 +11,7 @@ export interface LoginBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -9,6 +9,7 @@ export interface LoginBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
url?: string;
title?: string;
engine?: Skyvern.RunEngine;

View File

@@ -11,6 +11,7 @@ export interface NavigationBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -9,6 +9,7 @@ export interface NavigationBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
navigation_goal: string;
url?: string;
title?: string;

View File

@@ -15,6 +15,7 @@ export interface PdfParserBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
file_url: string;
json_schema?: Record<string, unknown>;
}

View File

@@ -7,6 +7,7 @@ export interface PdfParserBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
file_url: string;
json_schema?: Record<string, unknown>;
}

View File

@@ -11,6 +11,7 @@ export interface SendEmailBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
smtp_host: Skyvern.AwsSecretParameter;
smtp_port: Skyvern.AwsSecretParameter;
smtp_username: Skyvern.AwsSecretParameter;

View File

@@ -7,6 +7,7 @@ export interface SendEmailBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
smtp_host_secret_parameter_key: string;
smtp_port_secret_parameter_key: string;
smtp_username_secret_parameter_key: string;

View File

@@ -11,6 +11,7 @@ export interface TaskBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -9,6 +9,7 @@ export interface TaskBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
url?: string;
title?: string;
engine?: Skyvern.RunEngine;

View File

@@ -11,6 +11,7 @@ export interface TaskV2Block {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
prompt: string;
url?: string;
totp_verification_url?: string;

View File

@@ -7,6 +7,7 @@ export interface TaskV2BlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
prompt: string;
url?: string;
totp_verification_url?: string;

View File

@@ -11,6 +11,7 @@ export interface TextPromptBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
llm_key?: string;
prompt: string;
parameters?: Skyvern.TextPromptBlockParametersItem[];

View File

@@ -7,6 +7,7 @@ export interface TextPromptBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
llm_key?: string;
prompt: string;
parameter_keys?: string[];

View File

@@ -11,5 +11,6 @@ export interface UploadToS3Block {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
path?: string;
}

View File

@@ -7,5 +7,6 @@ export interface UploadToS3BlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
path?: string;
}

View File

@@ -11,6 +11,7 @@ export interface UrlBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url: string;
title?: string;

View File

@@ -7,5 +7,6 @@ export interface UrlBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
url: string;
}

View File

@@ -11,6 +11,7 @@ export interface ValidationBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
task_type?: string;
url?: string;
title?: string;

View File

@@ -7,6 +7,7 @@ export interface ValidationBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
complete_criterion?: string;
terminate_criterion?: string;
error_code_mapping?: Record<string, string | undefined>;

View File

@@ -11,6 +11,7 @@ export interface WaitBlock {
continue_on_failure?: boolean;
model?: Record<string, unknown>;
disable_cache?: boolean;
next_loop_on_failure?: boolean;
wait_sec: number;
parameters?: Skyvern.WaitBlockParametersItem[];
}

View File

@@ -7,5 +7,6 @@ export interface WaitBlockYaml {
next_block_label?: string;
continue_on_failure?: boolean;
model?: Record<string, unknown>;
next_loop_on_failure?: boolean;
wait_sec?: number;
}

View File

@@ -5,6 +5,7 @@ import type * as Skyvern from "../index.js";
export type WorkflowDefinitionYamlBlocksItem =
| Skyvern.WorkflowDefinitionYamlBlocksItem.Action
| Skyvern.WorkflowDefinitionYamlBlocksItem.Code
| Skyvern.WorkflowDefinitionYamlBlocksItem.Conditional
| Skyvern.WorkflowDefinitionYamlBlocksItem.DownloadToS3
| Skyvern.WorkflowDefinitionYamlBlocksItem.Extraction
| Skyvern.WorkflowDefinitionYamlBlocksItem.FileDownload
@@ -34,6 +35,10 @@ export namespace WorkflowDefinitionYamlBlocksItem {
block_type: "code";
}
export interface Conditional extends Skyvern.ConditionalBlockYaml {
block_type: "conditional";
}
export interface DownloadToS3 extends Skyvern.DownloadToS3BlockYaml {
block_type: "download_to_s3";
}

View File

@@ -20,7 +20,9 @@ export * from "./BitwardenSensitiveInformationParameter.js";
export * from "./BitwardenSensitiveInformationParameterYaml.js";
export * from "./BlockType.js";
export * from "./BranchCondition.js";
export * from "./BranchCriteria.js";
export * from "./BranchConditionCriteria.js";
export * from "./BranchConditionYaml.js";
export * from "./BranchCriteriaYaml.js";
export * from "./BrowserProfile.js";
export * from "./BrowserSessionResponse.js";
export * from "./ClickAction.js";
@@ -29,6 +31,7 @@ export * from "./CodeBlock.js";
export * from "./CodeBlockParametersItem.js";
export * from "./CodeBlockYaml.js";
export * from "./ConditionalBlock.js";
export * from "./ConditionalBlockYaml.js";
export * from "./ContextParameter.js";
export * from "./ContextParameterSource.js";
export * from "./ContextParameterYaml.js";
@@ -73,6 +76,7 @@ export * from "./HumanInteractionBlockParametersItem.js";
export * from "./HumanInteractionBlockYaml.js";
export * from "./InputOrSelectContext.js";
export * from "./InputTextAction.js";
export * from "./JinjaBranchCriteria.js";
export * from "./LocateElementAction.js";
export * from "./LoginBlock.js";
export * from "./LoginBlockParametersItem.js";

View File

@@ -2490,6 +2490,142 @@ describe("SkyvernClient", () => {
}).rejects.toThrow(Skyvern.UnprocessableEntityError);
});
test("download_files (1)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
const rawRequestBody = { navigation_goal: "navigation_goal" };
const rawResponseBody = {
run_id: "tsk_123",
status: "created",
output: { key: "value" },
downloaded_files: [
{ url: "url", checksum: "checksum", filename: "filename", modified_at: "2024-01-15T09:30:00Z" },
],
recording_url: "recording_url",
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 },
errors: [{ key: "value" }],
run_with: "run_with",
ai_fallback: true,
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,
extra_http_headers: { key: "value" },
browser_address: "browser_address",
ai_fallback: true,
run_with: "run_with",
},
};
server
.mockEndpoint()
.post("/v1/run/tasks/download_files")
.jsonBody(rawRequestBody)
.respondWith()
.statusCode(200)
.jsonBody(rawResponseBody)
.build();
const response = await client.downloadFiles({
navigation_goal: "navigation_goal",
});
expect(response).toEqual({
run_id: "tsk_123",
status: "created",
output: {
key: "value",
},
downloaded_files: [
{
url: "url",
checksum: "checksum",
filename: "filename",
modified_at: "2024-01-15T09:30:00Z",
},
],
recording_url: "recording_url",
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,
},
errors: [
{
key: "value",
},
],
run_with: "run_with",
ai_fallback: true,
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,
extra_http_headers: {
key: "value",
},
browser_address: "browser_address",
ai_fallback: true,
run_with: "run_with",
},
});
});
test("download_files (2)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });
const rawRequestBody = { navigation_goal: "navigation_goal" };
const rawResponseBody = { key: "value" };
server
.mockEndpoint()
.post("/v1/run/tasks/download_files")
.jsonBody(rawRequestBody)
.respondWith()
.statusCode(422)
.jsonBody(rawResponseBody)
.build();
await expect(async () => {
return await client.downloadFiles({
navigation_goal: "navigation_goal",
});
}).rejects.toThrow(Skyvern.UnprocessableEntityError);
});
test("get_scripts (1)", async () => {
const server = mockServerPool.createServer();
const client = new SkyvernClient({ apiKey: "test", environment: server.baseUrl });

View File

@@ -1525,7 +1525,7 @@ class Skyvern:
)
return _response.data
def file_download(
def download_files(
self,
*,
navigation_goal: str,
@@ -1542,7 +1542,6 @@ class Skyvern:
download_suffix: typing.Optional[str] = OMIT,
download_timeout: typing.Optional[float] = OMIT,
max_steps_per_run: typing.Optional[int] = OMIT,
parameter_keys: typing.Optional[typing.Sequence[str]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowRunResponse:
"""
@@ -1592,9 +1591,6 @@ class Skyvern:
max_steps_per_run : typing.Optional[int]
Maximum number of steps to execute
parameter_keys : typing.Optional[typing.Sequence[str]]
List of parameter keys to use in the workflow
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -1610,11 +1606,11 @@ class Skyvern:
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.file_download(
client.download_files(
navigation_goal="navigation_goal",
)
"""
_response = self._raw_client.file_download(
_response = self._raw_client.download_files(
navigation_goal=navigation_goal,
url=url,
webhook_url=webhook_url,
@@ -1629,7 +1625,6 @@ class Skyvern:
download_suffix=download_suffix,
download_timeout=download_timeout,
max_steps_per_run=max_steps_per_run,
parameter_keys=parameter_keys,
request_options=request_options,
)
return _response.data
@@ -3568,7 +3563,7 @@ class AsyncSkyvern:
)
return _response.data
async def file_download(
async def download_files(
self,
*,
navigation_goal: str,
@@ -3585,7 +3580,6 @@ class AsyncSkyvern:
download_suffix: typing.Optional[str] = OMIT,
download_timeout: typing.Optional[float] = OMIT,
max_steps_per_run: typing.Optional[int] = OMIT,
parameter_keys: typing.Optional[typing.Sequence[str]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowRunResponse:
"""
@@ -3635,9 +3629,6 @@ class AsyncSkyvern:
max_steps_per_run : typing.Optional[int]
Maximum number of steps to execute
parameter_keys : typing.Optional[typing.Sequence[str]]
List of parameter keys to use in the workflow
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -3658,14 +3649,14 @@ class AsyncSkyvern:
async def main() -> None:
await client.file_download(
await client.download_files(
navigation_goal="navigation_goal",
)
asyncio.run(main())
"""
_response = await self._raw_client.file_download(
_response = await self._raw_client.download_files(
navigation_goal=navigation_goal,
url=url,
webhook_url=webhook_url,
@@ -3680,7 +3671,6 @@ class AsyncSkyvern:
download_suffix=download_suffix,
download_timeout=download_timeout,
max_steps_per_run=max_steps_per_run,
parameter_keys=parameter_keys,
request_options=request_options,
)
return _response.data

View File

@@ -2106,7 +2106,7 @@ 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 file_download(
def download_files(
self,
*,
navigation_goal: str,
@@ -2123,7 +2123,6 @@ class RawSkyvern:
download_suffix: typing.Optional[str] = OMIT,
download_timeout: typing.Optional[float] = OMIT,
max_steps_per_run: typing.Optional[int] = OMIT,
parameter_keys: typing.Optional[typing.Sequence[str]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[WorkflowRunResponse]:
"""
@@ -2173,9 +2172,6 @@ class RawSkyvern:
max_steps_per_run : typing.Optional[int]
Maximum number of steps to execute
parameter_keys : typing.Optional[typing.Sequence[str]]
List of parameter keys to use in the workflow
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -2185,7 +2181,7 @@ class RawSkyvern:
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
"v1/run/tasks/file_download",
"v1/run/tasks/download_files",
method="POST",
json={
"url": url,
@@ -2202,7 +2198,6 @@ class RawSkyvern:
"download_suffix": download_suffix,
"download_timeout": download_timeout,
"max_steps_per_run": max_steps_per_run,
"parameter_keys": parameter_keys,
},
headers={
"content-type": "application/json",
@@ -4627,7 +4622,7 @@ 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 file_download(
async def download_files(
self,
*,
navigation_goal: str,
@@ -4644,7 +4639,6 @@ class AsyncRawSkyvern:
download_suffix: typing.Optional[str] = OMIT,
download_timeout: typing.Optional[float] = OMIT,
max_steps_per_run: typing.Optional[int] = OMIT,
parameter_keys: typing.Optional[typing.Sequence[str]] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[WorkflowRunResponse]:
"""
@@ -4694,9 +4688,6 @@ class AsyncRawSkyvern:
max_steps_per_run : typing.Optional[int]
Maximum number of steps to execute
parameter_keys : typing.Optional[typing.Sequence[str]]
List of parameter keys to use in the workflow
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -4706,7 +4697,7 @@ class AsyncRawSkyvern:
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
"v1/run/tasks/file_download",
"v1/run/tasks/download_files",
method="POST",
json={
"url": url,
@@ -4723,7 +4714,6 @@ class AsyncRawSkyvern:
"download_suffix": download_suffix,
"download_timeout": download_timeout,
"max_steps_per_run": max_steps_per_run,
"parameter_keys": parameter_keys,
},
headers={
"content-type": "application/json",

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
code: str
parameters: typing.Optional[typing.List[CodeBlockParametersItem]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
code: str
parameter_keys: typing.Optional[typing.List[str]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
branch_conditions: typing.Optional[typing.List[BranchCondition]] = None
if IS_PYDANTIC_V2:

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
branch_conditions: typing.Optional[typing.List[BranchConditionYaml]] = None
if IS_PYDANTIC_V2:

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
url: str
if IS_PYDANTIC_V2:

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
url: str
if IS_PYDANTIC_V2:

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
data_extraction_goal: str
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
navigation_goal: str
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
file_type: FileType
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None

View File

@@ -20,6 +20,7 @@ class FileParserBlockYaml(UniversalBaseModel):
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
file_url: str
file_type: FileType
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None

View File

@@ -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
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
aws_access_key_id: typing.Optional[str] = None

View File

@@ -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
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
aws_access_key_id: typing.Optional[str] = None

View File

@@ -25,6 +25,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
next_loop_on_failure: typing.Optional[bool] = None
loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"]
loop_over: typing.Optional[ForLoopBlockLoopOver] = None
loop_variable_reference: typing.Optional[str] = None

View File

@@ -47,6 +47,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -86,6 +87,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
next_loop_on_failure: typing.Optional[bool] = None
code: str
parameters: typing.Optional[typing.List[CodeBlockParametersItem]] = None
@@ -107,6 +109,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
next_loop_on_failure: typing.Optional[bool] = None
branch_conditions: typing.Optional[typing.List[BranchCondition]] = None
if IS_PYDANTIC_V2:
@@ -127,6 +130,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
next_loop_on_failure: typing.Optional[bool] = None
url: str
if IS_PYDANTIC_V2:
@@ -147,6 +151,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -186,6 +191,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -225,6 +231,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
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
aws_access_key_id: typing.Optional[str] = None
@@ -253,6 +260,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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
file_type: FileType
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
@@ -275,6 +283,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
next_loop_on_failure: typing.Optional[bool] = None
loop_blocks: typing.List["ForLoopBlockLoopBlocksItem"]
loop_over: typing.Optional[ForLoopBlockLoopOver] = None
loop_variable_reference: typing.Optional[str] = None
@@ -301,6 +310,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: str
title: typing.Optional[str] = None
@@ -340,6 +350,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
next_loop_on_failure: typing.Optional[bool] = None
method: typing.Optional[str] = None
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
@@ -366,6 +377,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -413,6 +425,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -452,6 +465,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -491,6 +505,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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
@@ -512,6 +527,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
next_loop_on_failure: typing.Optional[bool] = None
smtp_host: AwsSecretParameter
smtp_port: AwsSecretParameter
smtp_username: AwsSecretParameter
@@ -540,6 +556,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -579,6 +596,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
next_loop_on_failure: typing.Optional[bool] = None
prompt: str
url: typing.Optional[str] = None
totp_verification_url: typing.Optional[str] = None
@@ -604,6 +622,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
next_loop_on_failure: typing.Optional[bool] = None
llm_key: typing.Optional[str] = None
prompt: str
parameters: typing.Optional[typing.List[TextPromptBlockParametersItem]] = None
@@ -627,6 +646,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
next_loop_on_failure: typing.Optional[bool] = None
path: typing.Optional[str] = None
if IS_PYDANTIC_V2:
@@ -647,6 +667,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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -686,6 +707,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
next_loop_on_failure: typing.Optional[bool] = None
wait_sec: int
parameters: typing.Optional[typing.List[WaitBlockParametersItem]] = None

View File

@@ -21,6 +21,7 @@ class ForLoopBlockYaml(UniversalBaseModel):
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
loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"]
loop_over_parameter_key: typing.Optional[str] = None
loop_variable_reference: typing.Optional[str] = None

View File

@@ -22,6 +22,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
next_loop_on_failure: typing.Optional[bool] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None
@@ -58,6 +59,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
next_loop_on_failure: typing.Optional[bool] = None
loop_blocks: typing.List["ForLoopBlockYamlLoopBlocksItem"]
loop_over_parameter_key: typing.Optional[str] = None
loop_variable_reference: typing.Optional[str] = None
@@ -82,6 +84,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
next_loop_on_failure: typing.Optional[bool] = None
code: str
parameter_keys: typing.Optional[typing.List[str]] = None
@@ -101,6 +104,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
next_loop_on_failure: typing.Optional[bool] = None
llm_key: typing.Optional[str] = None
prompt: str
parameter_keys: typing.Optional[typing.List[str]] = None
@@ -122,6 +126,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
next_loop_on_failure: typing.Optional[bool] = None
url: str
if IS_PYDANTIC_V2:
@@ -140,6 +145,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
next_loop_on_failure: typing.Optional[bool] = None
path: typing.Optional[str] = None
if IS_PYDANTIC_V2:
@@ -158,6 +164,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
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
aws_access_key_id: typing.Optional[str] = None
@@ -185,6 +192,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
next_loop_on_failure: typing.Optional[bool] = None
smtp_host_secret_parameter_key: str
smtp_port_secret_parameter_key: str
smtp_username_secret_parameter_key: str
@@ -211,6 +219,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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
file_type: FileType
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
@@ -231,6 +240,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
next_loop_on_failure: typing.Optional[bool] = None
complete_criterion: typing.Optional[str] = None
terminate_criterion: typing.Optional[str] = None
error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
@@ -253,6 +263,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
next_loop_on_failure: typing.Optional[bool] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None
@@ -282,6 +293,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
next_loop_on_failure: typing.Optional[bool] = None
navigation_goal: str
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -316,6 +328,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
next_loop_on_failure: typing.Optional[bool] = None
data_extraction_goal: str
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -342,6 +355,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
next_loop_on_failure: typing.Optional[bool] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None
@@ -373,6 +387,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
next_loop_on_failure: typing.Optional[bool] = None
wait_sec: typing.Optional[int] = None
if IS_PYDANTIC_V2:
@@ -391,6 +406,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
next_loop_on_failure: typing.Optional[bool] = None
instructions: typing.Optional[str] = None
positive_descriptor: typing.Optional[str] = None
negative_descriptor: typing.Optional[str] = None
@@ -416,6 +432,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
next_loop_on_failure: typing.Optional[bool] = None
navigation_goal: str
url: typing.Optional[str] = None
title: typing.Optional[str] = None
@@ -446,6 +463,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
next_loop_on_failure: typing.Optional[bool] = None
url: str
if IS_PYDANTIC_V2:
@@ -464,6 +482,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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
@@ -483,6 +502,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
next_loop_on_failure: typing.Optional[bool] = None
prompt: str
url: typing.Optional[str] = None
totp_verification_url: typing.Optional[str] = None
@@ -507,6 +527,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
next_loop_on_failure: typing.Optional[bool] = None
method: typing.Optional[str] = None
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
@@ -531,6 +552,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
next_loop_on_failure: typing.Optional[bool] = None
branch_conditions: typing.Optional[typing.List[BranchConditionYaml]] = None
if IS_PYDANTIC_V2:

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
method: typing.Optional[str] = None
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
method: typing.Optional[str] = None
url: typing.Optional[str] = None
headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
instructions: typing.Optional[str] = None
positive_descriptor: typing.Optional[str] = None
negative_descriptor: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
navigation_goal: str
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
file_url: str
json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
smtp_host: AwsSecretParameter
smtp_port: AwsSecretParameter
smtp_username: AwsSecretParameter

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
smtp_host_secret_parameter_key: str
smtp_port_secret_parameter_key: str
smtp_username_secret_parameter_key: str

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
prompt: str
url: typing.Optional[str] = None
totp_verification_url: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
prompt: str
url: typing.Optional[str] = None
totp_verification_url: typing.Optional[str] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
llm_key: typing.Optional[str] = None
prompt: str
parameters: typing.Optional[typing.List[TextPromptBlockParametersItem]] = None

View File

@@ -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
next_loop_on_failure: typing.Optional[bool] = None
llm_key: typing.Optional[str] = None
prompt: str
parameter_keys: typing.Optional[typing.List[str]] = None

Some files were not shown because too many files have changed in this diff Show More