From 50cc8004d30cb579d1fb789be0092610b0c67d2a Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 8 Apr 2026 13:12:09 +0000
Subject: [PATCH 1/5] feat: [kernel-1116] add base_url field to browser session
response
---
.stats.yml | 4 ++--
src/resources/browser-pools.ts | 5 +++++
src/resources/browsers/browsers.ts | 20 ++++++++++++++++++++
src/resources/invocations.ts | 5 +++++
4 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 7f48513..b81754a 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 104
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-ac10847d991ef8ed89124b5550922cb5726af2b4a4c3396ee6ff82938302fc25.yml
-openapi_spec_hash: 0d902563108fe2461708c05336eab40a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-aee09720882ec1d78f845fee6ceecb0466c264629e4edecd3230406dd06d7983.yml
+openapi_spec_hash: 438da0d38d169897595f301d82fa7e2c
config_hash: 16e4457a0bb26e98a335a1c2a572290a
diff --git a/src/resources/browser-pools.ts b/src/resources/browser-pools.ts
index 83a8e93..f587ded 100644
--- a/src/resources/browser-pools.ts
+++ b/src/resources/browser-pools.ts
@@ -305,6 +305,11 @@ export interface BrowserPoolAcquireResponse {
*/
webdriver_ws_url: string;
+ /**
+ * Metro-API HTTP base URL for this browser session.
+ */
+ base_url?: string;
+
/**
* Remote URL for live viewing the browser session. Only available for non-headless
* browsers.
diff --git a/src/resources/browsers/browsers.ts b/src/resources/browsers/browsers.ts
index 2330b59..2e1264b 100644
--- a/src/resources/browsers/browsers.ts
+++ b/src/resources/browsers/browsers.ts
@@ -318,6 +318,11 @@ export interface BrowserCreateResponse {
*/
webdriver_ws_url: string;
+ /**
+ * Metro-API HTTP base URL for this browser session.
+ */
+ base_url?: string;
+
/**
* Remote URL for live viewing the browser session. Only available for non-headless
* browsers.
@@ -419,6 +424,11 @@ export interface BrowserRetrieveResponse {
*/
webdriver_ws_url: string;
+ /**
+ * Metro-API HTTP base URL for this browser session.
+ */
+ base_url?: string;
+
/**
* Remote URL for live viewing the browser session. Only available for non-headless
* browsers.
@@ -520,6 +530,11 @@ export interface BrowserUpdateResponse {
*/
webdriver_ws_url: string;
+ /**
+ * Metro-API HTTP base URL for this browser session.
+ */
+ base_url?: string;
+
/**
* Remote URL for live viewing the browser session. Only available for non-headless
* browsers.
@@ -621,6 +636,11 @@ export interface BrowserListResponse {
*/
webdriver_ws_url: string;
+ /**
+ * Metro-API HTTP base URL for this browser session.
+ */
+ base_url?: string;
+
/**
* Remote URL for live viewing the browser session. Only available for non-headless
* browsers.
diff --git a/src/resources/invocations.ts b/src/resources/invocations.ts
index e567574..430751b 100644
--- a/src/resources/invocations.ts
+++ b/src/resources/invocations.ts
@@ -453,6 +453,11 @@ export namespace InvocationListBrowsersResponse {
*/
webdriver_ws_url: string;
+ /**
+ * Metro-API HTTP base URL for this browser session.
+ */
+ base_url?: string;
+
/**
* Remote URL for live viewing the browser session. Only available for non-headless
* browsers.
From 95f209396f586b7ce949ca0e11e075edca5f1f73 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 8 Apr 2026 20:48:24 +0000
Subject: [PATCH 2/5] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index b81754a..d184bbd 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 104
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-aee09720882ec1d78f845fee6ceecb0466c264629e4edecd3230406dd06d7983.yml
-openapi_spec_hash: 438da0d38d169897595f301d82fa7e2c
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-49a1a92e00d1eb87e91e8527275cb0705fce2edea30e70fea745f134dd451fbd.yml
+openapi_spec_hash: 3aa6ab6939790f538332054162fbdedc
config_hash: 16e4457a0bb26e98a335a1c2a572290a
From 87b21a8d12f82d8f88b6a4651954c6a42f09d201 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 9 Apr 2026 06:04:11 +0000
Subject: [PATCH 3/5] chore(internal): codegen related update
---
src/internal/utils/env.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/internal/utils/env.ts b/src/internal/utils/env.ts
index 2d84800..cc5fa0f 100644
--- a/src/internal/utils/env.ts
+++ b/src/internal/utils/env.ts
@@ -9,10 +9,10 @@
*/
export const readEnv = (env: string): string | undefined => {
if (typeof (globalThis as any).process !== 'undefined') {
- return (globalThis as any).process.env?.[env]?.trim() ?? undefined;
+ return (globalThis as any).process.env?.[env]?.trim() || undefined;
}
if (typeof (globalThis as any).Deno !== 'undefined') {
- return (globalThis as any).Deno.env?.get?.(env)?.trim();
+ return (globalThis as any).Deno.env?.get?.(env)?.trim() || undefined;
}
return undefined;
};
From 068027a7b58e3234b99c8b87fe7ef4610f33f941 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 10 Apr 2026 02:14:36 +0000
Subject: [PATCH 4/5] chore: retrigger Stainless codegen for projects resource
---
.stats.yml | 4 +-
api.md | 28 +++
src/client.ts | 26 +++
src/resources/index.ts | 10 +
src/resources/projects.ts | 3 +
src/resources/projects/index.ts | 18 ++
src/resources/projects/limits.ts | 128 +++++++++++++
src/resources/projects/projects.ts | 179 ++++++++++++++++++
tests/api-resources/projects/limits.test.ts | 34 ++++
tests/api-resources/projects/projects.test.ts | 83 ++++++++
10 files changed, 511 insertions(+), 2 deletions(-)
create mode 100644 src/resources/projects.ts
create mode 100644 src/resources/projects/index.ts
create mode 100644 src/resources/projects/limits.ts
create mode 100644 src/resources/projects/projects.ts
create mode 100644 tests/api-resources/projects/limits.test.ts
create mode 100644 tests/api-resources/projects/projects.test.ts
diff --git a/.stats.yml b/.stats.yml
index d184bbd..db7b03c 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 104
+configured_endpoints: 111
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-49a1a92e00d1eb87e91e8527275cb0705fce2edea30e70fea745f134dd451fbd.yml
openapi_spec_hash: 3aa6ab6939790f538332054162fbdedc
-config_hash: 16e4457a0bb26e98a335a1c2a572290a
+config_hash: 9818dd634f87b677410eefd013d7a179
diff --git a/api.md b/api.md
index 1d47fcb..4f2faea 100644
--- a/api.md
+++ b/api.md
@@ -299,6 +299,34 @@ Methods:
- client.credentials.delete(idOrName) -> void
- client.credentials.totpCode(idOrName) -> CredentialTotpCodeResponse
+# Projects
+
+Types:
+
+- CreateProjectRequest
+- Project
+- UpdateProjectRequest
+
+Methods:
+
+- client.projects.create({ ...params }) -> Project
+- client.projects.retrieve(id) -> Project
+- client.projects.update(id, { ...params }) -> Project
+- client.projects.list({ ...params }) -> ProjectsOffsetPagination
+- client.projects.delete(id) -> void
+
+## Limits
+
+Types:
+
+- ProjectLimits
+- UpdateProjectLimitsRequest
+
+Methods:
+
+- client.projects.limits.retrieve(id) -> ProjectLimits
+- client.projects.limits.update(id, { ...params }) -> ProjectLimits
+
# CredentialProviders
Types:
diff --git a/src/client.ts b/src/client.ts
index 9b34f29..dc9e5ce 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -118,6 +118,16 @@ import {
Browsers,
Profile,
} from './resources/browsers/browsers';
+import {
+ CreateProjectRequest,
+ Project,
+ ProjectCreateParams,
+ ProjectListParams,
+ ProjectUpdateParams,
+ Projects,
+ ProjectsOffsetPagination,
+ UpdateProjectRequest,
+} from './resources/projects/projects';
import { type Fetch } from './internal/builtin-types';
import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
import { FinalRequestOptions, RequestOptions } from './internal/request-options';
@@ -925,6 +935,10 @@ export class Kernel {
* Create and manage credentials for authentication.
*/
credentials: API.Credentials = new API.Credentials(this);
+ /**
+ * Create and manage projects for resource isolation within an organization.
+ */
+ projects: API.Projects = new API.Projects(this);
/**
* Configure external credential providers like 1Password.
*/
@@ -941,6 +955,7 @@ Kernel.Proxies = Proxies;
Kernel.Extensions = Extensions;
Kernel.BrowserPools = BrowserPools;
Kernel.Credentials = Credentials;
+Kernel.Projects = Projects;
Kernel.CredentialProviders = CredentialProviders;
export declare namespace Kernel {
@@ -1057,6 +1072,17 @@ export declare namespace Kernel {
type CredentialListParams as CredentialListParams,
};
+ export {
+ Projects as Projects,
+ type CreateProjectRequest as CreateProjectRequest,
+ type Project as Project,
+ type UpdateProjectRequest as UpdateProjectRequest,
+ type ProjectsOffsetPagination as ProjectsOffsetPagination,
+ type ProjectCreateParams as ProjectCreateParams,
+ type ProjectUpdateParams as ProjectUpdateParams,
+ type ProjectListParams as ProjectListParams,
+ };
+
export {
CredentialProviders as CredentialProviders,
type CreateCredentialProviderRequest as CreateCredentialProviderRequest,
diff --git a/src/resources/index.ts b/src/resources/index.ts
index a5b082c..312dbe0 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -96,6 +96,16 @@ export {
type InvocationListResponsesOffsetPagination,
} from './invocations';
export { Profiles, type ProfileCreateParams, type ProfileListParams } from './profiles';
+export {
+ Projects,
+ type CreateProjectRequest,
+ type Project,
+ type UpdateProjectRequest,
+ type ProjectCreateParams,
+ type ProjectUpdateParams,
+ type ProjectListParams,
+ type ProjectsOffsetPagination,
+} from './projects/projects';
export {
Proxies,
type ProxyCreateResponse,
diff --git a/src/resources/projects.ts b/src/resources/projects.ts
new file mode 100644
index 0000000..f9985fc
--- /dev/null
+++ b/src/resources/projects.ts
@@ -0,0 +1,3 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+export * from './projects/index';
diff --git a/src/resources/projects/index.ts b/src/resources/projects/index.ts
new file mode 100644
index 0000000..7cbfa6a
--- /dev/null
+++ b/src/resources/projects/index.ts
@@ -0,0 +1,18 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+export {
+ Limits,
+ type ProjectLimits,
+ type UpdateProjectLimitsRequest,
+ type LimitUpdateParams,
+} from './limits';
+export {
+ Projects,
+ type CreateProjectRequest,
+ type Project,
+ type UpdateProjectRequest,
+ type ProjectCreateParams,
+ type ProjectUpdateParams,
+ type ProjectListParams,
+ type ProjectsOffsetPagination,
+} from './projects';
diff --git a/src/resources/projects/limits.ts b/src/resources/projects/limits.ts
new file mode 100644
index 0000000..5475e4d
--- /dev/null
+++ b/src/resources/projects/limits.ts
@@ -0,0 +1,128 @@
+// 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';
+
+/**
+ * Create and manage projects for resource isolation within an organization.
+ */
+export class Limits extends APIResource {
+ /**
+ * Get the resource limit overrides for a project. Null values mean no
+ * project-level cap (org limit applies).
+ *
+ * @example
+ * ```ts
+ * const projectLimits = await client.projects.limits.retrieve(
+ * 'id',
+ * );
+ * ```
+ */
+ retrieve(id: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/projects/${id}/limits`, options);
+ }
+
+ /**
+ * Update resource limit overrides for a project. Only fields present in the
+ * request are modified. Set a field to 0 to remove that limit cap; omit a field to
+ * leave it unchanged.
+ *
+ * @example
+ * ```ts
+ * const projectLimits = await client.projects.limits.update(
+ * 'id',
+ * );
+ * ```
+ */
+ update(id: string, body: LimitUpdateParams, options?: RequestOptions): APIPromise {
+ return this._client.patch(path`/projects/${id}/limits`, { body, ...options });
+ }
+}
+
+export interface ProjectLimits {
+ /**
+ * Maximum concurrent app invocations for this project. Null means no project-level
+ * cap.
+ */
+ max_concurrent_invocations?: number | null;
+
+ /**
+ * Maximum concurrent browser sessions for this project. Null means no
+ * project-level cap.
+ */
+ max_concurrent_sessions?: number | null;
+
+ /**
+ * Maximum persistent browser sessions for this project. Null means no
+ * project-level cap.
+ */
+ max_persistent_sessions?: number | null;
+
+ /**
+ * Maximum pooled sessions capacity for this project. Null means no project-level
+ * cap.
+ */
+ max_pooled_sessions?: number | null;
+}
+
+export interface UpdateProjectLimitsRequest {
+ /**
+ * Maximum concurrent app invocations for this project. Set to 0 to remove the cap;
+ * omit to leave unchanged.
+ */
+ max_concurrent_invocations?: number | null;
+
+ /**
+ * Maximum concurrent browser sessions for this project. Set to 0 to remove the
+ * cap; omit to leave unchanged.
+ */
+ max_concurrent_sessions?: number | null;
+
+ /**
+ * Maximum persistent browser sessions for this project. Set to 0 to remove the
+ * cap; omit to leave unchanged.
+ */
+ max_persistent_sessions?: number | null;
+
+ /**
+ * Maximum pooled sessions capacity for this project. Set to 0 to remove the cap;
+ * omit to leave unchanged.
+ */
+ max_pooled_sessions?: number | null;
+}
+
+export interface LimitUpdateParams {
+ /**
+ * Maximum concurrent app invocations for this project. Set to 0 to remove the cap;
+ * omit to leave unchanged.
+ */
+ max_concurrent_invocations?: number | null;
+
+ /**
+ * Maximum concurrent browser sessions for this project. Set to 0 to remove the
+ * cap; omit to leave unchanged.
+ */
+ max_concurrent_sessions?: number | null;
+
+ /**
+ * Maximum persistent browser sessions for this project. Set to 0 to remove the
+ * cap; omit to leave unchanged.
+ */
+ max_persistent_sessions?: number | null;
+
+ /**
+ * Maximum pooled sessions capacity for this project. Set to 0 to remove the cap;
+ * omit to leave unchanged.
+ */
+ max_pooled_sessions?: number | null;
+}
+
+export declare namespace Limits {
+ export {
+ type ProjectLimits as ProjectLimits,
+ type UpdateProjectLimitsRequest as UpdateProjectLimitsRequest,
+ type LimitUpdateParams as LimitUpdateParams,
+ };
+}
diff --git a/src/resources/projects/projects.ts b/src/resources/projects/projects.ts
new file mode 100644
index 0000000..142531f
--- /dev/null
+++ b/src/resources/projects/projects.ts
@@ -0,0 +1,179 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../../core/resource';
+import * as LimitsAPI from './limits';
+import { LimitUpdateParams, Limits, ProjectLimits, UpdateProjectLimitsRequest } from './limits';
+import { APIPromise } from '../../core/api-promise';
+import { OffsetPagination, type OffsetPaginationParams, PagePromise } from '../../core/pagination';
+import { buildHeaders } from '../../internal/headers';
+import { RequestOptions } from '../../internal/request-options';
+import { path } from '../../internal/utils/path';
+
+/**
+ * Create and manage projects for resource isolation within an organization.
+ */
+export class Projects extends APIResource {
+ limits: LimitsAPI.Limits = new LimitsAPI.Limits(this._client);
+
+ /**
+ * Create a new project within the authenticated organization. Requires a paid plan
+ * and the projects feature flag.
+ *
+ * @example
+ * ```ts
+ * const project = await client.projects.create({
+ * name: 'staging',
+ * });
+ * ```
+ */
+ create(body: ProjectCreateParams, options?: RequestOptions): APIPromise {
+ return this._client.post('/projects', { body, ...options });
+ }
+
+ /**
+ * Get a project by ID.
+ *
+ * @example
+ * ```ts
+ * const project = await client.projects.retrieve('id');
+ * ```
+ */
+ retrieve(id: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/projects/${id}`, options);
+ }
+
+ /**
+ * Update a project's name or status.
+ *
+ * @example
+ * ```ts
+ * const project = await client.projects.update('id');
+ * ```
+ */
+ update(id: string, body: ProjectUpdateParams, options?: RequestOptions): APIPromise {
+ return this._client.patch(path`/projects/${id}`, { body, ...options });
+ }
+
+ /**
+ * List projects for the authenticated organization.
+ *
+ * @example
+ * ```ts
+ * // Automatically fetches more pages as needed.
+ * for await (const project of client.projects.list()) {
+ * // ...
+ * }
+ * ```
+ */
+ list(
+ query: ProjectListParams | null | undefined = {},
+ options?: RequestOptions,
+ ): PagePromise {
+ return this._client.getAPIList('/projects', OffsetPagination, { query, ...options });
+ }
+
+ /**
+ * Soft-delete a project. The project must be empty (no active resources).
+ *
+ * @example
+ * ```ts
+ * await client.projects.delete('id');
+ * ```
+ */
+ delete(id: string, options?: RequestOptions): APIPromise {
+ return this._client.delete(path`/projects/${id}`, {
+ ...options,
+ headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
+ });
+ }
+}
+
+export type ProjectsOffsetPagination = OffsetPagination;
+
+export interface CreateProjectRequest {
+ /**
+ * Project name (1-255 characters)
+ */
+ name: string;
+}
+
+export interface Project {
+ /**
+ * Unique project identifier
+ */
+ id: string;
+
+ /**
+ * When the project was created
+ */
+ created_at: string;
+
+ /**
+ * Project name
+ */
+ name: string;
+
+ /**
+ * Project status
+ */
+ status: 'active' | 'archived';
+
+ /**
+ * When the project was last updated
+ */
+ updated_at: string;
+}
+
+export interface UpdateProjectRequest {
+ /**
+ * New project name
+ */
+ name?: string;
+
+ /**
+ * New project status
+ */
+ status?: 'active' | 'archived';
+}
+
+export interface ProjectCreateParams {
+ /**
+ * Project name (1-255 characters)
+ */
+ name: string;
+}
+
+export interface ProjectUpdateParams {
+ /**
+ * New project name
+ */
+ name?: string;
+
+ /**
+ * New project status
+ */
+ status?: 'active' | 'archived';
+}
+
+export interface ProjectListParams extends OffsetPaginationParams {}
+
+Projects.Limits = Limits;
+
+export declare namespace Projects {
+ export {
+ type CreateProjectRequest as CreateProjectRequest,
+ type Project as Project,
+ type UpdateProjectRequest as UpdateProjectRequest,
+ type ProjectsOffsetPagination as ProjectsOffsetPagination,
+ type ProjectCreateParams as ProjectCreateParams,
+ type ProjectUpdateParams as ProjectUpdateParams,
+ type ProjectListParams as ProjectListParams,
+ };
+
+ export {
+ Limits as Limits,
+ type ProjectLimits as ProjectLimits,
+ type UpdateProjectLimitsRequest as UpdateProjectLimitsRequest,
+ type LimitUpdateParams as LimitUpdateParams,
+ };
+}
diff --git a/tests/api-resources/projects/limits.test.ts b/tests/api-resources/projects/limits.test.ts
new file mode 100644
index 0000000..61b40ca
--- /dev/null
+++ b/tests/api-resources/projects/limits.test.ts
@@ -0,0 +1,34 @@
+// 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 limits', () => {
+ // Mock server tests are disabled
+ test.skip('retrieve', async () => {
+ const responsePromise = client.projects.limits.retrieve('id');
+ 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('update', async () => {
+ const responsePromise = client.projects.limits.update('id', {});
+ 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);
+ });
+});
diff --git a/tests/api-resources/projects/projects.test.ts b/tests/api-resources/projects/projects.test.ts
new file mode 100644
index 0000000..d3fb12e
--- /dev/null
+++ b/tests/api-resources/projects/projects.test.ts
@@ -0,0 +1,83 @@
+// 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 projects', () => {
+ // Mock server tests are disabled
+ test.skip('create: only required params', async () => {
+ const responsePromise = client.projects.create({ name: 'staging' });
+ 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('create: required and optional params', async () => {
+ const response = await client.projects.create({ name: 'staging' });
+ });
+
+ // Mock server tests are disabled
+ test.skip('retrieve', async () => {
+ const responsePromise = client.projects.retrieve('id');
+ 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('update', async () => {
+ const responsePromise = client.projects.update('id', {});
+ 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('list', async () => {
+ const responsePromise = client.projects.list();
+ 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('list: request options and params are passed correctly', async () => {
+ // ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
+ await expect(
+ client.projects.list({ limit: 100, offset: 0 }, { path: '/_stainless_unknown_path' }),
+ ).rejects.toThrow(Kernel.NotFoundError);
+ });
+
+ // Mock server tests are disabled
+ test.skip('delete', async () => {
+ const responsePromise = client.projects.delete('id');
+ 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 644dba7fa7f0f40827d61a74ebc24f7dcec4e999 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 10 Apr 2026 02:14:55 +0000
Subject: [PATCH 5/5] release: 0.48.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 14 ++++++++++++++
package-lock.json | 4 ++--
package.json | 2 +-
src/version.ts | 2 +-
5 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 3bafaeb..1383393 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.47.0"
+ ".": "0.48.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d3aee7a..9a8359e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,19 @@
# Changelog
+## 0.48.0 (2026-04-10)
+
+Full Changelog: [v0.47.0...v0.48.0](https://github.com/kernel/kernel-node-sdk/compare/v0.47.0...v0.48.0)
+
+### Features
+
+* [kernel-1116] add base_url field to browser session response ([50cc800](https://github.com/kernel/kernel-node-sdk/commit/50cc8004d30cb579d1fb789be0092610b0c67d2a))
+
+
+### Chores
+
+* **internal:** codegen related update ([87b21a8](https://github.com/kernel/kernel-node-sdk/commit/87b21a8d12f82d8f88b6a4651954c6a42f09d201))
+* retrigger Stainless codegen for projects resource ([068027a](https://github.com/kernel/kernel-node-sdk/commit/068027a7b58e3234b99c8b87fe7ef4610f33f941))
+
## 0.47.0 (2026-04-07)
Full Changelog: [v0.46.0...v0.47.0](https://github.com/kernel/kernel-node-sdk/compare/v0.46.0...v0.47.0)
diff --git a/package-lock.json b/package-lock.json
index 7661c1c..b1d5a66 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@onkernel/sdk",
- "version": "0.47.0",
+ "version": "0.48.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@onkernel/sdk",
- "version": "0.47.0",
+ "version": "0.48.0",
"license": "Apache-2.0",
"devDependencies": {
"@arethetypeswrong/cli": "^0.17.0",
diff --git a/package.json b/package.json
index d1b2ff2..26494bf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@onkernel/sdk",
- "version": "0.47.0",
+ "version": "0.48.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 d84ba01..71ccf04 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.47.0'; // x-release-please-version
+export const VERSION = '0.48.0'; // x-release-please-version