diff --git a/package.json b/package.json index 36810b0..08732bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hyperbrowser/sdk", - "version": "0.92.5", + "version": "0.92.6", "description": "Node SDK for Hyperbrowser API", "author": "", "repository": { diff --git a/src/types/agents/claude-computer-use.ts b/src/types/agents/claude-computer-use.ts index 37181c8..f33cbfb 100644 --- a/src/types/agents/claude-computer-use.ts +++ b/src/types/agents/claude-computer-use.ts @@ -1,4 +1,8 @@ -import { ClaudeComputerUseLlm, ClaudeComputerUseTaskStatus } from "../constants"; +import { + ClaudeComputerUseLlm, + ClaudeComputerUseReasoningEffort, + ClaudeComputerUseTaskStatus, +} from "../constants"; import { CreateSessionParams } from "../session"; export interface ClaudeComputerUseApiKeys { @@ -8,6 +12,7 @@ export interface ClaudeComputerUseApiKeys { export interface StartClaudeComputerUseTaskParams { task: string; llm?: ClaudeComputerUseLlm; + reasoningEffort?: ClaudeComputerUseReasoningEffort; sessionId?: string; maxFailures?: number; maxSteps?: number; diff --git a/src/types/agents/cua.ts b/src/types/agents/cua.ts index 8f0656f..de51d71 100644 --- a/src/types/agents/cua.ts +++ b/src/types/agents/cua.ts @@ -1,4 +1,4 @@ -import { CuaLlm, CuaTaskStatus } from "../constants"; +import { CuaLlm, CuaReasoningEffort, CuaTaskStatus } from "../constants"; import { CreateSessionParams } from "../session"; export interface CuaApiKeys { @@ -12,6 +12,7 @@ export interface CuaBaseUrls { export interface StartCuaTaskParams { task: string; llm?: CuaLlm; + reasoningEffort?: CuaReasoningEffort; sessionId?: string; maxFailures?: number; maxSteps?: number; diff --git a/src/types/constants.ts b/src/types/constants.ts index 2349a89..b71caa3 100644 --- a/src/types/constants.ts +++ b/src/types/constants.ts @@ -66,6 +66,8 @@ export type ClaudeComputerUseLlm = | "claude-sonnet-4-20250514" | "claude-3-7-sonnet-20250219"; +export type ClaudeComputerUseReasoningEffort = "low" | "medium" | "high" | "xhigh" | "max"; + export type CuaLlm = | "computer-use-preview" | "gpt-6-astra" @@ -76,6 +78,8 @@ export type CuaLlm = | "gpt-5.4" | "gpt-5.4-mini"; +export type CuaReasoningEffort = "none" | "low" | "medium" | "high" | "xhigh" | "max"; + export type HyperAgentVersion = "0.8.0" | "1.1.0"; export type HyperAgentLlm = diff --git a/src/types/index.ts b/src/types/index.ts index 5f2502d..3f6bde8 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -253,7 +253,9 @@ export { BrowserUseTaskStatus, BrowserUseLlm, ClaudeComputerUseLlm, + ClaudeComputerUseReasoningEffort, CuaLlm, + CuaReasoningEffort, GeminiComputerUseLlm, GrokComputerUseLlm, GrokReasoningEffort, diff --git a/tests/integration/client-http.test.ts b/tests/integration/client-http.test.ts index bac03d7..6930e96 100644 --- a/tests/integration/client-http.test.ts +++ b/tests/integration/client-http.test.ts @@ -60,6 +60,11 @@ const startServer = async (): Promise => { return; } + if (request.method === "POST" && request.url === "/api/task/claude-computer-use") { + sendJson(response, 200, { jobId: "claude_job_123", liveUrl: null }); + return; + } + if (request.method === "POST" && request.url === "/api/task/meta-computer-use") { sendJson(response, 200, { jobId: "meta_job_123", liveUrl: null }); return; @@ -281,6 +286,7 @@ describe("client HTTP integration", () => { const started = await client.agents.cua.start({ task: "Complete the task", llm: "gpt-5.4-mini", + reasoningEffort: "high", useCustomApiKeys: true, apiKeys: { openai: "openai-key" }, baseUrls: { openai: "https://example.openai.azure.com/openai/v1/" }, @@ -296,6 +302,7 @@ describe("client HTTP integration", () => { body: { task: "Complete the task", llm: "gpt-5.4-mini", + reasoningEffort: "high", useCustomApiKeys: true, apiKeys: { openai: "openai-key" }, baseUrls: { openai: "https://example.openai.azure.com/openai/v1/" }, @@ -304,6 +311,36 @@ describe("client HTTP integration", () => { ]); }); + test("Claude Computer Use forwards reasoning effort on start", async () => { + const server = await startServer(); + servers.push(server); + const client = new HyperbrowserClient({ + apiKey: "test-api-key", + baseUrl: server.baseUrl, + }); + + const started = await client.agents.claudeComputerUse.start({ + task: "Complete the task", + llm: "claude-opus-5", + reasoningEffort: "xhigh", + }); + + expect(started).toEqual({ jobId: "claude_job_123", liveUrl: null }); + expect(server.requests).toEqual([ + { + method: "POST", + url: "/api/task/claude-computer-use", + apiKey: "test-api-key", + contentType: "application/json", + body: { + task: "Complete the task", + llm: "claude-opus-5", + reasoningEffort: "xhigh", + }, + }, + ]); + }); + test("Meta Computer Use starts, polls, reads, and stops a task", async () => { const server = await startServer(); servers.push(server);