Bump version to 1.0.27 (#5230)
Some checks failed
Auto Create GitHub Release on Version Change / check-version-change (push) Waiting to run
Auto Create GitHub Release on Version Change / create-release (push) Blocked by required conditions
Run tests and pre-commit / Run tests and pre-commit hooks (push) Waiting to run
Run tests and pre-commit / Frontend Lint and Build (push) Waiting to run
Publish Fern Docs / run (push) Waiting to run
Build Skyvern SDK and publish to PyPI / check-version-change (push) Waiting to run
Build Skyvern SDK and publish to PyPI / run-ci (push) Blocked by required conditions
Build Skyvern SDK and publish to PyPI / build-sdk (push) Blocked by required conditions
Build Skyvern TS SDK and publish to npm / check-version-change (push) Waiting to run
Build Skyvern TS SDK and publish to npm / build-and-publish-sdk (push) Blocked by required conditions
zizmor / Audit GitHub Actions (push) Has been cancelled

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Shuchang Zheng 2026-03-25 11:31:00 -07:00 committed by GitHub
parent e4fd342746
commit 87bf4477f2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
35 changed files with 6169 additions and 4181 deletions

View file

@ -124,8 +124,8 @@ repos:
entry: ./run_alembic_check.sh entry: ./run_alembic_check.sh
language: script language: script
stages: [manual] stages: [manual]
- repo: https://github.com/koalaman/shellcheck-precommit - repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0 rev: v0.10.0.1
hooks: hooks:
- id: shellcheck - id: shellcheck
- repo: https://github.com/google/yamlfmt - repo: https://github.com/google/yamlfmt

View file

@ -9,7 +9,7 @@ ignore_missing_imports = True
[mypy-skyvern.library.*] [mypy-skyvern.library.*]
ignore_missing_imports = False ignore_missing_imports = False
follow_imports = normal follow_imports = normal
disable_error_code = arg-type, override, return-value, valid-type, no-any-return disable_error_code = arg-type, override, return-value, valid-type, no-any-return, attr-defined
; Disabling for generated code ; Disabling for generated code
[mypy-skyvern.client.*] [mypy-skyvern.client.*]

View file

@ -1,6 +1,6 @@
[project] [project]
name = "skyvern" name = "skyvern"
version = "1.0.24" version = "1.0.27"
description = "" description = ""
authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }] authors = [{ name = "Skyvern AI", email = "info@skyvern.com" }]
requires-python = ">=3.11,<3.14" requires-python = ">=3.11,<3.14"

View file

