Skip to content

Commit 4258604

Browse files
committed
feat: allow passing an existing session_id to skip browser creation
When session_id is provided in the payload, the CUA task uses that existing browser session directly instead of creating a new one. The caller is responsible for the session lifecycle. This lets users pre-configure browsers with any settings and reuse sessions across tasks. Made-with: Cursor
1 parent 228b014 commit 4258604

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

pkg/templates/python/cua/main.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class CuaInput(TypedDict, total=False):
4848
provider: Literal["anthropic", "openai", "gemini"]
4949
model: str
5050
record_replay: bool
51+
session_id: str
5152
browser: BrowserConfig
5253

5354

@@ -83,6 +84,21 @@ async def cua_task(ctx: kernel.KernelContext, payload: CuaInput | None = None) -
8384
if requested:
8485
providers = [requested] + [p for p in providers if p is not requested]
8586

87+
# Use an existing browser session or create a new one
88+
if payload.get("session_id"):
89+
task_result = await run_with_fallback(
90+
providers,
91+
TaskOptions(
92+
query=payload["query"],
93+
kernel=kernel_client,
94+
session_id=payload["session_id"],
95+
model=payload.get("model"),
96+
viewport_width=1280,
97+
viewport_height=800,
98+
),
99+
)
100+
return {"result": task_result.result, "provider": task_result.provider}
101+
86102
browser_cfg = payload.get("browser") or {}
87103
session = KernelBrowserSession(
88104
kernel_client,

pkg/templates/typescript/cua/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ interface CuaInput {
2929
provider?: ProviderName;
3030
model?: string;
3131
record_replay?: boolean;
32+
session_id?: string;
3233
browser?: BrowserConfig;
3334
}
3435

@@ -66,6 +67,19 @@ app.action<CuaInput, CuaOutput>(
6667
}
6768
}
6869

70+
// Use an existing browser session or create a new one
71+
if (payload.session_id) {
72+
const { result, provider } = await runWithFallback(providers, {
73+
query: payload.query,
74+
model: payload.model,
75+
kernel,
76+
sessionId: payload.session_id,
77+
viewportWidth: 1280,
78+
viewportHeight: 800,
79+
});
80+
return { result, provider };
81+
}
82+
6983
const session = new KernelBrowserSession(kernel, {
7084
invocationId: ctx.invocation_id,
7185
stealth: true,

0 commit comments

Comments
 (0)