align workflow CLI commands with MCP parity (#4792)

This commit is contained in:
Marc Kelechava
2026-02-18 11:34:12 -08:00
committed by GitHub
parent 2f6850ce20
commit 46a7ec1d26
12 changed files with 1609 additions and 151 deletions

View File

@@ -4,7 +4,11 @@ from typing import Annotated, Any
from pydantic import Field
from skyvern.cli.core.api_key_hash import hash_api_key_for_cache
from skyvern.cli.core.client import get_active_api_key
from skyvern.cli.core.session_manager import is_stateless_http_mode
from skyvern.cli.core.session_ops import do_session_close, do_session_create, do_session_list
from skyvern.schemas.runs import ProxyLocation
from ._common import BrowserContext, ErrorCode, Timer, make_error, make_result
from ._session import (
@@ -16,6 +20,13 @@ from ._session import (
)
def _session_api_key_hash() -> str | None:
api_key = get_active_api_key()
if not api_key:
return None
return hash_api_key_for_cache(api_key)
async def skyvern_session_create(
timeout: Annotated[int | None, Field(description="Session timeout in minutes (5-1440)")] = 60,
proxy_location: Annotated[str | None, Field(description="Proxy location: RESIDENTIAL, US, etc.")] = None,
@@ -29,7 +40,33 @@ async def skyvern_session_create(
"""
with Timer() as timer:
try:
if is_stateless_http_mode() and local:
return make_result(
"skyvern_session_create",
ok=False,
error=make_error(
ErrorCode.INVALID_INPUT,
"Local browser sessions are not supported in stateless HTTP mode",
"Use cloud sessions for remote MCP transport",
),
)
skyvern = get_skyvern()
if is_stateless_http_mode():
proxy = ProxyLocation(proxy_location) if proxy_location else None
session = await skyvern.create_browser_session(timeout=timeout or 60, proxy_location=proxy)
timer.mark("sdk")
ctx = BrowserContext(mode="cloud_session", session_id=session.browser_session_id)
return make_result(
"skyvern_session_create",
browser_context=ctx,
data={
"session_id": session.browser_session_id,
"timeout_minutes": timeout or 60,
},
timing_ms=timer.timing_ms,
)
browser, result = await do_session_create(
skyvern,
timeout=timeout or 60,
@@ -43,7 +80,7 @@ async def skyvern_session_create(
ctx = BrowserContext(mode="local")
else:
ctx = BrowserContext(mode="cloud_session", session_id=result.session_id)
set_current_session(SessionState(browser=browser, context=ctx))
set_current_session(SessionState(browser=browser, context=ctx, api_key_hash=_session_api_key_hash()))
except ValueError as e:
return make_result(