@ -1,12 +1,12 @@
{ {
"name": "@skyvern/client", "name": "@skyvern/client",
"version": "1.0.26", "version": "1.0.27",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@skyvern/client", "name": "@skyvern/client",
"version": "1.0.26", "version": "1.0.27",
"dependencies": { "dependencies": {
"playwright": "^1.48.0" "playwright": "^1.48.0"
}, },

View file

@ -1,6 +1,6 @@
{ {
"name": "@skyvern/client", "name": "@skyvern/client",
"version": "1.0.26", "version": "1.0.27",
"private": false, "private": false,
"repository": { "repository": {
"type": "git", "type": "git",

View file

@ -30,8 +30,8 @@ export class SkyvernClient {
"x-api-key": _options?.apiKey, "x-api-key": _options?.apiKey,
"X-Fern-Language": "JavaScript", "X-Fern-Language": "JavaScript",
"X-Fern-SDK-Name": "@skyvern/client", "X-Fern-SDK-Name": "@skyvern/client",
"X-Fern-SDK-Version": "1.0.26", "X-Fern-SDK-Version": "1.0.27",
"User-Agent": "@skyvern/client/1.0.26", "User-Agent": "@skyvern/client/1.0.27",
"X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime": core.RUNTIME.type,
"X-Fern-Runtime-Version": core.RUNTIME.version, "X-Fern-Runtime-Version": core.RUNTIME.version,
}, },

View file

@ -1 +1 @@
export const SDK_VERSION = "1.0.26"; export const SDK_VERSION = "1.0.27";

View file

@ -53,7 +53,6 @@ if typing.TYPE_CHECKING:
BrowserSessionResponse, BrowserSessionResponse,
ChangeTierResponse, ChangeTierResponse,
CheckoutSessionResponse, CheckoutSessionResponse,
ClearCacheResponse,
ClickAction, ClickAction,
ClickActionData, ClickActionData,
ClickContext, ClickContext,
@ -144,8 +143,6 @@ if typing.TYPE_CHECKING:
FileUploadBlock, FileUploadBlock,
FileUploadBlockYaml, FileUploadBlockYaml,
Folder, Folder,
FolderCreate,
FolderUpdate,
ForLoopBlock, ForLoopBlock,
ForLoopBlockDataSchema, ForLoopBlockDataSchema,
ForLoopBlockLoopBlocksItem, ForLoopBlockLoopBlocksItem,
@ -289,6 +286,8 @@ if typing.TYPE_CHECKING:
NonEmptyPasswordCredential, NonEmptyPasswordCredential,
OnePasswordCredentialParameter, OnePasswordCredentialParameter,
OnePasswordCredentialParameterYaml, OnePasswordCredentialParameterYaml,
OrganizationScheduleItem,
OrganizationScheduleListResponse,
OtpType, OtpType,
OutputParameter, OutputParameter,
OutputParameterYaml, OutputParameterYaml,
@ -384,7 +383,6 @@ if typing.TYPE_CHECKING:
ThoughtType, ThoughtType,
TotpCode, TotpCode,
TotpType, TotpType,
UpdateWorkflowFolderRequest,
UploadFileAction, UploadFileAction,
UploadFileActionData, UploadFileActionData,
UploadFileResponse, UploadFileResponse,
@ -536,6 +534,11 @@ if typing.TYPE_CHECKING:
WorkflowRunStatus, WorkflowRunStatus,
WorkflowRunTimeline, WorkflowRunTimeline,
WorkflowRunTimelineType, WorkflowRunTimelineType,
WorkflowRunTriggerType,
WorkflowSchedule,
WorkflowScheduleListResponse,
WorkflowScheduleResponse,
WorkflowScheduleUpsertRequest,
WorkflowStatus, WorkflowStatus,
WorkflowTriggerBlock, WorkflowTriggerBlock,
WorkflowTriggerBlockParametersItem, WorkflowTriggerBlockParametersItem,
@ -553,7 +556,8 @@ if typing.TYPE_CHECKING:
WorkflowTriggerBlockYaml, WorkflowTriggerBlockYaml,
) )
from .errors import BadRequestError, ConflictError, ForbiddenError, NotFoundError, UnprocessableEntityError from .errors import BadRequestError, ConflictError, ForbiddenError, NotFoundError, UnprocessableEntityError
from . import scripts from . import agent, artifacts, scripts
from .agent import ListOrganizationSchedulesApiV1SchedulesGetRequestStatus
from .client import AsyncSkyvern, Skyvern from .client import AsyncSkyvern, Skyvern
from .environment import SkyvernEnvironment from .environment import SkyvernEnvironment
from .version import __version__ from .version import __version__
@ -606,7 +610,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"BrowserSessionResponse": ".types", "BrowserSessionResponse": ".types",
"ChangeTierResponse": ".types", "ChangeTierResponse": ".types",
"CheckoutSessionResponse": ".types", "CheckoutSessionResponse": ".types",
"ClearCacheResponse": ".types",
"ClickAction": ".types", "ClickAction": ".types",
"ClickActionData": ".types", "ClickActionData": ".types",
"ClickContext": ".types", "ClickContext": ".types",
@ -698,8 +701,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"FileUploadBlock": ".types", "FileUploadBlock": ".types",
"FileUploadBlockYaml": ".types", "FileUploadBlockYaml": ".types",
"Folder": ".types", "Folder": ".types",
"FolderCreate": ".types",
"FolderUpdate": ".types",
"ForLoopBlock": ".types", "ForLoopBlock": ".types",
"ForLoopBlockDataSchema": ".types", "ForLoopBlockDataSchema": ".types",
"ForLoopBlockLoopBlocksItem": ".types", "ForLoopBlockLoopBlocksItem": ".types",
@ -809,6 +810,7 @@ _dynamic_imports: typing.Dict[str, str] = {
"InputTextAction": ".types", "InputTextAction": ".types",
"InputTextActionData": ".types", "InputTextActionData": ".types",
"JinjaBranchCriteria": ".types", "JinjaBranchCriteria": ".types",
"ListOrganizationSchedulesApiV1SchedulesGetRequestStatus": ".agent",
"LocateElementAction": ".types", "LocateElementAction": ".types",
"LoginBlock": ".types", "LoginBlock": ".types",
"LoginBlockDataSchema": ".types", "LoginBlockDataSchema": ".types",
@ -845,6 +847,8 @@ _dynamic_imports: typing.Dict[str, str] = {
"NotFoundError": ".errors", "NotFoundError": ".errors",
"OnePasswordCredentialParameter": ".types", "OnePasswordCredentialParameter": ".types",
"OnePasswordCredentialParameterYaml": ".types", "OnePasswordCredentialParameterYaml": ".types",
"OrganizationScheduleItem": ".types",
"OrganizationScheduleListResponse": ".types",
"OtpType": ".types", "OtpType": ".types",
"OutputParameter": ".types", "OutputParameter": ".types",
"OutputParameterYaml": ".types", "OutputParameterYaml": ".types",
@ -943,7 +947,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"TotpCode": ".types", "TotpCode": ".types",
"TotpType": ".types", "TotpType": ".types",
"UnprocessableEntityError": ".errors", "UnprocessableEntityError": ".errors",
"UpdateWorkflowFolderRequest": ".types",
"UploadFileAction": ".types", "UploadFileAction": ".types",
"UploadFileActionData": ".types", "UploadFileActionData": ".types",
"UploadFileResponse": ".types", "UploadFileResponse": ".types",
@ -1095,6 +1098,11 @@ _dynamic_imports: typing.Dict[str, str] = {
"WorkflowRunStatus": ".types", "WorkflowRunStatus": ".types",
"WorkflowRunTimeline": ".types", "WorkflowRunTimeline": ".types",
"WorkflowRunTimelineType": ".types", "WorkflowRunTimelineType": ".types",
"WorkflowRunTriggerType": ".types",
"WorkflowSchedule": ".types",
"WorkflowScheduleListResponse": ".types",
"WorkflowScheduleResponse": ".types",
"WorkflowScheduleUpsertRequest": ".types",
"WorkflowStatus": ".types", "WorkflowStatus": ".types",
"WorkflowTriggerBlock": ".types", "WorkflowTriggerBlock": ".types",
"WorkflowTriggerBlockParametersItem": ".types", "WorkflowTriggerBlockParametersItem": ".types",
@ -1111,6 +1119,8 @@ _dynamic_imports: typing.Dict[str, str] = {
"WorkflowTriggerBlockParametersItem_Workflow": ".types", "WorkflowTriggerBlockParametersItem_Workflow": ".types",
"WorkflowTriggerBlockYaml": ".types", "WorkflowTriggerBlockYaml": ".types",
"__version__": ".version", "__version__": ".version",
"agent": ".agent",
"artifacts": ".artifacts",
"scripts": ".scripts", "scripts": ".scripts",
} }
@ -1185,7 +1195,6 @@ __all__ = [
"BrowserSessionResponse", "BrowserSessionResponse",
"ChangeTierResponse", "ChangeTierResponse",
"CheckoutSessionResponse", "CheckoutSessionResponse",
"ClearCacheResponse",
"ClickAction", "ClickAction",
"ClickActionData", "ClickActionData",
"ClickContext", "ClickContext",
@ -1277,8 +1286,6 @@ __all__ = [
"FileUploadBlock", "FileUploadBlock",
"FileUploadBlockYaml", "FileUploadBlockYaml",
"Folder", "Folder",
"FolderCreate",
"FolderUpdate",
"ForLoopBlock", "ForLoopBlock",
"ForLoopBlockDataSchema", "ForLoopBlockDataSchema",
"ForLoopBlockLoopBlocksItem", "ForLoopBlockLoopBlocksItem",
@ -1388,6 +1395,7 @@ __all__ = [
"InputTextAction", "InputTextAction",
"InputTextActionData", "InputTextActionData",
"JinjaBranchCriteria", "JinjaBranchCriteria",
"ListOrganizationSchedulesApiV1SchedulesGetRequestStatus",
"LocateElementAction", "LocateElementAction",
"LoginBlock", "LoginBlock",
"LoginBlockDataSchema", "LoginBlockDataSchema",
@ -1424,6 +1432,8 @@ __all__ = [
"NotFoundError", "NotFoundError",
"OnePasswordCredentialParameter", "OnePasswordCredentialParameter",
"OnePasswordCredentialParameterYaml", "OnePasswordCredentialParameterYaml",
"OrganizationScheduleItem",
"OrganizationScheduleListResponse",
"OtpType", "OtpType",
"OutputParameter", "OutputParameter",
"OutputParameterYaml", "OutputParameterYaml",
@ -1522,7 +1532,6 @@ __all__ = [
"TotpCode", "TotpCode",
"TotpType", "TotpType",
"UnprocessableEntityError", "UnprocessableEntityError",
"UpdateWorkflowFolderRequest",
"UploadFileAction", "UploadFileAction",
"UploadFileActionData", "UploadFileActionData",
"UploadFileResponse", "UploadFileResponse",
@ -1674,6 +1683,11 @@ __all__ = [
"WorkflowRunStatus", "WorkflowRunStatus",
"WorkflowRunTimeline", "WorkflowRunTimeline",
"WorkflowRunTimelineType", "WorkflowRunTimelineType",
"WorkflowRunTriggerType",
"WorkflowSchedule",
"WorkflowScheduleListResponse",
"WorkflowScheduleResponse",
"WorkflowScheduleUpsertRequest",
"WorkflowStatus", "WorkflowStatus",
"WorkflowTriggerBlock", "WorkflowTriggerBlock",
"WorkflowTriggerBlockParametersItem", "WorkflowTriggerBlockParametersItem",
@ -1690,5 +1704,7 @@ __all__ = [
"WorkflowTriggerBlockParametersItem_Workflow", "WorkflowTriggerBlockParametersItem_Workflow",
"WorkflowTriggerBlockYaml", "WorkflowTriggerBlockYaml",
"__version__", "__version__",
"agent",
"artifacts",
"scripts", "scripts",
] ]

View file

@ -0,0 +1,34 @@
# This file was auto-generated by Fern from our API Definition.
# isort: skip_file
import typing
from importlib import import_module
if typing.TYPE_CHECKING:
from .types import ListOrganizationSchedulesApiV1SchedulesGetRequestStatus
_dynamic_imports: typing.Dict[str, str] = {"ListOrganizationSchedulesApiV1SchedulesGetRequestStatus": ".types"}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
module = import_module(module_name, __package__)
if module_name == f".{attr_name}":
return module
else:
return getattr(module, attr_name)
except ImportError as e:
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
except AttributeError as e:
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
__all__ = ["ListOrganizationSchedulesApiV1SchedulesGetRequestStatus"]

View file

@ -0,0 +1,842 @@
# 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 ..types.organization_schedule_list_response import OrganizationScheduleListResponse
from ..types.workflow_schedule_list_response import WorkflowScheduleListResponse
from ..types.workflow_schedule_response import WorkflowScheduleResponse
from .raw_client import AsyncRawAgentClient, RawAgentClient
from .types.list_organization_schedules_api_v1schedules_get_request_status import (
ListOrganizationSchedulesApiV1SchedulesGetRequestStatus,
)
# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)
class AgentClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._raw_client = RawAgentClient(client_wrapper=client_wrapper)
@property
def with_raw_response(self) -> RawAgentClient:
"""
Retrieves a raw implementation of this client that returns raw responses.
Returns
-------
RawAgentClient
"""
return self._raw_client
def list_organization_schedules(
self,
*,
page: typing.Optional[int] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[ListOrganizationSchedulesApiV1SchedulesGetRequestStatus] = None,
search: typing.Optional[str] = None,
request_options: typing.Optional[RequestOptions] = None,
) -> OrganizationScheduleListResponse:
"""
Parameters
----------
page : typing.Optional[int]
page_size : typing.Optional[int]
status : typing.Optional[ListOrganizationSchedulesApiV1SchedulesGetRequestStatus]
Filter by status: 'active' or 'paused'
search : typing.Optional[str]
Search by workflow title or schedule name
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
OrganizationScheduleListResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.list_organization_schedules(
page=1,
page_size=1,
status="active",
search="search",
)
"""
_response = self._raw_client.list_organization_schedules(
page=page, page_size=page_size, status=status, search=search, request_options=request_options
)
return _response.data
def list_workflow_schedules(
self, workflow_permanent_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> WorkflowScheduleListResponse:
"""
Parameters
----------
workflow_permanent_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleListResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.list_workflow_schedules(
workflow_permanent_id="workflow_permanent_id",
)
"""
_response = self._raw_client.list_workflow_schedules(workflow_permanent_id, request_options=request_options)
return _response.data
def create_workflow_schedule(
self,
workflow_permanent_id: str,
*,
cron_expression: str,
timezone: str,
enabled: typing.Optional[bool] = OMIT,
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
name: typing.Optional[str] = OMIT,
description: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
cron_expression : str
timezone : str
enabled : typing.Optional[bool]
parameters : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
name : typing.Optional[str]
description : typing.Optional[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.create_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
cron_expression="cron_expression",
timezone="timezone",
)
"""
_response = self._raw_client.create_workflow_schedule(
workflow_permanent_id,
cron_expression=cron_expression,
timezone=timezone,
enabled=enabled,
parameters=parameters,
name=name,
description=description,
request_options=request_options,
)
return _response.data
def get_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.get_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
"""
_response = self._raw_client.get_workflow_schedule(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
def update_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
cron_expression: str,
timezone: str,
enabled: typing.Optional[bool] = OMIT,
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
name: typing.Optional[str] = OMIT,
description: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
cron_expression : str
timezone : str
enabled : typing.Optional[bool]
parameters : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
name : typing.Optional[str]
description : typing.Optional[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.update_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
cron_expression="cron_expression",
timezone="timezone",
)
"""
_response = self._raw_client.update_workflow_schedule(
workflow_permanent_id,
workflow_schedule_id,
cron_expression=cron_expression,
timezone=timezone,
enabled=enabled,
parameters=parameters,
name=name,
description=description,
request_options=request_options,
)
return _response.data
def delete_workflow_schedule_route(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> typing.Dict[str, bool]:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
typing.Dict[str, bool]
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.delete_workflow_schedule_route(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
"""
_response = self._raw_client.delete_workflow_schedule_route(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
def enable_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.enable_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
"""
_response = self._raw_client.enable_workflow_schedule(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
def disable_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
from skyvern import Skyvern
client = Skyvern(
api_key="YOUR_API_KEY",
)
client.agent.disable_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
"""
_response = self._raw_client.disable_workflow_schedule(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
class AsyncAgentClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._raw_client = AsyncRawAgentClient(client_wrapper=client_wrapper)
@property
def with_raw_response(self) -> AsyncRawAgentClient:
"""
Retrieves a raw implementation of this client that returns raw responses.
Returns
-------
AsyncRawAgentClient
"""
return self._raw_client
async def list_organization_schedules(
self,
*,
page: typing.Optional[int] = None,
page_size: typing.Optional[int] = None,
status: typing.Optional[ListOrganizationSchedulesApiV1SchedulesGetRequestStatus] = None,
search: typing.Optional[str] = None,
request_options: typing.Optional[RequestOptions] = None,
) -> OrganizationScheduleListResponse:
"""
Parameters
----------
page : typing.Optional[int]
page_size : typing.Optional[int]
status : typing.Optional[ListOrganizationSchedulesApiV1SchedulesGetRequestStatus]
Filter by status: 'active' or 'paused'
search : typing.Optional[str]
Search by workflow title or schedule name
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
OrganizationScheduleListResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.list_organization_schedules(
page=1,
page_size=1,
status="active",
search="search",
)
asyncio.run(main())
"""
_response = await self._raw_client.list_organization_schedules(
page=page, page_size=page_size, status=status, search=search, request_options=request_options
)
return _response.data
async def list_workflow_schedules(
self, workflow_permanent_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> WorkflowScheduleListResponse:
"""
Parameters
----------
workflow_permanent_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleListResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.list_workflow_schedules(
workflow_permanent_id="workflow_permanent_id",
)
asyncio.run(main())
"""
_response = await self._raw_client.list_workflow_schedules(
workflow_permanent_id, request_options=request_options
)
return _response.data
async def create_workflow_schedule(
self,
workflow_permanent_id: str,
*,
cron_expression: str,
timezone: str,
enabled: typing.Optional[bool] = OMIT,
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
name: typing.Optional[str] = OMIT,
description: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
cron_expression : str
timezone : str
enabled : typing.Optional[bool]
parameters : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
name : typing.Optional[str]
description : typing.Optional[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.create_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
cron_expression="cron_expression",
timezone="timezone",
)
asyncio.run(main())
"""
_response = await self._raw_client.create_workflow_schedule(
workflow_permanent_id,
cron_expression=cron_expression,
timezone=timezone,
enabled=enabled,
parameters=parameters,
name=name,
description=description,
request_options=request_options,
)
return _response.data
async def get_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.get_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
asyncio.run(main())
"""
_response = await self._raw_client.get_workflow_schedule(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
async def update_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
cron_expression: str,
timezone: str,
enabled: typing.Optional[bool] = OMIT,
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
name: typing.Optional[str] = OMIT,
description: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
cron_expression : str
timezone : str
enabled : typing.Optional[bool]
parameters : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
name : typing.Optional[str]
description : typing.Optional[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.update_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
cron_expression="cron_expression",
timezone="timezone",
)
asyncio.run(main())
"""
_response = await self._raw_client.update_workflow_schedule(
workflow_permanent_id,
workflow_schedule_id,
cron_expression=cron_expression,
timezone=timezone,
enabled=enabled,
parameters=parameters,
name=name,
description=description,
request_options=request_options,
)
return _response.data
async def delete_workflow_schedule_route(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> typing.Dict[str, bool]:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
typing.Dict[str, bool]
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.delete_workflow_schedule_route(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
asyncio.run(main())
"""
_response = await self._raw_client.delete_workflow_schedule_route(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
async def enable_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.enable_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
asyncio.run(main())
"""
_response = await self._raw_client.enable_workflow_schedule(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data
async def disable_workflow_schedule(
self,
workflow_permanent_id: str,
workflow_schedule_id: str,
*,
request_options: typing.Optional[RequestOptions] = None,
) -> WorkflowScheduleResponse:
"""
Parameters
----------
workflow_permanent_id : str
workflow_schedule_id : str
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
WorkflowScheduleResponse
Successful Response
Examples
--------
import asyncio
from skyvern import AsyncSkyvern
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
)
async def main() -> None:
await client.agent.disable_workflow_schedule(
workflow_permanent_id="workflow_permanent_id",
workflow_schedule_id="workflow_schedule_id",
)
asyncio.run(main())
"""
_response = await self._raw_client.disable_workflow_schedule(
workflow_permanent_id, workflow_schedule_id, request_options=request_options
)
return _response.data

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
# This file was auto-generated by Fern from our API Definition.
# isort: skip_file
import typing
from importlib import import_module
if typing.TYPE_CHECKING:
from .list_organization_schedules_api_v1schedules_get_request_status import (
ListOrganizationSchedulesApiV1SchedulesGetRequestStatus,
)
_dynamic_imports: typing.Dict[str, str] = {
"ListOrganizationSchedulesApiV1SchedulesGetRequestStatus": ".list_organization_schedules_api_v1schedules_get_request_status"
}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
module = import_module(module_name, __package__)
if module_name == f".{attr_name}":
return module
else:
return getattr(module, attr_name)
except ImportError as e:
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
except AttributeError as e:
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
__all__ = ["ListOrganizationSchedulesApiV1SchedulesGetRequestStatus"]

View file

@ -0,0 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
import typing
ListOrganizationSchedulesApiV1SchedulesGetRequestStatus = typing.Union[typing.Literal["active", "paused"], typing.Any]

File diff suppressed because it is too large Load diff

View file

@ -22,10 +22,10 @@ class BaseClientWrapper:
def get_headers(self) -> typing.Dict[str, str]: def get_headers(self) -> typing.Dict[str, str]:
headers: typing.Dict[str, str] = { headers: typing.Dict[str, str] = {
"User-Agent": "skyvern/1.0.24", "User-Agent": "skyvern/1.0.27",
"X-Fern-Language": "Python", "X-Fern-Language": "Python",
"X-Fern-SDK-Name": "skyvern", "X-Fern-SDK-Name": "skyvern",
"X-Fern-SDK-Version": "1.0.24", "X-Fern-SDK-Version": "1.0.27",
**(self.get_custom_headers() or {}), **(self.get_custom_headers() or {}),
} }
if self._api_key is not None: if self._api_key is not None:

File diff suppressed because it is too large Load diff

View file

@ -56,7 +56,6 @@ if typing.TYPE_CHECKING:
from .browser_session_response import BrowserSessionResponse from .browser_session_response import BrowserSessionResponse
from .change_tier_response import ChangeTierResponse from .change_tier_response import ChangeTierResponse
from .checkout_session_response import CheckoutSessionResponse from .checkout_session_response import CheckoutSessionResponse
from .clear_cache_response import ClearCacheResponse
from .click_action import ClickAction from .click_action import ClickAction
from .click_action_data import ClickActionData from .click_action_data import ClickActionData
from .click_context import ClickContext from .click_context import ClickContext
@ -155,8 +154,6 @@ if typing.TYPE_CHECKING:
from .file_upload_block import FileUploadBlock from .file_upload_block import FileUploadBlock
from .file_upload_block_yaml import FileUploadBlockYaml from .file_upload_block_yaml import FileUploadBlockYaml
from .folder import Folder from .folder import Folder
from .folder_create import FolderCreate
from .folder_update import FolderUpdate
from .for_loop_block import ForLoopBlock from .for_loop_block import ForLoopBlock
from .for_loop_block_data_schema import ForLoopBlockDataSchema from .for_loop_block_data_schema import ForLoopBlockDataSchema
from .for_loop_block_loop_blocks_item import ( from .for_loop_block_loop_blocks_item import (
@ -316,6 +313,8 @@ if typing.TYPE_CHECKING:
from .non_empty_password_credential import NonEmptyPasswordCredential from .non_empty_password_credential import NonEmptyPasswordCredential
from .one_password_credential_parameter import OnePasswordCredentialParameter from .one_password_credential_parameter import OnePasswordCredentialParameter
from .one_password_credential_parameter_yaml import OnePasswordCredentialParameterYaml from .one_password_credential_parameter_yaml import OnePasswordCredentialParameterYaml
from .organization_schedule_item import OrganizationScheduleItem
from .organization_schedule_list_response import OrganizationScheduleListResponse
from .otp_type import OtpType from .otp_type import OtpType
from .output_parameter import OutputParameter from .output_parameter import OutputParameter
from .output_parameter_yaml import OutputParameterYaml from .output_parameter_yaml import OutputParameterYaml
@ -419,7 +418,6 @@ if typing.TYPE_CHECKING:
from .thought_type import ThoughtType from .thought_type import ThoughtType
from .totp_code import TotpCode from .totp_code import TotpCode
from .totp_type import TotpType from .totp_type import TotpType
from .update_workflow_folder_request import UpdateWorkflowFolderRequest
from .upload_file_action import UploadFileAction from .upload_file_action import UploadFileAction
from .upload_file_action_data import UploadFileActionData from .upload_file_action_data import UploadFileActionData
from .upload_file_response import UploadFileResponse from .upload_file_response import UploadFileResponse
@ -585,6 +583,11 @@ if typing.TYPE_CHECKING:
from .workflow_run_status import WorkflowRunStatus from .workflow_run_status import WorkflowRunStatus
from .workflow_run_timeline import WorkflowRunTimeline from .workflow_run_timeline import WorkflowRunTimeline
from .workflow_run_timeline_type import WorkflowRunTimelineType from .workflow_run_timeline_type import WorkflowRunTimelineType
from .workflow_run_trigger_type import WorkflowRunTriggerType
from .workflow_schedule import WorkflowSchedule
from .workflow_schedule_list_response import WorkflowScheduleListResponse
from .workflow_schedule_response import WorkflowScheduleResponse
from .workflow_schedule_upsert_request import WorkflowScheduleUpsertRequest
from .workflow_status import WorkflowStatus from .workflow_status import WorkflowStatus
from .workflow_trigger_block import WorkflowTriggerBlock from .workflow_trigger_block import WorkflowTriggerBlock
from .workflow_trigger_block_parameters_item import ( from .workflow_trigger_block_parameters_item import (
@ -649,7 +652,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"BrowserSessionResponse": ".browser_session_response", "BrowserSessionResponse": ".browser_session_response",
"ChangeTierResponse": ".change_tier_response", "ChangeTierResponse": ".change_tier_response",
"CheckoutSessionResponse": ".checkout_session_response", "CheckoutSessionResponse": ".checkout_session_response",
"ClearCacheResponse": ".clear_cache_response",
"ClickAction": ".click_action", "ClickAction": ".click_action",
"ClickActionData": ".click_action_data", "ClickActionData": ".click_action_data",
"ClickContext": ".click_context", "ClickContext": ".click_context",
@ -740,8 +742,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"FileUploadBlock": ".file_upload_block", "FileUploadBlock": ".file_upload_block",
"FileUploadBlockYaml": ".file_upload_block_yaml", "FileUploadBlockYaml": ".file_upload_block_yaml",
"Folder": ".folder", "Folder": ".folder",
"FolderCreate": ".folder_create",
"FolderUpdate": ".folder_update",
"ForLoopBlock": ".for_loop_block", "ForLoopBlock": ".for_loop_block",
"ForLoopBlockDataSchema": ".for_loop_block_data_schema", "ForLoopBlockDataSchema": ".for_loop_block_data_schema",
"ForLoopBlockLoopBlocksItem": ".for_loop_block_loop_blocks_item", "ForLoopBlockLoopBlocksItem": ".for_loop_block_loop_blocks_item",
@ -885,6 +885,8 @@ _dynamic_imports: typing.Dict[str, str] = {
"NonEmptyPasswordCredential": ".non_empty_password_credential", "NonEmptyPasswordCredential": ".non_empty_password_credential",
"OnePasswordCredentialParameter": ".one_password_credential_parameter", "OnePasswordCredentialParameter": ".one_password_credential_parameter",
"OnePasswordCredentialParameterYaml": ".one_password_credential_parameter_yaml", "OnePasswordCredentialParameterYaml": ".one_password_credential_parameter_yaml",
"OrganizationScheduleItem": ".organization_schedule_item",
"OrganizationScheduleListResponse": ".organization_schedule_list_response",
"OtpType": ".otp_type", "OtpType": ".otp_type",
"OutputParameter": ".output_parameter", "OutputParameter": ".output_parameter",
"OutputParameterYaml": ".output_parameter_yaml", "OutputParameterYaml": ".output_parameter_yaml",
@ -980,7 +982,6 @@ _dynamic_imports: typing.Dict[str, str] = {
"ThoughtType": ".thought_type", "ThoughtType": ".thought_type",
"TotpCode": ".totp_code", "TotpCode": ".totp_code",
"TotpType": ".totp_type", "TotpType": ".totp_type",
"UpdateWorkflowFolderRequest": ".update_workflow_folder_request",
"UploadFileAction": ".upload_file_action", "UploadFileAction": ".upload_file_action",
"UploadFileActionData": ".upload_file_action_data", "UploadFileActionData": ".upload_file_action_data",
"UploadFileResponse": ".upload_file_response", "UploadFileResponse": ".upload_file_response",
@ -1132,6 +1133,11 @@ _dynamic_imports: typing.Dict[str, str] = {
"WorkflowRunStatus": ".workflow_run_status", "WorkflowRunStatus": ".workflow_run_status",
"WorkflowRunTimeline": ".workflow_run_timeline", "WorkflowRunTimeline": ".workflow_run_timeline",
"WorkflowRunTimelineType": ".workflow_run_timeline_type", "WorkflowRunTimelineType": ".workflow_run_timeline_type",
"WorkflowRunTriggerType": ".workflow_run_trigger_type",
"WorkflowSchedule": ".workflow_schedule",
"WorkflowScheduleListResponse": ".workflow_schedule_list_response",
"WorkflowScheduleResponse": ".workflow_schedule_response",
"WorkflowScheduleUpsertRequest": ".workflow_schedule_upsert_request",
"WorkflowStatus": ".workflow_status", "WorkflowStatus": ".workflow_status",
"WorkflowTriggerBlock": ".workflow_trigger_block", "WorkflowTriggerBlock": ".workflow_trigger_block",
"WorkflowTriggerBlockParametersItem": ".workflow_trigger_block_parameters_item", "WorkflowTriggerBlockParametersItem": ".workflow_trigger_block_parameters_item",
@ -1218,7 +1224,6 @@ __all__ = [
"BrowserSessionResponse", "BrowserSessionResponse",
"ChangeTierResponse", "ChangeTierResponse",
"CheckoutSessionResponse", "CheckoutSessionResponse",
"ClearCacheResponse",
"ClickAction", "ClickAction",
"ClickActionData", "ClickActionData",
"ClickContext", "ClickContext",
@ -1309,8 +1314,6 @@ __all__ = [
"FileUploadBlock", "FileUploadBlock",
"FileUploadBlockYaml", "FileUploadBlockYaml",
"Folder", "Folder",
"FolderCreate",
"FolderUpdate",
"ForLoopBlock", "ForLoopBlock",
"ForLoopBlockDataSchema", "ForLoopBlockDataSchema",
"ForLoopBlockLoopBlocksItem", "ForLoopBlockLoopBlocksItem",
@ -1454,6 +1457,8 @@ __all__ = [
"NonEmptyPasswordCredential", "NonEmptyPasswordCredential",
"OnePasswordCredentialParameter", "OnePasswordCredentialParameter",
"OnePasswordCredentialParameterYaml", "OnePasswordCredentialParameterYaml",
"OrganizationScheduleItem",
"OrganizationScheduleListResponse",
"OtpType", "OtpType",
"OutputParameter", "OutputParameter",
"OutputParameterYaml", "OutputParameterYaml",
@ -1549,7 +1554,6 @@ __all__ = [
"ThoughtType", "ThoughtType",
"TotpCode", "TotpCode",
"TotpType", "TotpType",
"UpdateWorkflowFolderRequest",
"UploadFileAction", "UploadFileAction",
"UploadFileActionData", "UploadFileActionData",
"UploadFileResponse", "UploadFileResponse",
@ -1701,6 +1705,11 @@ __all__ = [
"WorkflowRunStatus", "WorkflowRunStatus",
"WorkflowRunTimeline", "WorkflowRunTimeline",
"WorkflowRunTimelineType", "WorkflowRunTimelineType",
"WorkflowRunTriggerType",
"WorkflowSchedule",
"WorkflowScheduleListResponse",
"WorkflowScheduleResponse",
"WorkflowScheduleUpsertRequest",
"WorkflowStatus", "WorkflowStatus",
"WorkflowTriggerBlock", "WorkflowTriggerBlock",
"WorkflowTriggerBlockParametersItem", "WorkflowTriggerBlockParametersItem",

View file

@ -21,6 +21,7 @@ class Artifact(UniversalBaseModel):
artifact_id: str artifact_id: str
artifact_type: ArtifactType artifact_type: ArtifactType
uri: str uri: str
bundle_key: typing.Optional[str] = None
task_id: typing.Optional[str] = None task_id: typing.Optional[str] = None
step_id: typing.Optional[str] = None step_id: typing.Optional[str] = None
workflow_run_id: typing.Optional[str] = None workflow_run_id: typing.Optional[str] = None

View file

@ -31,6 +31,8 @@ ArtifactType = typing.Union[
"har", "har",
"script_file", "script_file",
"pdf", "pdf",
"step_archive",
"task_archive",
], ],
typing.Any, typing.Any,
] ]

View file

@ -43,6 +43,11 @@ class CredentialResponse(UniversalBaseModel):
Login page URL used during the credential test Login page URL used during the credential test
""" """
user_context: typing.Optional[str] = pydantic.Field(default=None)
"""
User-provided context describing the login sequence (e.g., 'click SSO button first')
"""
if IS_PYDANTIC_V2: if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else: else:

View file

@ -0,0 +1,32 @@
# This file was auto-generated by Fern from our API Definition.
import datetime as dt
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class OrganizationScheduleItem(UniversalBaseModel):
workflow_schedule_id: str
organization_id: str
workflow_permanent_id: str
workflow_title: str
cron_expression: str
timezone: str
enabled: bool
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
name: typing.Optional[str] = None
description: typing.Optional[str] = None
next_run: typing.Optional[dt.datetime] = None
created_at: dt.datetime
modified_at: dt.datetime
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

View file

@ -4,10 +4,14 @@ import typing
import pydantic import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .organization_schedule_item import OrganizationScheduleItem
class UpdateWorkflowFolderRequest(UniversalBaseModel): class OrganizationScheduleListResponse(UniversalBaseModel):
folder_id: typing.Optional[str] = pydantic.Field(default=None) schedules: typing.List[OrganizationScheduleItem]
total_count: int
page: int
page_size: int
if IS_PYDANTIC_V2: if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2

View file

@ -2,4 +2,4 @@
import typing import typing
PersistentBrowserType = typing.Union[typing.Literal["msedge", "chrome"], typing.Any] PersistentBrowserType = typing.Union[typing.Literal["msedge", "chrome", "stealth-chromium"], typing.Any]

View file

@ -2,4 +2,4 @@
import typing import typing
PlanTier = typing.Union[typing.Literal["free", "hobby", "pro"], typing.Any] PlanTier = typing.Union[typing.Literal["free", "hobby", "pro", "enterprise"], typing.Any]

View file

@ -35,7 +35,6 @@ class Workflow(UniversalBaseModel):
ai_fallback: typing.Optional[bool] = None ai_fallback: typing.Optional[bool] = None
cache_key: typing.Optional[str] = None cache_key: typing.Optional[str] = None
adaptive_caching: typing.Optional[bool] = None adaptive_caching: typing.Optional[bool] = None
code_version: typing.Optional[int] = None
generate_script_on_terminal: typing.Optional[bool] = None generate_script_on_terminal: typing.Optional[bool] = None
run_sequentially: typing.Optional[bool] = None run_sequentially: typing.Optional[bool] = None
sequential_key: typing.Optional[str] = None sequential_key: typing.Optional[str] = None

View file

@ -29,7 +29,6 @@ class WorkflowCreateYamlRequest(UniversalBaseModel):
ai_fallback: typing.Optional[bool] = None ai_fallback: typing.Optional[bool] = None
cache_key: typing.Optional[str] = None cache_key: typing.Optional[str] = None
adaptive_caching: typing.Optional[bool] = None adaptive_caching: typing.Optional[bool] = None
code_version: typing.Optional[int] = None
generate_script_on_terminal: typing.Optional[bool] = None generate_script_on_terminal: typing.Optional[bool] = None
run_sequentially: typing.Optional[bool] = None run_sequentially: typing.Optional[bool] = None
sequential_key: typing.Optional[str] = None sequential_key: typing.Optional[str] = None

View file

@ -8,6 +8,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .script_run_response import ScriptRunResponse from .script_run_response import ScriptRunResponse
from .workflow_run_proxy_location import WorkflowRunProxyLocation from .workflow_run_proxy_location import WorkflowRunProxyLocation
from .workflow_run_status import WorkflowRunStatus from .workflow_run_status import WorkflowRunStatus
from .workflow_run_trigger_type import WorkflowRunTriggerType
class WorkflowRun(UniversalBaseModel): class WorkflowRun(UniversalBaseModel):
@ -37,9 +38,8 @@ class WorkflowRun(UniversalBaseModel):
sequential_key: typing.Optional[str] = None sequential_key: typing.Optional[str] = None
ai_fallback: typing.Optional[bool] = None ai_fallback: typing.Optional[bool] = None
code_gen: typing.Optional[bool] = None code_gen: typing.Optional[bool] = None
waiting_for_verification_code: typing.Optional[bool] = None trigger_type: typing.Optional[WorkflowRunTriggerType] = None
verification_code_identifier: typing.Optional[str] = None workflow_schedule_id: typing.Optional[str] = None
verification_code_polling_started_at: typing.Optional[dt.datetime] = None
queued_at: typing.Optional[dt.datetime] = None queued_at: typing.Optional[dt.datetime] = None
started_at: typing.Optional[dt.datetime] = None started_at: typing.Optional[dt.datetime] = None
finished_at: typing.Optional[dt.datetime] = None finished_at: typing.Optional[dt.datetime] = None

View file

@ -26,6 +26,7 @@ class WorkflowRunBlock(UniversalBaseModel):
output: typing.Optional[WorkflowRunBlockOutput] = None output: typing.Optional[WorkflowRunBlockOutput] = None
continue_on_failure: typing.Optional[bool] = None continue_on_failure: typing.Optional[bool] = None
failure_reason: typing.Optional[str] = None failure_reason: typing.Optional[str] = None
error_codes: typing.Optional[typing.List[str]] = None
engine: typing.Optional[RunEngine] = None engine: typing.Optional[RunEngine] = None
task_id: typing.Optional[str] = None task_id: typing.Optional[str] = None
url: typing.Optional[str] = None url: typing.Optional[str] = None

View file

@ -0,0 +1,5 @@
# This file was auto-generated by Fern from our API Definition.
import typing
WorkflowRunTriggerType = typing.Union[typing.Literal["manual", "api", "scheduled"], typing.Any]

View file

@ -0,0 +1,32 @@
# This file was auto-generated by Fern from our API Definition.
import datetime as dt
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class WorkflowSchedule(UniversalBaseModel):
workflow_schedule_id: str
organization_id: str
workflow_permanent_id: str
cron_expression: str
timezone: str
enabled: bool
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
temporal_schedule_id: typing.Optional[str] = None
name: typing.Optional[str] = None
description: 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

View file

@ -4,11 +4,11 @@ import typing
import pydantic import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .workflow_schedule import WorkflowSchedule
class FolderCreate(UniversalBaseModel): class WorkflowScheduleListResponse(UniversalBaseModel):
title: str = pydantic.Field() schedules: typing.List[WorkflowSchedule]
description: typing.Optional[str] = pydantic.Field(default=None)
if IS_PYDANTIC_V2: if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2

View file

@ -1,14 +1,16 @@
# This file was auto-generated by Fern from our API Definition. # This file was auto-generated by Fern from our API Definition.
import datetime as dt
import typing import typing
import pydantic import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .workflow_schedule import WorkflowSchedule
class FolderUpdate(UniversalBaseModel): class WorkflowScheduleResponse(UniversalBaseModel):
title: typing.Optional[str] = pydantic.Field(default=None) schedule: WorkflowSchedule
description: typing.Optional[str] = pydantic.Field(default=None) next_runs: typing.Optional[typing.List[dt.datetime]] = None
if IS_PYDANTIC_V2: if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2

View file

@ -6,20 +6,13 @@ import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class ClearCacheResponse(UniversalBaseModel): class WorkflowScheduleUpsertRequest(UniversalBaseModel):
""" cron_expression: str
Response model for cache clearing operations. timezone: str
""" enabled: typing.Optional[bool] = None
parameters: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
deleted_count: int = pydantic.Field() name: typing.Optional[str] = None
""" description: typing.Optional[str] = None
Number of cached entries deleted
"""
message: str = pydantic.Field()
"""
Status message
"""
if IS_PYDANTIC_V2: if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2

View file

@ -46,7 +46,7 @@ def test_raw_client_delete_folder_raises_not_found_on_empty_404() -> None:
status_code=404, status_code=404,
text="", text="",
headers={}, headers={},
json=Mock(side_effect=AssertionError("json() should not be called for empty 404 delete responses")), json=Mock(return_value=None),
) )
client = RawSkyvern( client = RawSkyvern(
client_wrapper=SimpleNamespace(httpx_client=SimpleNamespace(request=Mock(return_value=response))) client_wrapper=SimpleNamespace(httpx_client=SimpleNamespace(request=Mock(return_value=response)))
@ -62,7 +62,7 @@ async def test_async_raw_client_delete_folder_raises_not_found_on_empty_404() ->
status_code=404, status_code=404,
text="", text="",
headers={}, headers={},
json=Mock(side_effect=AssertionError("json() should not be called for empty 404 delete responses")), json=Mock(return_value=None),
) )
client = AsyncRawSkyvern( client = AsyncRawSkyvern(
client_wrapper=SimpleNamespace(httpx_client=SimpleNamespace(request=AsyncMock(return_value=response))) client_wrapper=SimpleNamespace(httpx_client=SimpleNamespace(request=AsyncMock(return_value=response)))

5202
uv.lock generated

File diff suppressed because it is too large Load diff