From d1006ba6723ae641097635a8d803db04b8f4e5bd Mon Sep 17 00:00:00 2001
From: "kernel-internal[bot]"
<260533166+kernel-internal[bot]@users.noreply.github.com>
Date: Wed, 2 Sep 2026 19:01:56 +0000
Subject: [PATCH 1/2] feat: Accept browser session name on all
/browsers/{id_or_name} sub-resource routes
Stainless-Generated-From: 6733d316a5573aaf519a68a6ce89bf22cdf0aa72
---
.stats.yml | 2 +-
api.md | 106 ++++++----
src/resources/browsers/browsers.ts | 66 ++++--
src/resources/browsers/computer.ts | 135 +++++++-----
src/resources/browsers/fs/fs.ts | 152 ++++++++------
src/resources/browsers/fs/watch.ts | 26 +--
src/resources/browsers/index.ts | 12 ++
src/resources/browsers/logs.ts | 15 +-
src/resources/browsers/playwright.ts | 13 +-
src/resources/browsers/process.ts | 82 ++++----
src/resources/browsers/replays.ts | 36 ++--
src/resources/browsers/telemetry.ts | 12 +-
src/resources/browsers/webmcp.ts | 196 ++++++++++++++++++
src/resources/telemetry/destinations.ts | 35 ++--
tests/api-resources/browsers/browsers.test.ts | 8 +-
tests/api-resources/browsers/computer.test.ts | 57 +++--
tests/api-resources/browsers/fs/fs.test.ts | 56 +++--
tests/api-resources/browsers/fs/watch.test.ts | 23 +-
tests/api-resources/browsers/logs.test.ts | 4 +-
.../api-resources/browsers/playwright.test.ts | 7 +-
tests/api-resources/browsers/process.test.ts | 28 +--
tests/api-resources/browsers/replays.test.ts | 18 +-
.../api-resources/browsers/telemetry.test.ts | 8 +-
tests/api-resources/browsers/webmcp.test.ts | 46 ++++
24 files changed, 794 insertions(+), 349 deletions(-)
create mode 100644 src/resources/browsers/webmcp.ts
create mode 100644 tests/api-resources/browsers/webmcp.test.ts
diff --git a/.stats.yml b/.stats.yml
index 2aae27b8..a867372d 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1 +1 @@
-configured_endpoints: 145
+configured_endpoints: 147
diff --git a/api.md b/api.md
index 3c2115ac..9f4e5a6c 100644
--- a/api.md
+++ b/api.md
@@ -120,9 +120,9 @@ Methods:
- client.browsers.retrieve(idOrName, { ...params }) -> BrowserRetrieveResponse
- client.browsers.update(idOrName, { ...params }) -> BrowserUpdateResponse
- client.browsers.list({ ...params }) -> BrowserListResponsesOffsetPagination
-- client.browsers.curl(id, { ...params }) -> BrowserCurlResponse
+- client.browsers.curl(idOrName, { ...params }) -> BrowserCurlResponse
- client.browsers.deleteByID(idOrName) -> void
-- client.browsers.loadExtensions(id, { ...params }) -> void
+- client.browsers.loadExtensions(idOrName, { ...params }) -> void
## Telemetry
@@ -182,8 +182,8 @@ Types:
Methods:
-- client.browsers.telemetry.events(id, { ...params }) -> TelemetryEventsResponsesOffsetPagination
-- client.browsers.telemetry.stream(id, { ...params }) -> TelemetryStreamResponse
+- client.browsers.telemetry.events(idOrName, { ...params }) -> TelemetryEventsResponsesOffsetPagination
+- client.browsers.telemetry.stream(idOrName, { ...params }) -> TelemetryStreamResponse
## Replays
@@ -194,10 +194,10 @@ Types:
Methods:
-- client.browsers.replays.list(id) -> ReplayListResponse
-- client.browsers.replays.download(replayID, { ...params }) -> Response
-- client.browsers.replays.start(id, { ...params }) -> ReplayStartResponse
-- client.browsers.replays.stop(replayID, { ...params }) -> void
+- client.browsers.replays.list(idOrName) -> ReplayListResponse
+- client.browsers.replays.download(replayID, { ...params }) -> Response
+- client.browsers.replays.start(idOrName, { ...params }) -> ReplayStartResponse
+- client.browsers.replays.stop(replayID, { ...params }) -> void
## Fs
@@ -208,18 +208,18 @@ Types:
Methods:
-- client.browsers.fs.createDirectory(id, { ...params }) -> void
-- client.browsers.fs.deleteDirectory(id, { ...params }) -> void
-- client.browsers.fs.deleteFile(id, { ...params }) -> void
-- client.browsers.fs.downloadDirZip(id, { ...params }) -> Response
-- client.browsers.fs.fileInfo(id, { ...params }) -> FFileInfoResponse
-- client.browsers.fs.listFiles(id, { ...params }) -> FListFilesResponse
-- client.browsers.fs.move(id, { ...params }) -> void
-- client.browsers.fs.readFile(id, { ...params }) -> Response
-- client.browsers.fs.setFilePermissions(id, { ...params }) -> void
-- client.browsers.fs.upload(id, { ...params }) -> void
-- client.browsers.fs.uploadZip(id, { ...params }) -> void
-- client.browsers.fs.writeFile(id, contents, { ...params }) -> void
+- client.browsers.fs.createDirectory(idOrName, { ...params }) -> void
+- client.browsers.fs.deleteDirectory(idOrName, { ...params }) -> void
+- client.browsers.fs.deleteFile(idOrName, { ...params }) -> void
+- client.browsers.fs.downloadDirZip(idOrName, { ...params }) -> Response
+- client.browsers.fs.fileInfo(idOrName, { ...params }) -> FFileInfoResponse
+- client.browsers.fs.listFiles(idOrName, { ...params }) -> FListFilesResponse
+- client.browsers.fs.move(idOrName, { ...params }) -> void
+- client.browsers.fs.readFile(idOrName, { ...params }) -> Response
+- client.browsers.fs.setFilePermissions(idOrName, { ...params }) -> void
+- client.browsers.fs.upload(idOrName, { ...params }) -> void
+- client.browsers.fs.uploadZip(idOrName, { ...params }) -> void
+- client.browsers.fs.writeFile(idOrName, contents, { ...params }) -> void
### Watch
@@ -230,9 +230,9 @@ Types:
Methods:
-- client.browsers.fs.watch.events(watchID, { ...params }) -> WatchEventsResponse
-- client.browsers.fs.watch.start(id, { ...params }) -> WatchStartResponse
-- client.browsers.fs.watch.stop(watchID, { ...params }) -> void
+- client.browsers.fs.watch.events(watchID, { ...params }) -> WatchEventsResponse
+- client.browsers.fs.watch.start(idOrName, { ...params }) -> WatchStartResponse
+- client.browsers.fs.watch.stop(watchID, { ...params }) -> void
## Process
@@ -248,19 +248,19 @@ Types:
Methods:
-- client.browsers.process.exec(id, { ...params }) -> ProcessExecResponse
-- client.browsers.process.kill(processID, { ...params }) -> ProcessKillResponse
-- client.browsers.process.resize(processID, { ...params }) -> ProcessResizeResponse
-- client.browsers.process.spawn(id, { ...params }) -> ProcessSpawnResponse
-- client.browsers.process.status(processID, { ...params }) -> ProcessStatusResponse
-- client.browsers.process.stdin(processID, { ...params }) -> ProcessStdinResponse
-- client.browsers.process.stdoutStream(processID, { ...params }) -> ProcessStdoutStreamResponse
+- client.browsers.process.exec(idOrName, { ...params }) -> ProcessExecResponse
+- client.browsers.process.kill(processID, { ...params }) -> ProcessKillResponse
+- client.browsers.process.resize(processID, { ...params }) -> ProcessResizeResponse
+- client.browsers.process.spawn(idOrName, { ...params }) -> ProcessSpawnResponse
+- client.browsers.process.status(processID, { ...params }) -> ProcessStatusResponse
+- client.browsers.process.stdin(processID, { ...params }) -> ProcessStdinResponse
+- client.browsers.process.stdoutStream(processID, { ...params }) -> ProcessStdoutStreamResponse
## Logs
Methods:
-- client.browsers.logs.stream(id, { ...params }) -> LogEvent
+- client.browsers.logs.stream(idOrName, { ...params }) -> LogEvent
## Computer
@@ -272,18 +272,18 @@ Types:
Methods:
-- client.browsers.computer.batch(id, { ...params }) -> void
-- client.browsers.computer.captureScreenshot(id, { ...params }) -> Response
-- client.browsers.computer.clickMouse(id, { ...params }) -> void
-- client.browsers.computer.dragMouse(id, { ...params }) -> void
-- client.browsers.computer.getMousePosition(id) -> ComputerGetMousePositionResponse
-- client.browsers.computer.moveMouse(id, { ...params }) -> void
-- client.browsers.computer.pressKey(id, { ...params }) -> void
-- client.browsers.computer.readClipboard(id) -> ComputerReadClipboardResponse
-- client.browsers.computer.scroll(id, { ...params }) -> void
-- client.browsers.computer.setCursorVisibility(id, { ...params }) -> ComputerSetCursorVisibilityResponse
-- client.browsers.computer.typeText(id, { ...params }) -> void
-- client.browsers.computer.writeClipboard(id, { ...params }) -> void
+- client.browsers.computer.batch(idOrName, { ...params }) -> void
+- client.browsers.computer.captureScreenshot(idOrName, { ...params }) -> Response
+- client.browsers.computer.clickMouse(idOrName, { ...params }) -> void
+- client.browsers.computer.dragMouse(idOrName, { ...params }) -> void
+- client.browsers.computer.getMousePosition(idOrName) -> ComputerGetMousePositionResponse
+- client.browsers.computer.moveMouse(idOrName, { ...params }) -> void
+- client.browsers.computer.pressKey(idOrName, { ...params }) -> void
+- client.browsers.computer.readClipboard(idOrName) -> ComputerReadClipboardResponse
+- client.browsers.computer.scroll(idOrName, { ...params }) -> void
+- client.browsers.computer.setCursorVisibility(idOrName, { ...params }) -> ComputerSetCursorVisibilityResponse
+- client.browsers.computer.typeText(idOrName, { ...params }) -> void
+- client.browsers.computer.writeClipboard(idOrName, { ...params }) -> void
## Playwright
@@ -293,7 +293,25 @@ Types:
Methods:
-- client.browsers.playwright.execute(id, { ...params }) -> PlaywrightExecuteResponse
+- client.browsers.playwright.execute(idOrName, { ...params }) -> PlaywrightExecuteResponse
+
+## Webmcp
+
+Types:
+
+- InvocationFailure
+- InvocationResult
+- InvokeRequest
+- Tool
+- ToolAnnotations
+- ToolFrame
+- ToolSource
+- ToolsResponse
+
+Methods:
+
+- client.browsers.webmcp.invokeTool(idOrName, { ...params }) -> InvocationResult
+- client.browsers.webmcp.listTools(idOrName) -> ToolsResponse
# Profiles
diff --git a/src/resources/browsers/browsers.ts b/src/resources/browsers/browsers.ts
index 0c9b537b..c1adfabc 100644
--- a/src/resources/browsers/browsers.ts
+++ b/src/resources/browsers/browsers.ts
@@ -109,6 +109,19 @@ import {
TelemetryStreamParams,
TelemetryStreamResponse,
} from './telemetry';
+import * as WebmcpAPI from './webmcp';
+import {
+ InvocationFailure,
+ InvocationResult,
+ InvokeRequest,
+ Tool,
+ ToolAnnotations,
+ ToolFrame,
+ ToolSource,
+ ToolsResponse,
+ Webmcp,
+ WebmcpInvokeToolParams,
+} from './webmcp';
import * as FsAPI from './fs/fs';
import {
FCreateDirectoryParams,
@@ -147,6 +160,7 @@ export class Browsers extends APIResource {
logs: LogsAPI.Logs = new LogsAPI.Logs(this._client);
computer: ComputerAPI.Computer = new ComputerAPI.Computer(this._client);
playwright: PlaywrightAPI.Playwright = new PlaywrightAPI.Playwright(this._client);
+ webmcp: WebmcpAPI.Webmcp = new WebmcpAPI.Webmcp(this._client);
/**
* Create a new browser session from within an action.
@@ -225,13 +239,14 @@ export class Browsers extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.curl('id', {
- * url: 'url',
- * });
+ * const response = await client.browsers.curl(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { url: 'url' },
+ * );
* ```
*/
- curl(id: string, body: BrowserCurlParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/curl`, { body, ...options });
+ curl(idOrName: string, body: BrowserCurlParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/curl`, { body, ...options });
}
/**
@@ -265,19 +280,26 @@ export class Browsers extends APIResource {
*
* @example
* ```ts
- * await client.browsers.loadExtensions('id', {
- * extensions: [
- * {
- * name: 'name',
- * zip_file: fs.createReadStream('path/to/file'),
- * },
- * ],
- * });
+ * await client.browsers.loadExtensions(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * {
+ * extensions: [
+ * {
+ * name: 'name',
+ * zip_file: fs.createReadStream('path/to/file'),
+ * },
+ * ],
+ * },
+ * );
* ```
*/
- loadExtensions(id: string, body: BrowserLoadExtensionsParams, options?: RequestOptions): APIPromise {
+ loadExtensions(
+ idOrName: string,
+ body: BrowserLoadExtensionsParams,
+ options?: RequestOptions,
+ ): APIPromise {
return this._client.post(
- path`/browsers/${id}/extensions`,
+ path`/browsers/${idOrName}/extensions`,
multipartFormRequestOptions(
{ body, ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]) },
this._client,
@@ -1621,6 +1643,7 @@ Browsers.Process = Process;
Browsers.Logs = Logs;
Browsers.Computer = Computer;
Browsers.Playwright = Playwright;
+Browsers.Webmcp = Webmcp;
export declare namespace Browsers {
export {
@@ -1775,4 +1798,17 @@ export declare namespace Browsers {
type PlaywrightExecuteResponse as PlaywrightExecuteResponse,
type PlaywrightExecuteParams as PlaywrightExecuteParams,
};
+
+ export {
+ Webmcp as Webmcp,
+ type InvocationFailure as InvocationFailure,
+ type InvocationResult as InvocationResult,
+ type InvokeRequest as InvokeRequest,
+ type Tool as Tool,
+ type ToolAnnotations as ToolAnnotations,
+ type ToolFrame as ToolFrame,
+ type ToolSource as ToolSource,
+ type ToolsResponse as ToolsResponse,
+ type WebmcpInvokeToolParams as WebmcpInvokeToolParams,
+ };
}
diff --git a/src/resources/browsers/computer.ts b/src/resources/browsers/computer.ts
index a8b8d443..a51d618d 100644
--- a/src/resources/browsers/computer.ts
+++ b/src/resources/browsers/computer.ts
@@ -17,13 +17,14 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.batch('id', {
- * actions: [{ type: 'click_mouse' }],
- * });
+ * await client.browsers.computer.batch(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { actions: [{ type: 'click_mouse' }] },
+ * );
* ```
*/
- batch(id: string, body: ComputerBatchParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/batch`, {
+ batch(idOrName: string, body: ComputerBatchParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/batch`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -36,18 +37,20 @@ export class Computer extends APIResource {
* @example
* ```ts
* const response =
- * await client.browsers.computer.captureScreenshot('id');
+ * await client.browsers.computer.captureScreenshot(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * );
*
* const content = await response.blob();
* console.log(content);
* ```
*/
captureScreenshot(
- id: string,
+ idOrName: string,
body: ComputerCaptureScreenshotParams | null | undefined = {},
options?: RequestOptions,
): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/screenshot`, {
+ return this._client.post(path`/browsers/${idOrName}/computer/screenshot`, {
body,
...options,
headers: buildHeaders([{ Accept: 'image/png' }, options?.headers]),
@@ -60,14 +63,14 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.clickMouse('id', {
- * x: 0,
- * y: 0,
- * });
+ * await client.browsers.computer.clickMouse(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { x: 0, y: 0 },
+ * );
* ```
*/
- clickMouse(id: string, body: ComputerClickMouseParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/click_mouse`, {
+ clickMouse(idOrName: string, body: ComputerClickMouseParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/click_mouse`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -79,16 +82,19 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.dragMouse('id', {
- * path: [
- * [0, 0],
- * [0, 0],
- * ],
- * });
+ * await client.browsers.computer.dragMouse(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * {
+ * path: [
+ * [0, 0],
+ * [0, 0],
+ * ],
+ * },
+ * );
* ```
*/
- dragMouse(id: string, body: ComputerDragMouseParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/drag_mouse`, {
+ dragMouse(idOrName: string, body: ComputerDragMouseParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/drag_mouse`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -101,11 +107,13 @@ export class Computer extends APIResource {
* @example
* ```ts
* const response =
- * await client.browsers.computer.getMousePosition('id');
+ * await client.browsers.computer.getMousePosition(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * );
* ```
*/
- getMousePosition(id: string, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/get_mouse_position`, options);
+ getMousePosition(idOrName: string, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/get_mouse_position`, options);
}
/**
@@ -113,14 +121,14 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.moveMouse('id', {
- * x: 0,
- * y: 0,
- * });
+ * await client.browsers.computer.moveMouse(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { x: 0, y: 0 },
+ * );
* ```
*/
- moveMouse(id: string, body: ComputerMoveMouseParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/move_mouse`, {
+ moveMouse(idOrName: string, body: ComputerMoveMouseParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/move_mouse`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -132,13 +140,14 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.pressKey('id', {
- * keys: ['string'],
- * });
+ * await client.browsers.computer.pressKey(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { keys: ['string'] },
+ * );
* ```
*/
- pressKey(id: string, body: ComputerPressKeyParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/press_key`, {
+ pressKey(idOrName: string, body: ComputerPressKeyParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/press_key`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -151,11 +160,13 @@ export class Computer extends APIResource {
* @example
* ```ts
* const response =
- * await client.browsers.computer.readClipboard('id');
+ * await client.browsers.computer.readClipboard(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * );
* ```
*/
- readClipboard(id: string, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/clipboard/read`, options);
+ readClipboard(idOrName: string, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/clipboard/read`, options);
}
/**
@@ -163,11 +174,14 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.scroll('id', { x: 0, y: 0 });
+ * await client.browsers.computer.scroll(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { x: 0, y: 0 },
+ * );
* ```
*/
- scroll(id: string, body: ComputerScrollParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/scroll`, {
+ scroll(idOrName: string, body: ComputerScrollParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/scroll`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -180,17 +194,18 @@ export class Computer extends APIResource {
* @example
* ```ts
* const response =
- * await client.browsers.computer.setCursorVisibility('id', {
- * hidden: true,
- * });
+ * await client.browsers.computer.setCursorVisibility(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { hidden: true },
+ * );
* ```
*/
setCursorVisibility(
- id: string,
+ idOrName: string,
body: ComputerSetCursorVisibilityParams,
options?: RequestOptions,
): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/cursor`, { body, ...options });
+ return this._client.post(path`/browsers/${idOrName}/computer/cursor`, { body, ...options });
}
/**
@@ -198,13 +213,14 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.typeText('id', {
- * text: 'text',
- * });
+ * await client.browsers.computer.typeText(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { text: 'text' },
+ * );
* ```
*/
- typeText(id: string, body: ComputerTypeTextParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/type`, {
+ typeText(idOrName: string, body: ComputerTypeTextParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/type`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -216,13 +232,18 @@ export class Computer extends APIResource {
*
* @example
* ```ts
- * await client.browsers.computer.writeClipboard('id', {
- * text: 'text',
- * });
+ * await client.browsers.computer.writeClipboard(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { text: 'text' },
+ * );
* ```
*/
- writeClipboard(id: string, body: ComputerWriteClipboardParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/computer/clipboard/write`, {
+ writeClipboard(
+ idOrName: string,
+ body: ComputerWriteClipboardParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/computer/clipboard/write`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
diff --git a/src/resources/browsers/fs/fs.ts b/src/resources/browsers/fs/fs.ts
index 4e03aa75..4d7a5fda 100644
--- a/src/resources/browsers/fs/fs.ts
+++ b/src/resources/browsers/fs/fs.ts
@@ -28,13 +28,18 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.createDirectory('id', {
- * path: '/J!',
- * });
+ * await client.browsers.fs.createDirectory(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { path: '/J!' },
+ * );
* ```
*/
- createDirectory(id: string, body: FCreateDirectoryParams, options?: RequestOptions): APIPromise {
- return this._client.put(path`/browsers/${id}/fs/create_directory`, {
+ createDirectory(
+ idOrName: string,
+ body: FCreateDirectoryParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.put(path`/browsers/${idOrName}/fs/create_directory`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -46,13 +51,18 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.deleteDirectory('id', {
- * path: '/J!',
- * });
+ * await client.browsers.fs.deleteDirectory(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { path: '/J!' },
+ * );
* ```
*/
- deleteDirectory(id: string, body: FDeleteDirectoryParams, options?: RequestOptions): APIPromise {
- return this._client.put(path`/browsers/${id}/fs/delete_directory`, {
+ deleteDirectory(
+ idOrName: string,
+ body: FDeleteDirectoryParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.put(path`/browsers/${idOrName}/fs/delete_directory`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -64,11 +74,14 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.deleteFile('id', { path: '/J!' });
+ * await client.browsers.fs.deleteFile(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { path: '/J!' },
+ * );
* ```
*/
- deleteFile(id: string, body: FDeleteFileParams, options?: RequestOptions): APIPromise {
- return this._client.put(path`/browsers/${id}/fs/delete_file`, {
+ deleteFile(idOrName: string, body: FDeleteFileParams, options?: RequestOptions): APIPromise {
+ return this._client.put(path`/browsers/${idOrName}/fs/delete_file`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -81,7 +94,7 @@ export class Fs extends APIResource {
* @example
* ```ts
* const response = await client.browsers.fs.downloadDirZip(
- * 'id',
+ * 'htzv5orfit78e1m2biiifpbv',
* { path: '/J!' },
* );
*
@@ -89,8 +102,12 @@ export class Fs extends APIResource {
* console.log(content);
* ```
*/
- downloadDirZip(id: string, query: FDownloadDirZipParams, options?: RequestOptions): APIPromise {
- return this._client.get(path`/browsers/${id}/fs/download_dir_zip`, {
+ downloadDirZip(
+ idOrName: string,
+ query: FDownloadDirZipParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.get(path`/browsers/${idOrName}/fs/download_dir_zip`, {
query,
...options,
headers: buildHeaders([{ Accept: 'application/zip' }, options?.headers]),
@@ -103,13 +120,18 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.fs.fileInfo('id', {
- * path: '/J!',
- * });
+ * const response = await client.browsers.fs.fileInfo(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { path: '/J!' },
+ * );
* ```
*/
- fileInfo(id: string, query: FFileInfoParams, options?: RequestOptions): APIPromise {
- return this._client.get(path`/browsers/${id}/fs/file_info`, { query, ...options });
+ fileInfo(
+ idOrName: string,
+ query: FFileInfoParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.get(path`/browsers/${idOrName}/fs/file_info`, { query, ...options });
}
/**
@@ -117,13 +139,18 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.fs.listFiles('id', {
- * path: '/J!',
- * });
+ * const response = await client.browsers.fs.listFiles(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { path: '/J!' },
+ * );
* ```
*/
- listFiles(id: string, query: FListFilesParams, options?: RequestOptions): APIPromise {
- return this._client.get(path`/browsers/${id}/fs/list_files`, { query, ...options });
+ listFiles(
+ idOrName: string,
+ query: FListFilesParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.get(path`/browsers/${idOrName}/fs/list_files`, { query, ...options });
}
/**
@@ -131,14 +158,14 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.move('id', {
+ * await client.browsers.fs.move('htzv5orfit78e1m2biiifpbv', {
* dest_path: '/J!',
* src_path: '/J!',
* });
* ```
*/
- move(id: string, body: FMoveParams, options?: RequestOptions): APIPromise {
- return this._client.put(path`/browsers/${id}/fs/move`, {
+ move(idOrName: string, body: FMoveParams, options?: RequestOptions): APIPromise {
+ return this._client.put(path`/browsers/${idOrName}/fs/move`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -150,16 +177,17 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.fs.readFile('id', {
- * path: '/J!',
- * });
+ * const response = await client.browsers.fs.readFile(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { path: '/J!' },
+ * );
*
* const content = await response.blob();
* console.log(content);
* ```
*/
- readFile(id: string, query: FReadFileParams, options?: RequestOptions): APIPromise {
- return this._client.get(path`/browsers/${id}/fs/read_file`, {
+ readFile(idOrName: string, query: FReadFileParams, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/browsers/${idOrName}/fs/read_file`, {
query,
...options,
headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),
@@ -172,18 +200,18 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.setFilePermissions('id', {
- * mode: '0611',
- * path: '/J!',
- * });
+ * await client.browsers.fs.setFilePermissions(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { mode: '0611', path: '/J!' },
+ * );
* ```
*/
setFilePermissions(
- id: string,
+ idOrName: string,
body: FSetFilePermissionsParams,
options?: RequestOptions,
): APIPromise {
- return this._client.put(path`/browsers/${id}/fs/set_file_permissions`, {
+ return this._client.put(path`/browsers/${idOrName}/fs/set_file_permissions`, {
body,
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
@@ -195,19 +223,22 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.upload('id', {
- * files: [
- * {
- * dest_path: '/J!',
- * file: fs.createReadStream('path/to/file'),
- * },
- * ],
- * });
+ * await client.browsers.fs.upload(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * {
+ * files: [
+ * {
+ * dest_path: '/J!',
+ * file: fs.createReadStream('path/to/file'),
+ * },
+ * ],
+ * },
+ * );
* ```
*/
- upload(id: string, body: FUploadParams, options?: RequestOptions): APIPromise {
+ upload(idOrName: string, body: FUploadParams, options?: RequestOptions): APIPromise {
return this._client.post(
- path`/browsers/${id}/fs/upload`,
+ path`/browsers/${idOrName}/fs/upload`,
multipartFormRequestOptions(
{ body, ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]) },
this._client,
@@ -220,15 +251,18 @@ export class Fs extends APIResource {
*
* @example
* ```ts
- * await client.browsers.fs.uploadZip('id', {
- * dest_path: '/J!',
- * zip_file: fs.createReadStream('path/to/file'),
- * });
+ * await client.browsers.fs.uploadZip(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * {
+ * dest_path: '/J!',
+ * zip_file: fs.createReadStream('path/to/file'),
+ * },
+ * );
* ```
*/
- uploadZip(id: string, body: FUploadZipParams, options?: RequestOptions): APIPromise {
+ uploadZip(idOrName: string, body: FUploadZipParams, options?: RequestOptions): APIPromise {
return this._client.post(
- path`/browsers/${id}/fs/upload_zip`,
+ path`/browsers/${idOrName}/fs/upload_zip`,
multipartFormRequestOptions(
{ body, ...options, headers: buildHeaders([{ Accept: '*/*' }, options?.headers]) },
this._client,
@@ -242,20 +276,20 @@ export class Fs extends APIResource {
* @example
* ```ts
* await client.browsers.fs.writeFile(
- * 'id',
+ * 'htzv5orfit78e1m2biiifpbv',
* fs.createReadStream('path/to/file'),
* { path: '/J!' },
* );
* ```
*/
writeFile(
- id: string,
+ idOrName: string,
contents: string | ArrayBuffer | ArrayBufferView | Blob | DataView,
params: FWriteFileParams,
options?: RequestOptions,
): APIPromise {
const { path: path_, mode } = params;
- return this._client.put(path`/browsers/${id}/fs/write_file`, {
+ return this._client.put(path`/browsers/${idOrName}/fs/write_file`, {
body: contents,
query: { path: path_, mode },
...options,
diff --git a/src/resources/browsers/fs/watch.ts b/src/resources/browsers/fs/watch.ts
index 41b5b439..f6b5e942 100644
--- a/src/resources/browsers/fs/watch.ts
+++ b/src/resources/browsers/fs/watch.ts
@@ -18,7 +18,7 @@ export class Watch extends APIResource {
* ```ts
* const response = await client.browsers.fs.watch.events(
* 'watch_id',
- * { id: 'id' },
+ * { id_or_name: 'htzv5orfit78e1m2biiifpbv' },
* );
* ```
*/
@@ -27,8 +27,8 @@ export class Watch extends APIResource {
params: WatchEventsParams,
options?: RequestOptions,
): APIPromise> {
- const { id } = params;
- return this._client.get(path`/browsers/${id}/fs/watch/${watchID}/events`, {
+ const { id_or_name } = params;
+ return this._client.get(path`/browsers/${id_or_name}/fs/watch/${watchID}/events`, {
...options,
headers: buildHeaders([{ Accept: 'text/event-stream' }, options?.headers]),
stream: true,
@@ -41,13 +41,13 @@ export class Watch extends APIResource {
* @example
* ```ts
* const response = await client.browsers.fs.watch.start(
- * 'id',
+ * 'htzv5orfit78e1m2biiifpbv',
* { path: 'path' },
* );
* ```
*/
- start(id: string, body: WatchStartParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/fs/watch`, { body, ...options });
+ start(idOrName: string, body: WatchStartParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/fs/watch`, { body, ...options });
}
/**
@@ -56,13 +56,13 @@ export class Watch extends APIResource {
* @example
* ```ts
* await client.browsers.fs.watch.stop('watch_id', {
- * id: 'id',
+ * id_or_name: 'htzv5orfit78e1m2biiifpbv',
* });
* ```
*/
stop(watchID: string, params: WatchStopParams, options?: RequestOptions): APIPromise {
- const { id } = params;
- return this._client.delete(path`/browsers/${id}/fs/watch/${watchID}`, {
+ const { id_or_name } = params;
+ return this._client.delete(path`/browsers/${id_or_name}/fs/watch/${watchID}`, {
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
});
@@ -103,9 +103,9 @@ export interface WatchStartResponse {
export interface WatchEventsParams {
/**
- * Browser session ID
+ * Browser session ID or name
*/
- id: string;
+ id_or_name: string;
}
export interface WatchStartParams {
@@ -122,9 +122,9 @@ export interface WatchStartParams {
export interface WatchStopParams {
/**
- * Browser session ID
+ * Browser session ID or name
*/
- id: string;
+ id_or_name: string;
}
export declare namespace Watch {
diff --git a/src/resources/browsers/index.ts b/src/resources/browsers/index.ts
index 2b225829..7742988a 100644
--- a/src/resources/browsers/index.ts
+++ b/src/resources/browsers/index.ts
@@ -143,3 +143,15 @@ export {
type TelemetryStreamParams,
type TelemetryEventsResponsesOffsetPagination,
} from './telemetry';
+export {
+ Webmcp,
+ type InvocationFailure,
+ type InvocationResult,
+ type InvokeRequest,
+ type Tool,
+ type ToolAnnotations,
+ type ToolFrame,
+ type ToolSource,
+ type ToolsResponse,
+ type WebmcpInvokeToolParams,
+} from './webmcp';
diff --git a/src/resources/browsers/logs.ts b/src/resources/browsers/logs.ts
index 13511b10..e8494fe0 100644
--- a/src/resources/browsers/logs.ts
+++ b/src/resources/browsers/logs.ts
@@ -17,13 +17,18 @@ export class Logs extends APIResource {
*
* @example
* ```ts
- * const logEvent = await client.browsers.logs.stream('id', {
- * source: 'path',
- * });
+ * const logEvent = await client.browsers.logs.stream(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { source: 'path' },
+ * );
* ```
*/
- stream(id: string, query: LogStreamParams, options?: RequestOptions): APIPromise> {
- return this._client.get(path`/browsers/${id}/logs/stream`, {
+ stream(
+ idOrName: string,
+ query: LogStreamParams,
+ options?: RequestOptions,
+ ): APIPromise> {
+ return this._client.get(path`/browsers/${idOrName}/logs/stream`, {
query,
...options,
headers: buildHeaders([{ Accept: 'text/event-stream' }, options?.headers]),
diff --git a/src/resources/browsers/playwright.ts b/src/resources/browsers/playwright.ts
index 022ccc7f..2ddd51d2 100644
--- a/src/resources/browsers/playwright.ts
+++ b/src/resources/browsers/playwright.ts
@@ -12,23 +12,26 @@ export class Playwright extends APIResource {
/**
* Execute arbitrary Playwright code in a fresh execution context against the
* browser. The code runs in the same VM as the browser, minimizing latency and
- * maximizing throughput. It has access to 'page', 'context', and 'browser'
- * variables. It can `return` a value, and this value is returned in the response.
+ * maximizing throughput. It has access to 'page', 'context', 'browser', and
+ * 'webmcp' variables. Use 'webmcp.listTools()' to discover browser-wide WebMCP
+ * tools and 'webmcp.invokeTool(toolRef, input?, { timeoutSec? })' to invoke an
+ * exact registration. It can `return` a value, and this value is returned in the
+ * response.
*
* @example
* ```ts
* const response = await client.browsers.playwright.execute(
- * 'id',
+ * 'htzv5orfit78e1m2biiifpbv',
* { code: 'code' },
* );
* ```
*/
execute(
- id: string,
+ idOrName: string,
body: PlaywrightExecuteParams,
options?: RequestOptions,
): APIPromise {
- return this._client.post(path`/browsers/${id}/playwright/execute`, { body, ...options });
+ return this._client.post(path`/browsers/${idOrName}/playwright/execute`, { body, ...options });
}
}
diff --git a/src/resources/browsers/process.ts b/src/resources/browsers/process.ts
index 40e04f0a..390d418e 100644
--- a/src/resources/browsers/process.ts
+++ b/src/resources/browsers/process.ts
@@ -16,13 +16,14 @@ export class Process extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.process.exec('id', {
- * command: 'command',
- * });
+ * const response = await client.browsers.process.exec(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { command: 'command' },
+ * );
* ```
*/
- exec(id: string, body: ProcessExecParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/process/exec`, { body, ...options });
+ exec(idOrName: string, body: ProcessExecParams, options?: RequestOptions): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/process/exec`, { body, ...options });
}
/**
@@ -32,7 +33,10 @@ export class Process extends APIResource {
* ```ts
* const response = await client.browsers.process.kill(
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
- * { id: 'id', signal: 'TERM' },
+ * {
+ * id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ * signal: 'TERM',
+ * },
* );
* ```
*/
@@ -41,8 +45,8 @@ export class Process extends APIResource {
params: ProcessKillParams,
options?: RequestOptions,
): APIPromise {
- const { id, ...body } = params;
- return this._client.post(path`/browsers/${id}/process/${processID}/kill`, { body, ...options });
+ const { id_or_name, ...body } = params;
+ return this._client.post(path`/browsers/${id_or_name}/process/${processID}/kill`, { body, ...options });
}
/**
@@ -53,7 +57,7 @@ export class Process extends APIResource {
* const response = await client.browsers.process.resize(
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
* {
- * id: 'id',
+ * id_or_name: 'htzv5orfit78e1m2biiifpbv',
* cols: 1,
* rows: 1,
* },
@@ -65,8 +69,8 @@ export class Process extends APIResource {
params: ProcessResizeParams,
options?: RequestOptions,
): APIPromise {
- const { id, ...body } = params;
- return this._client.post(path`/browsers/${id}/process/${processID}/resize`, { body, ...options });
+ const { id_or_name, ...body } = params;
+ return this._client.post(path`/browsers/${id_or_name}/process/${processID}/resize`, { body, ...options });
}
/**
@@ -74,13 +78,18 @@ export class Process extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.process.spawn('id', {
- * command: 'command',
- * });
+ * const response = await client.browsers.process.spawn(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * { command: 'command' },
+ * );
* ```
*/
- spawn(id: string, body: ProcessSpawnParams, options?: RequestOptions): APIPromise {
- return this._client.post(path`/browsers/${id}/process/spawn`, { body, ...options });
+ spawn(
+ idOrName: string,
+ body: ProcessSpawnParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/process/spawn`, { body, ...options });
}
/**
@@ -90,7 +99,7 @@ export class Process extends APIResource {
* ```ts
* const response = await client.browsers.process.status(
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
- * { id: 'id' },
+ * { id_or_name: 'htzv5orfit78e1m2biiifpbv' },
* );
* ```
*/
@@ -99,8 +108,8 @@ export class Process extends APIResource {
params: ProcessStatusParams,
options?: RequestOptions,
): APIPromise {
- const { id } = params;
- return this._client.get(path`/browsers/${id}/process/${processID}/status`, options);
+ const { id_or_name } = params;
+ return this._client.get(path`/browsers/${id_or_name}/process/${processID}/status`, options);
}
/**
@@ -110,7 +119,10 @@ export class Process extends APIResource {
* ```ts
* const response = await client.browsers.process.stdin(
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
- * { id: 'id', data_b64: 'data_b64' },
+ * {
+ * id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ * data_b64: 'data_b64',
+ * },
* );
* ```
*/
@@ -119,8 +131,8 @@ export class Process extends APIResource {
params: ProcessStdinParams,
options?: RequestOptions,
): APIPromise {
- const { id, ...body } = params;
- return this._client.post(path`/browsers/${id}/process/${processID}/stdin`, { body, ...options });
+ const { id_or_name, ...body } = params;
+ return this._client.post(path`/browsers/${id_or_name}/process/${processID}/stdin`, { body, ...options });
}
/**
@@ -130,7 +142,7 @@ export class Process extends APIResource {
* ```ts
* const response = await client.browsers.process.stdoutStream(
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
- * { id: 'id' },
+ * { id_or_name: 'htzv5orfit78e1m2biiifpbv' },
* );
* ```
*/
@@ -139,8 +151,8 @@ export class Process extends APIResource {
params: ProcessStdoutStreamParams,
options?: RequestOptions,
): APIPromise> {
- const { id } = params;
- return this._client.get(path`/browsers/${id}/process/${processID}/stdout/stream`, {
+ const { id_or_name } = params;
+ return this._client.get(path`/browsers/${id_or_name}/process/${processID}/stdout/stream`, {
...options,
headers: buildHeaders([{ Accept: 'text/event-stream' }, options?.headers]),
stream: true,
@@ -312,9 +324,9 @@ export interface ProcessExecParams {
export interface ProcessKillParams {
/**
- * Path param: Browser session ID
+ * Path param: Browser session ID or name
*/
- id: string;
+ id_or_name: string;
/**
* Body param: Signal to send.
@@ -324,9 +336,9 @@ export interface ProcessKillParams {
export interface ProcessResizeParams {
/**
- * Path param: Browser session ID
+ * Path param: Browser session ID or name
*/
- id: string;
+ id_or_name: string;
/**
* Body param: New terminal columns.
@@ -393,16 +405,16 @@ export interface ProcessSpawnParams {
export interface ProcessStatusParams {
/**
- * Browser session ID
+ * Browser session ID or name
*/
- id: string;
+ id_or_name: string;
}
export interface ProcessStdinParams {
/**
- * Path param: Browser session ID
+ * Path param: Browser session ID or name
*/
- id: string;
+ id_or_name: string;
/**
* Body param: Base64-encoded data to write.
@@ -412,9 +424,9 @@ export interface ProcessStdinParams {
export interface ProcessStdoutStreamParams {
/**
- * Browser session ID
+ * Browser session ID or name
*/
- id: string;
+ id_or_name: string;
}
export declare namespace Process {
diff --git a/src/resources/browsers/replays.ts b/src/resources/browsers/replays.ts
index 1954856f..5bb672c5 100644
--- a/src/resources/browsers/replays.ts
+++ b/src/resources/browsers/replays.ts
@@ -15,11 +15,13 @@ export class Replays extends APIResource {
*
* @example
* ```ts
- * const replays = await client.browsers.replays.list('id');
+ * const replays = await client.browsers.replays.list(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * );
* ```
*/
- list(id: string, options?: RequestOptions): APIPromise {
- return this._client.get(path`/browsers/${id}/replays`, options);
+ list(idOrName: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/browsers/${idOrName}/replays`, options);
}
/**
@@ -29,7 +31,7 @@ export class Replays extends APIResource {
* ```ts
* const response = await client.browsers.replays.download(
* 'replay_id',
- * { id: 'id' },
+ * { id_or_name: 'htzv5orfit78e1m2biiifpbv' },
* );
*
* const content = await response.blob();
@@ -37,8 +39,8 @@ export class Replays extends APIResource {
* ```
*/
download(replayID: string, params: ReplayDownloadParams, options?: RequestOptions): APIPromise {
- const { id } = params;
- return this._client.get(path`/browsers/${id}/replays/${replayID}`, {
+ const { id_or_name } = params;
+ return this._client.get(path`/browsers/${id_or_name}/replays/${replayID}`, {
...options,
headers: buildHeaders([{ Accept: 'video/mp4' }, options?.headers]),
__binaryResponse: true,
@@ -50,15 +52,17 @@ export class Replays extends APIResource {
*
* @example
* ```ts
- * const response = await client.browsers.replays.start('id');
+ * const response = await client.browsers.replays.start(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * );
* ```
*/
start(
- id: string,
+ idOrName: string,
body: ReplayStartParams | null | undefined = {},
options?: RequestOptions,
): APIPromise {
- return this._client.post(path`/browsers/${id}/replays`, { body, ...options });
+ return this._client.post(path`/browsers/${idOrName}/replays`, { body, ...options });
}
/**
@@ -67,13 +71,13 @@ export class Replays extends APIResource {
* @example
* ```ts
* await client.browsers.replays.stop('replay_id', {
- * id: 'id',
+ * id_or_name: 'htzv5orfit78e1m2biiifpbv',
* });
* ```
*/
stop(replayID: string, params: ReplayStopParams, options?: RequestOptions): APIPromise {
- const { id } = params;
- return this._client.post(path`/browsers/${id}/replays/${replayID}/stop`, {
+ const { id_or_name } = params;
+ return this._client.post(path`/browsers/${id_or_name}/replays/${replayID}/stop`, {
...options,
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
});
@@ -136,9 +140,9 @@ export interface ReplayStartResponse {
export interface ReplayDownloadParams {
/**
- * Browser session ID
+ * Browser session ID or name
*/
- id: string;
+ id_or_name: string;
}
export interface ReplayStartParams {
@@ -162,9 +166,9 @@ export interface ReplayStartParams {
export interface ReplayStopParams {
/**
- * Browser session ID
+ * Browser session ID or name
*/
- id: string;
+ id_or_name: string;
}
export declare namespace Replays {
diff --git a/src/resources/browsers/telemetry.ts b/src/resources/browsers/telemetry.ts
index c785e171..bd08cde1 100644
--- a/src/resources/browsers/telemetry.ts
+++ b/src/resources/browsers/telemetry.ts
@@ -23,19 +23,19 @@ export class Telemetry extends APIResource {
* ```ts
* // Automatically fetches more pages as needed.
* for await (const telemetryEventsResponse of client.browsers.telemetry.events(
- * 'id',
+ * 'htzv5orfit78e1m2biiifpbv',
* )) {
* // ...
* }
* ```
*/
events(
- id: string,
+ idOrName: string,
query: TelemetryEventsParams | null | undefined = {},
options?: RequestOptions,
): PagePromise {
return this._client.getAPIList(
- path`/browsers/${id}/telemetry/events`,
+ path`/browsers/${idOrName}/telemetry/events`,
OffsetPagination,
{ query, ...options },
);
@@ -55,17 +55,17 @@ export class Telemetry extends APIResource {
* @example
* ```ts
* const response = await client.browsers.telemetry.stream(
- * 'id',
+ * 'htzv5orfit78e1m2biiifpbv',
* );
* ```
*/
stream(
- id: string,
+ idOrName: string,
params: TelemetryStreamParams | undefined = {},
options?: RequestOptions,
): APIPromise> {
const { 'Last-Event-ID': lastEventID, ...query } = params ?? {};
- return this._client.get(path`/browsers/${id}/telemetry/stream`, {
+ return this._client.get(path`/browsers/${idOrName}/telemetry/stream`, {
query,
...options,
headers: buildHeaders([
diff --git a/src/resources/browsers/webmcp.ts b/src/resources/browsers/webmcp.ts
new file mode 100644
index 00000000..ff7e871a
--- /dev/null
+++ b/src/resources/browsers/webmcp.ts
@@ -0,0 +1,196 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../../core/resource';
+import { APIPromise } from '../../core/api-promise';
+import { RequestOptions } from '../../internal/request-options';
+import { path } from '../../internal/utils/path';
+
+/**
+ * Discover and invoke native page tools across the browser instance.
+ */
+export class Webmcp extends APIResource {
+ /**
+ * Invokes the exact live registration identified by tool_ref and waits
+ * synchronously for its result. Navigation during execution is allowed. If the tab
+ * or embedded frame disappears, or the request times out after invocation begins,
+ * the response reports outcome_unknown and the tool is not retried.
+ *
+ * @example
+ * ```ts
+ * const invocationResult =
+ * await client.browsers.webmcp.invokeTool(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * {
+ * input: { foo: 'bar' },
+ * tool_ref: 'x',
+ * },
+ * );
+ * ```
+ */
+ invokeTool(
+ idOrName: string,
+ body: WebmcpInvokeToolParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.post(path`/browsers/${idOrName}/webmcp/invoke`, { body, ...options });
+ }
+
+ /**
+ * Returns a snapshot of native WebMCP tools available across every open tab and
+ * embedded frame in the browser. Each tool includes an opaque tool_ref for
+ * invoking that exact live registration. Tools disappear when their document
+ * closes or navigates away.
+ *
+ * @example
+ * ```ts
+ * const toolsResponse =
+ * await client.browsers.webmcp.listTools(
+ * 'htzv5orfit78e1m2biiifpbv',
+ * );
+ * ```
+ */
+ listTools(idOrName: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/browsers/${idOrName}/webmcp/tools`, options);
+ }
+}
+
+export interface InvocationFailure {
+ code: 'outcome_unknown';
+
+ message: string;
+
+ invocation_id?: string;
+}
+
+export interface InvocationResult {
+ invocation_id: string;
+
+ status: 'completed' | 'canceled' | 'error';
+
+ error_text?: string;
+
+ /**
+ * Untrusted page-provided output. Callers must treat it as potentially malicious
+ * input.
+ */
+ output?: unknown;
+}
+
+export interface InvokeRequest {
+ /**
+ * Tool input, limited to 1 MiB after JSON serialization.
+ */
+ input: { [key: string]: unknown };
+
+ tool_ref: string;
+
+ timeout_sec?: number;
+}
+
+export interface Tool {
+ description: string;
+
+ input_schema: { [key: string]: unknown };
+
+ name: string;
+
+ source: ToolSource;
+
+ /**
+ * Opaque reference for invoking this exact live registration. It becomes invalid
+ * when its document or browser process is replaced.
+ */
+ tool_ref: string;
+
+ /**
+ * Page-provided behavioral hints. These values are untrusted and are not enforced
+ * by Kernel.
+ */
+ annotations?: ToolAnnotations;
+}
+
+/**
+ * Page-provided behavioral hints. These values are untrusted and are not enforced
+ * by Kernel.
+ */
+export interface ToolAnnotations {
+ autosubmit: boolean;
+
+ consequential: boolean;
+
+ read_only: boolean;
+
+ untrusted_content: boolean;
+}
+
+export interface ToolFrame {
+ /**
+ * Monotonically increasing identifier for this embedded frame during the current
+ * browser process.
+ */
+ frame_id: number;
+
+ /**
+ * Current frame URL with the fragment omitted.
+ */
+ url: string;
+}
+
+export interface ToolSource {
+ /**
+ * Embedded frame that registered the tool, or null when the top-level page
+ * registered it.
+ */
+ frame: ToolFrame | null;
+
+ /**
+ * Current title of the top-level page.
+ */
+ page_title: string;
+
+ /**
+ * Current URL of the top-level page with the fragment omitted.
+ */
+ page_url: string;
+
+ /**
+ * Monotonically increasing identifier for the tab during the current browser
+ * process.
+ */
+ tab_id: number;
+
+ /**
+ * Monotonically increasing identifier for the browser window during the current
+ * browser process.
+ */
+ window_id: number;
+}
+
+export interface ToolsResponse {
+ tools: Array;
+}
+
+export interface WebmcpInvokeToolParams {
+ /**
+ * Tool input, limited to 1 MiB after JSON serialization.
+ */
+ input: { [key: string]: unknown };
+
+ tool_ref: string;
+
+ timeout_sec?: number;
+}
+
+export declare namespace Webmcp {
+ export {
+ type InvocationFailure as InvocationFailure,
+ type InvocationResult as InvocationResult,
+ type InvokeRequest as InvokeRequest,
+ type Tool as Tool,
+ type ToolAnnotations as ToolAnnotations,
+ type ToolFrame as ToolFrame,
+ type ToolSource as ToolSource,
+ type ToolsResponse as ToolsResponse,
+ type WebmcpInvokeToolParams as WebmcpInvokeToolParams,
+ };
+}
diff --git a/src/resources/telemetry/destinations.ts b/src/resources/telemetry/destinations.ts
index d3846d93..0c5b8ada 100644
--- a/src/resources/telemetry/destinations.ts
+++ b/src/resources/telemetry/destinations.ts
@@ -12,15 +12,19 @@ import { path } from '../../internal/utils/path';
*/
export class Destinations extends APIResource {
/**
- * Create an OTLP export destination in the resolved project. Names must be unique
- * within the project.
+ * Create an OTLP export destination in the authenticated organization. Names must
+ * be unique within the organization. Requires an organization-scoped credential or
+ * dashboard authentication; project-scoped credentials receive a 403.
*/
create(body: DestinationCreateParams, options?: RequestOptions): APIPromise {
return this._client.post('/telemetry/destinations', { body, ...options });
}
/**
- * Retrieve a single OTLP destination in the resolved project by its ID or name.
+ * Retrieve a customer-visible OTLP destination in the authenticated organization
+ * by its ID or name. Project-scoped credentials can retrieve these destinations
+ * for selection by workloads in their project. Non-dashboard reads return header
+ * values redacted.
*/
retrieve(idOrName: string, options?: RequestOptions): APIPromise {
return this._client.get(path`/telemetry/destinations/${idOrName}`, options);
@@ -31,10 +35,11 @@ export class Destinations extends APIResource {
* values without restarting, which makes this the way to rotate credentials
* without interrupting export.
*
- * Names must be unique within the project. Renaming is refused with a 409 while a
- * managed auth connection selects this destination by name, since that connection
- * resolves the name on every login. Every other field, including `headers`, stays
- * editable.
+ * Names must be unique within the organization. Renaming is refused with a 409
+ * while a managed auth connection selects this destination by name, since that
+ * connection resolves the name on every login. Every other field, including
+ * `headers`, stays editable. Requires an organization-scoped credential or
+ * dashboard authentication; project-scoped credentials receive a 403.
*/
update(
idOrName: string,
@@ -45,7 +50,10 @@ export class Destinations extends APIResource {
}
/**
- * List OTLP export destinations in the resolved project.
+ * List customer-visible OTLP export destinations in the authenticated
+ * organization. Project-scoped credentials can list these destinations for
+ * selection by workloads in their project. Non-dashboard reads return header
+ * values redacted.
*/
list(
query: DestinationListParams | null | undefined = {},
@@ -63,6 +71,8 @@ export class Destinations extends APIResource {
* end or delete them first. It is refused the same way while a managed auth
* connection still selects it, because that connection re-resolves the destination
* on every login, and while a managed auth login using it is still in progress.
+ * Requires an organization-scoped credential or dashboard authentication;
+ * project-scoped credentials receive a 403.
*/
delete(idOrName: string, options?: RequestOptions): APIPromise {
return this._client.delete(path`/telemetry/destinations/${idOrName}`, {
@@ -91,13 +101,14 @@ export interface OtlpDestination {
/**
* Headers sent with each export request. Names are returned in canonical form
- * (`Authorization`, not `authorization`). Values are returned redacted as empty
- * strings, so the keys are visible but the credentials are not.
+ * (`Authorization`, not `authorization`). Non-dashboard reads return values
+ * redacted as empty strings, so the keys are visible but the credentials are not.
+ * Dashboard reads return the stored values.
*/
headers: { [key: string]: string };
/**
- * Unique within the project. Usable in place of the ID when selecting a
+ * Unique within the organization. Usable in place of the ID when selecting a
* destination, so it cannot be shaped like an ID.
*/
name: string;
@@ -124,7 +135,7 @@ export interface DestinationCreateParams {
endpoint: string;
/**
- * Unique within the project.
+ * Unique within the organization.
*/
name: string;
diff --git a/tests/api-resources/browsers/browsers.test.ts b/tests/api-resources/browsers/browsers.test.ts
index b9dfeb5f..4c60d15e 100644
--- a/tests/api-resources/browsers/browsers.test.ts
+++ b/tests/api-resources/browsers/browsers.test.ts
@@ -155,7 +155,7 @@ describe('resource browsers', () => {
// Mock server tests are disabled
test.skip('curl: only required params', async () => {
- const responsePromise = client.browsers.curl('id', { url: 'url' });
+ const responsePromise = client.browsers.curl('htzv5orfit78e1m2biiifpbv', { url: 'url' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -167,7 +167,7 @@ describe('resource browsers', () => {
// Mock server tests are disabled
test.skip('curl: required and optional params', async () => {
- const response = await client.browsers.curl('id', {
+ const response = await client.browsers.curl('htzv5orfit78e1m2biiifpbv', {
url: 'url',
body: 'body',
headers: { foo: 'string' },
@@ -191,7 +191,7 @@ describe('resource browsers', () => {
// Mock server tests are disabled
test.skip('loadExtensions: only required params', async () => {
- const responsePromise = client.browsers.loadExtensions('id', {
+ const responsePromise = client.browsers.loadExtensions('htzv5orfit78e1m2biiifpbv', {
extensions: [{ name: 'name', zip_file: await toFile(Buffer.from('Example data'), 'README.md') }],
});
const rawResponse = await responsePromise.asResponse();
@@ -205,7 +205,7 @@ describe('resource browsers', () => {
// Mock server tests are disabled
test.skip('loadExtensions: required and optional params', async () => {
- const response = await client.browsers.loadExtensions('id', {
+ const response = await client.browsers.loadExtensions('htzv5orfit78e1m2biiifpbv', {
extensions: [{ name: 'name', zip_file: await toFile(Buffer.from('Example data'), 'README.md') }],
});
});
diff --git a/tests/api-resources/browsers/computer.test.ts b/tests/api-resources/browsers/computer.test.ts
index 807834d7..9d552355 100644
--- a/tests/api-resources/browsers/computer.test.ts
+++ b/tests/api-resources/browsers/computer.test.ts
@@ -10,7 +10,9 @@ const client = new Kernel({
describe('resource computer', () => {
// Mock server tests are disabled
test.skip('batch: only required params', async () => {
- const responsePromise = client.browsers.computer.batch('id', { actions: [{ type: 'click_mouse' }] });
+ const responsePromise = client.browsers.computer.batch('htzv5orfit78e1m2biiifpbv', {
+ actions: [{ type: 'click_mouse' }],
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,7 +24,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('batch: required and optional params', async () => {
- const response = await client.browsers.computer.batch('id', {
+ const response = await client.browsers.computer.batch('htzv5orfit78e1m2biiifpbv', {
actions: [
{
type: 'click_mouse',
@@ -79,7 +81,7 @@ describe('resource computer', () => {
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
await expect(
client.browsers.computer.captureScreenshot(
- 'id',
+ 'htzv5orfit78e1m2biiifpbv',
{
region: {
height: 0,
@@ -95,7 +97,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('clickMouse: only required params', async () => {
- const responsePromise = client.browsers.computer.clickMouse('id', { x: 0, y: 0 });
+ const responsePromise = client.browsers.computer.clickMouse('htzv5orfit78e1m2biiifpbv', { x: 0, y: 0 });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -107,7 +109,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('clickMouse: required and optional params', async () => {
- const response = await client.browsers.computer.clickMouse('id', {
+ const response = await client.browsers.computer.clickMouse('htzv5orfit78e1m2biiifpbv', {
x: 0,
y: 0,
button: 'left',
@@ -119,7 +121,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('dragMouse: only required params', async () => {
- const responsePromise = client.browsers.computer.dragMouse('id', {
+ const responsePromise = client.browsers.computer.dragMouse('htzv5orfit78e1m2biiifpbv', {
path: [
[0, 0],
[0, 0],
@@ -136,7 +138,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('dragMouse: required and optional params', async () => {
- const response = await client.browsers.computer.dragMouse('id', {
+ const response = await client.browsers.computer.dragMouse('htzv5orfit78e1m2biiifpbv', {
path: [
[0, 0],
[0, 0],
@@ -153,7 +155,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('getMousePosition', async () => {
- const responsePromise = client.browsers.computer.getMousePosition('id');
+ const responsePromise = client.browsers.computer.getMousePosition('htzv5orfit78e1m2biiifpbv');
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -165,7 +167,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('moveMouse: only required params', async () => {
- const responsePromise = client.browsers.computer.moveMouse('id', { x: 0, y: 0 });
+ const responsePromise = client.browsers.computer.moveMouse('htzv5orfit78e1m2biiifpbv', { x: 0, y: 0 });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -177,7 +179,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('moveMouse: required and optional params', async () => {
- const response = await client.browsers.computer.moveMouse('id', {
+ const response = await client.browsers.computer.moveMouse('htzv5orfit78e1m2biiifpbv', {
x: 0,
y: 0,
duration_ms: 50,
@@ -188,7 +190,9 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('pressKey: only required params', async () => {
- const responsePromise = client.browsers.computer.pressKey('id', { keys: ['string'] });
+ const responsePromise = client.browsers.computer.pressKey('htzv5orfit78e1m2biiifpbv', {
+ keys: ['string'],
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -200,7 +204,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('pressKey: required and optional params', async () => {
- const response = await client.browsers.computer.pressKey('id', {
+ const response = await client.browsers.computer.pressKey('htzv5orfit78e1m2biiifpbv', {
keys: ['string'],
duration: 0,
hold_keys: ['string'],
@@ -209,7 +213,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('readClipboard', async () => {
- const responsePromise = client.browsers.computer.readClipboard('id');
+ const responsePromise = client.browsers.computer.readClipboard('htzv5orfit78e1m2biiifpbv');
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -221,7 +225,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('scroll: only required params', async () => {
- const responsePromise = client.browsers.computer.scroll('id', { x: 0, y: 0 });
+ const responsePromise = client.browsers.computer.scroll('htzv5orfit78e1m2biiifpbv', { x: 0, y: 0 });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -233,7 +237,7 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('scroll: required and optional params', async () => {
- const response = await client.browsers.computer.scroll('id', {
+ const response = await client.browsers.computer.scroll('htzv5orfit78e1m2biiifpbv', {
x: 0,
y: 0,
delta_x: 0,
@@ -244,7 +248,9 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('setCursorVisibility: only required params', async () => {
- const responsePromise = client.browsers.computer.setCursorVisibility('id', { hidden: true });
+ const responsePromise = client.browsers.computer.setCursorVisibility('htzv5orfit78e1m2biiifpbv', {
+ hidden: true,
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -256,12 +262,14 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('setCursorVisibility: required and optional params', async () => {
- const response = await client.browsers.computer.setCursorVisibility('id', { hidden: true });
+ const response = await client.browsers.computer.setCursorVisibility('htzv5orfit78e1m2biiifpbv', {
+ hidden: true,
+ });
});
// Mock server tests are disabled
test.skip('typeText: only required params', async () => {
- const responsePromise = client.browsers.computer.typeText('id', { text: 'text' });
+ const responsePromise = client.browsers.computer.typeText('htzv5orfit78e1m2biiifpbv', { text: 'text' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -273,12 +281,17 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('typeText: required and optional params', async () => {
- const response = await client.browsers.computer.typeText('id', { text: 'text', delay: 0 });
+ const response = await client.browsers.computer.typeText('htzv5orfit78e1m2biiifpbv', {
+ text: 'text',
+ delay: 0,
+ });
});
// Mock server tests are disabled
test.skip('writeClipboard: only required params', async () => {
- const responsePromise = client.browsers.computer.writeClipboard('id', { text: 'text' });
+ const responsePromise = client.browsers.computer.writeClipboard('htzv5orfit78e1m2biiifpbv', {
+ text: 'text',
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -290,6 +303,8 @@ describe('resource computer', () => {
// Mock server tests are disabled
test.skip('writeClipboard: required and optional params', async () => {
- const response = await client.browsers.computer.writeClipboard('id', { text: 'text' });
+ const response = await client.browsers.computer.writeClipboard('htzv5orfit78e1m2biiifpbv', {
+ text: 'text',
+ });
});
});
diff --git a/tests/api-resources/browsers/fs/fs.test.ts b/tests/api-resources/browsers/fs/fs.test.ts
index 6dcd3dba..54e3023e 100644
--- a/tests/api-resources/browsers/fs/fs.test.ts
+++ b/tests/api-resources/browsers/fs/fs.test.ts
@@ -10,7 +10,7 @@ const client = new Kernel({
describe('resource fs', () => {
// Mock server tests are disabled
test.skip('createDirectory: only required params', async () => {
- const responsePromise = client.browsers.fs.createDirectory('id', { path: '/J!' });
+ const responsePromise = client.browsers.fs.createDirectory('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,12 +22,15 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('createDirectory: required and optional params', async () => {
- const response = await client.browsers.fs.createDirectory('id', { path: '/J!', mode: '0611' });
+ const response = await client.browsers.fs.createDirectory('htzv5orfit78e1m2biiifpbv', {
+ path: '/J!',
+ mode: '0611',
+ });
});
// Mock server tests are disabled
test.skip('deleteDirectory: only required params', async () => {
- const responsePromise = client.browsers.fs.deleteDirectory('id', { path: '/J!' });
+ const responsePromise = client.browsers.fs.deleteDirectory('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -39,12 +42,12 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('deleteDirectory: required and optional params', async () => {
- const response = await client.browsers.fs.deleteDirectory('id', { path: '/J!' });
+ const response = await client.browsers.fs.deleteDirectory('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
});
// Mock server tests are disabled
test.skip('deleteFile: only required params', async () => {
- const responsePromise = client.browsers.fs.deleteFile('id', { path: '/J!' });
+ const responsePromise = client.browsers.fs.deleteFile('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -56,17 +59,17 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('deleteFile: required and optional params', async () => {
- const response = await client.browsers.fs.deleteFile('id', { path: '/J!' });
+ const response = await client.browsers.fs.deleteFile('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
});
// Mock server tests are disabled
test.skip('downloadDirZip: required and optional params', async () => {
- const response = await client.browsers.fs.downloadDirZip('id', { path: '/J!' });
+ const response = await client.browsers.fs.downloadDirZip('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
});
// Mock server tests are disabled
test.skip('fileInfo: only required params', async () => {
- const responsePromise = client.browsers.fs.fileInfo('id', { path: '/J!' });
+ const responsePromise = client.browsers.fs.fileInfo('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -78,12 +81,12 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('fileInfo: required and optional params', async () => {
- const response = await client.browsers.fs.fileInfo('id', { path: '/J!' });
+ const response = await client.browsers.fs.fileInfo('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
});
// Mock server tests are disabled
test.skip('listFiles: only required params', async () => {
- const responsePromise = client.browsers.fs.listFiles('id', { path: '/J!' });
+ const responsePromise = client.browsers.fs.listFiles('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -95,12 +98,15 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('listFiles: required and optional params', async () => {
- const response = await client.browsers.fs.listFiles('id', { path: '/J!' });
+ const response = await client.browsers.fs.listFiles('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
});
// Mock server tests are disabled
test.skip('move: only required params', async () => {
- const responsePromise = client.browsers.fs.move('id', { dest_path: '/J!', src_path: '/J!' });
+ const responsePromise = client.browsers.fs.move('htzv5orfit78e1m2biiifpbv', {
+ dest_path: '/J!',
+ src_path: '/J!',
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -112,17 +118,23 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('move: required and optional params', async () => {
- const response = await client.browsers.fs.move('id', { dest_path: '/J!', src_path: '/J!' });
+ const response = await client.browsers.fs.move('htzv5orfit78e1m2biiifpbv', {
+ dest_path: '/J!',
+ src_path: '/J!',
+ });
});
// Mock server tests are disabled
test.skip('readFile: required and optional params', async () => {
- const response = await client.browsers.fs.readFile('id', { path: '/J!' });
+ const response = await client.browsers.fs.readFile('htzv5orfit78e1m2biiifpbv', { path: '/J!' });
});
// Mock server tests are disabled
test.skip('setFilePermissions: only required params', async () => {
- const responsePromise = client.browsers.fs.setFilePermissions('id', { mode: '0611', path: '/J!' });
+ const responsePromise = client.browsers.fs.setFilePermissions('htzv5orfit78e1m2biiifpbv', {
+ mode: '0611',
+ path: '/J!',
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -134,7 +146,7 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('setFilePermissions: required and optional params', async () => {
- const response = await client.browsers.fs.setFilePermissions('id', {
+ const response = await client.browsers.fs.setFilePermissions('htzv5orfit78e1m2biiifpbv', {
mode: '0611',
path: '/J!',
group: 'group',
@@ -144,7 +156,7 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('upload: only required params', async () => {
- const responsePromise = client.browsers.fs.upload('id', {
+ const responsePromise = client.browsers.fs.upload('htzv5orfit78e1m2biiifpbv', {
files: [{ dest_path: '/J!', file: await toFile(Buffer.from('Example data'), 'README.md') }],
});
const rawResponse = await responsePromise.asResponse();
@@ -158,14 +170,14 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('upload: required and optional params', async () => {
- const response = await client.browsers.fs.upload('id', {
+ const response = await client.browsers.fs.upload('htzv5orfit78e1m2biiifpbv', {
files: [{ dest_path: '/J!', file: await toFile(Buffer.from('Example data'), 'README.md') }],
});
});
// Mock server tests are disabled
test.skip('uploadZip: only required params', async () => {
- const responsePromise = client.browsers.fs.uploadZip('id', {
+ const responsePromise = client.browsers.fs.uploadZip('htzv5orfit78e1m2biiifpbv', {
dest_path: '/J!',
zip_file: await toFile(Buffer.from('Example data'), 'README.md'),
});
@@ -180,7 +192,7 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('uploadZip: required and optional params', async () => {
- const response = await client.browsers.fs.uploadZip('id', {
+ const response = await client.browsers.fs.uploadZip('htzv5orfit78e1m2biiifpbv', {
dest_path: '/J!',
zip_file: await toFile(Buffer.from('Example data'), 'README.md'),
});
@@ -189,7 +201,7 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('writeFile: only required params', async () => {
const responsePromise = client.browsers.fs.writeFile(
- 'id',
+ 'htzv5orfit78e1m2biiifpbv',
await toFile(Buffer.from('Example data'), 'README.md'),
{ path: '/J!' },
);
@@ -205,7 +217,7 @@ describe('resource fs', () => {
// Mock server tests are disabled
test.skip('writeFile: required and optional params', async () => {
const response = await client.browsers.fs.writeFile(
- 'id',
+ 'htzv5orfit78e1m2biiifpbv',
await toFile(Buffer.from('Example data'), 'README.md'),
{ path: '/J!', mode: '0611' },
);
diff --git a/tests/api-resources/browsers/fs/watch.test.ts b/tests/api-resources/browsers/fs/watch.test.ts
index 5d98d0f9..26bde3f3 100644
--- a/tests/api-resources/browsers/fs/watch.test.ts
+++ b/tests/api-resources/browsers/fs/watch.test.ts
@@ -10,7 +10,9 @@ const client = new Kernel({
describe('resource watch', () => {
// Mock server tests are disabled
test.skip('events: only required params', async () => {
- const responsePromise = client.browsers.fs.watch.events('watch_id', { id: 'id' });
+ const responsePromise = client.browsers.fs.watch.events('watch_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,12 +24,14 @@ describe('resource watch', () => {
// Mock server tests are disabled
test.skip('events: required and optional params', async () => {
- const response = await client.browsers.fs.watch.events('watch_id', { id: 'id' });
+ const response = await client.browsers.fs.watch.events('watch_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
});
// Mock server tests are disabled
test.skip('start: only required params', async () => {
- const responsePromise = client.browsers.fs.watch.start('id', { path: 'path' });
+ const responsePromise = client.browsers.fs.watch.start('htzv5orfit78e1m2biiifpbv', { path: 'path' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -39,12 +43,17 @@ describe('resource watch', () => {
// Mock server tests are disabled
test.skip('start: required and optional params', async () => {
- const response = await client.browsers.fs.watch.start('id', { path: 'path', recursive: true });
+ const response = await client.browsers.fs.watch.start('htzv5orfit78e1m2biiifpbv', {
+ path: 'path',
+ recursive: true,
+ });
});
// Mock server tests are disabled
test.skip('stop: only required params', async () => {
- const responsePromise = client.browsers.fs.watch.stop('watch_id', { id: 'id' });
+ const responsePromise = client.browsers.fs.watch.stop('watch_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -56,6 +65,8 @@ describe('resource watch', () => {
// Mock server tests are disabled
test.skip('stop: required and optional params', async () => {
- const response = await client.browsers.fs.watch.stop('watch_id', { id: 'id' });
+ const response = await client.browsers.fs.watch.stop('watch_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
});
});
diff --git a/tests/api-resources/browsers/logs.test.ts b/tests/api-resources/browsers/logs.test.ts
index 893d9aa7..32a26535 100644
--- a/tests/api-resources/browsers/logs.test.ts
+++ b/tests/api-resources/browsers/logs.test.ts
@@ -10,7 +10,7 @@ const client = new Kernel({
describe('resource logs', () => {
// Mock server tests are disabled
test.skip('stream: only required params', async () => {
- const responsePromise = client.browsers.logs.stream('id', { source: 'path' });
+ const responsePromise = client.browsers.logs.stream('htzv5orfit78e1m2biiifpbv', { source: 'path' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,7 +22,7 @@ describe('resource logs', () => {
// Mock server tests are disabled
test.skip('stream: required and optional params', async () => {
- const response = await client.browsers.logs.stream('id', {
+ const response = await client.browsers.logs.stream('htzv5orfit78e1m2biiifpbv', {
source: 'path',
follow: true,
path: 'path',
diff --git a/tests/api-resources/browsers/playwright.test.ts b/tests/api-resources/browsers/playwright.test.ts
index 8b16eec9..a3cea970 100644
--- a/tests/api-resources/browsers/playwright.test.ts
+++ b/tests/api-resources/browsers/playwright.test.ts
@@ -10,7 +10,7 @@ const client = new Kernel({
describe('resource playwright', () => {
// Mock server tests are disabled
test.skip('execute: only required params', async () => {
- const responsePromise = client.browsers.playwright.execute('id', { code: 'code' });
+ const responsePromise = client.browsers.playwright.execute('htzv5orfit78e1m2biiifpbv', { code: 'code' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,6 +22,9 @@ describe('resource playwright', () => {
// Mock server tests are disabled
test.skip('execute: required and optional params', async () => {
- const response = await client.browsers.playwright.execute('id', { code: 'code', timeout_sec: 1 });
+ const response = await client.browsers.playwright.execute('htzv5orfit78e1m2biiifpbv', {
+ code: 'code',
+ timeout_sec: 1,
+ });
});
});
diff --git a/tests/api-resources/browsers/process.test.ts b/tests/api-resources/browsers/process.test.ts
index fda1a924..13e48bf5 100644
--- a/tests/api-resources/browsers/process.test.ts
+++ b/tests/api-resources/browsers/process.test.ts
@@ -10,7 +10,7 @@ const client = new Kernel({
describe('resource process', () => {
// Mock server tests are disabled
test.skip('exec: only required params', async () => {
- const responsePromise = client.browsers.process.exec('id', { command: 'command' });
+ const responsePromise = client.browsers.process.exec('htzv5orfit78e1m2biiifpbv', { command: 'command' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,7 +22,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('exec: required and optional params', async () => {
- const response = await client.browsers.process.exec('id', {
+ const response = await client.browsers.process.exec('htzv5orfit78e1m2biiifpbv', {
command: 'command',
args: ['string'],
as_root: true,
@@ -36,7 +36,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('kill: only required params', async () => {
const responsePromise = client.browsers.process.kill('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
signal: 'TERM',
});
const rawResponse = await responsePromise.asResponse();
@@ -51,7 +51,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('kill: required and optional params', async () => {
const response = await client.browsers.process.kill('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
signal: 'TERM',
});
});
@@ -59,7 +59,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('resize: only required params', async () => {
const responsePromise = client.browsers.process.resize('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
cols: 1,
rows: 1,
});
@@ -75,7 +75,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('resize: required and optional params', async () => {
const response = await client.browsers.process.resize('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
cols: 1,
rows: 1,
});
@@ -83,7 +83,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('spawn: only required params', async () => {
- const responsePromise = client.browsers.process.spawn('id', { command: 'command' });
+ const responsePromise = client.browsers.process.spawn('htzv5orfit78e1m2biiifpbv', { command: 'command' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -95,7 +95,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('spawn: required and optional params', async () => {
- const response = await client.browsers.process.spawn('id', {
+ const response = await client.browsers.process.spawn('htzv5orfit78e1m2biiifpbv', {
command: 'command',
allocate_tty: true,
args: ['string'],
@@ -112,7 +112,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('status: only required params', async () => {
const responsePromise = client.browsers.process.status('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
@@ -126,14 +126,14 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('status: required and optional params', async () => {
const response = await client.browsers.process.status('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
});
});
// Mock server tests are disabled
test.skip('stdin: only required params', async () => {
const responsePromise = client.browsers.process.stdin('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
data_b64: 'data_b64',
});
const rawResponse = await responsePromise.asResponse();
@@ -148,7 +148,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('stdin: required and optional params', async () => {
const response = await client.browsers.process.stdin('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
data_b64: 'data_b64',
});
});
@@ -156,7 +156,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('stdoutStream: only required params', async () => {
const responsePromise = client.browsers.process.stdoutStream('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
});
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
@@ -170,7 +170,7 @@ describe('resource process', () => {
// Mock server tests are disabled
test.skip('stdoutStream: required and optional params', async () => {
const response = await client.browsers.process.stdoutStream('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', {
- id: 'id',
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
});
});
});
diff --git a/tests/api-resources/browsers/replays.test.ts b/tests/api-resources/browsers/replays.test.ts
index 672a7789..60e7ed96 100644
--- a/tests/api-resources/browsers/replays.test.ts
+++ b/tests/api-resources/browsers/replays.test.ts
@@ -10,7 +10,7 @@ const client = new Kernel({
describe('resource replays', () => {
// Mock server tests are disabled
test.skip('list', async () => {
- const responsePromise = client.browsers.replays.list('id');
+ const responsePromise = client.browsers.replays.list('htzv5orfit78e1m2biiifpbv');
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -22,12 +22,14 @@ describe('resource replays', () => {
// Mock server tests are disabled
test.skip('download: required and optional params', async () => {
- const response = await client.browsers.replays.download('replay_id', { id: 'id' });
+ const response = await client.browsers.replays.download('replay_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
});
// Mock server tests are disabled
test.skip('start', async () => {
- const responsePromise = client.browsers.replays.start('id');
+ const responsePromise = client.browsers.replays.start('htzv5orfit78e1m2biiifpbv');
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -42,7 +44,7 @@ describe('resource replays', () => {
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
await expect(
client.browsers.replays.start(
- 'id',
+ 'htzv5orfit78e1m2biiifpbv',
{
framerate: 1,
max_duration_in_seconds: 1,
@@ -55,7 +57,9 @@ describe('resource replays', () => {
// Mock server tests are disabled
test.skip('stop: only required params', async () => {
- const responsePromise = client.browsers.replays.stop('replay_id', { id: 'id' });
+ const responsePromise = client.browsers.replays.stop('replay_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -67,6 +71,8 @@ describe('resource replays', () => {
// Mock server tests are disabled
test.skip('stop: required and optional params', async () => {
- const response = await client.browsers.replays.stop('replay_id', { id: 'id' });
+ const response = await client.browsers.replays.stop('replay_id', {
+ id_or_name: 'htzv5orfit78e1m2biiifpbv',
+ });
});
});
diff --git a/tests/api-resources/browsers/telemetry.test.ts b/tests/api-resources/browsers/telemetry.test.ts
index d096d2c5..797d2539 100644
--- a/tests/api-resources/browsers/telemetry.test.ts
+++ b/tests/api-resources/browsers/telemetry.test.ts
@@ -10,7 +10,7 @@ const client = new Kernel({
describe('resource telemetry', () => {
// Mock server tests are disabled
test.skip('events', async () => {
- const responsePromise = client.browsers.telemetry.events('id');
+ const responsePromise = client.browsers.telemetry.events('htzv5orfit78e1m2biiifpbv');
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -25,7 +25,7 @@ describe('resource telemetry', () => {
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
await expect(
client.browsers.telemetry.events(
- 'id',
+ 'htzv5orfit78e1m2biiifpbv',
{
category: ['console'],
limit: 1,
@@ -41,7 +41,7 @@ describe('resource telemetry', () => {
// Mock server tests are disabled
test.skip('stream', async () => {
- const responsePromise = client.browsers.telemetry.stream('id');
+ const responsePromise = client.browsers.telemetry.stream('htzv5orfit78e1m2biiifpbv');
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
@@ -56,7 +56,7 @@ describe('resource telemetry', () => {
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
await expect(
client.browsers.telemetry.stream(
- 'id',
+ 'htzv5orfit78e1m2biiifpbv',
{ replay: 'replay', 'Last-Event-ID': 'Last-Event-ID' },
{ path: '/_stainless_unknown_path' },
),
diff --git a/tests/api-resources/browsers/webmcp.test.ts b/tests/api-resources/browsers/webmcp.test.ts
new file mode 100644
index 00000000..7bfb8db4
--- /dev/null
+++ b/tests/api-resources/browsers/webmcp.test.ts
@@ -0,0 +1,46 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Kernel from '@onkernel/sdk';
+
+const client = new Kernel({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource webmcp', () => {
+ // Mock server tests are disabled
+ test.skip('invokeTool: only required params', async () => {
+ const responsePromise = client.browsers.webmcp.invokeTool('htzv5orfit78e1m2biiifpbv', {
+ input: { foo: 'bar' },
+ tool_ref: 'x',
+ });
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Mock server tests are disabled
+ test.skip('invokeTool: required and optional params', async () => {
+ const response = await client.browsers.webmcp.invokeTool('htzv5orfit78e1m2biiifpbv', {
+ input: { foo: 'bar' },
+ tool_ref: 'x',
+ timeout_sec: 1,
+ });
+ });
+
+ // Mock server tests are disabled
+ test.skip('listTools', async () => {
+ const responsePromise = client.browsers.webmcp.listTools('htzv5orfit78e1m2biiifpbv');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+});
From 98b3b44d4abb63e989e32d0ec1521d5c08a6644d Mon Sep 17 00:00:00 2001
From: "kernel-internal[bot]"
<260533166+kernel-internal[bot]@users.noreply.github.com>
Date: Wed, 2 Sep 2026 19:06:41 +0000
Subject: [PATCH 2/2] release: 0.98.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 7 +++++++
package.json | 2 +-
src/version.ts | 2 +-
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 29c16586..3c1df308 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.97.0"
+ ".": "0.98.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a1dfbe95..a3e18e2b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [0.98.0](https://github.com/kernel/kernel-node-sdk/compare/v0.97.0...v0.98.0) (2026-09-02)
+
+
+### Features
+
+* Accept browser session name on all /browsers/{id_or_name} sub-resource routes ([d1006ba](https://github.com/kernel/kernel-node-sdk/commit/d1006ba6723ae641097635a8d803db04b8f4e5bd))
+
## [0.97.0](https://github.com/kernel/kernel-node-sdk/compare/v0.96.0...v0.97.0) (2026-08-31)
diff --git a/package.json b/package.json
index 9b0d183b..1708299a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@onkernel/sdk",
- "version": "0.97.0",
+ "version": "0.98.0",
"description": "The official TypeScript library for the Kernel API",
"author": "Kernel <>",
"types": "dist/index.d.ts",
diff --git a/src/version.ts b/src/version.ts
index 1b7c9366..f94f8b86 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.97.0'; // x-release-please-version
+export const VERSION = '0.98.0'; // x-release-please-version