diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index bac4ebcfd..6103afc2b 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "1.28.0"
+ ".": "1.29.0"
}
diff --git a/.stats.yml b/.stats.yml
index 63705699e..75c1b7196 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 120
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai/runloop-c1b0e0d2c2bf9d7888ddef0cfdfb390458875cd2c1feb48a06fcd06e92105326.yml
-openapi_spec_hash: ec61cf6d205251b54e1a6d68d9dd9860
-config_hash: 6d102da8b9fcc3d0deb42d7a707e78c6
+configured_endpoints: 121
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai/runloop-f8c19bf9329a554bedfbb8678d6d3cb8881a285d27b3d8ba078e2a573b597a17.yml
+openapi_spec_hash: 0c3d490050a9bbaa5cb7378bf55e8f37
+config_hash: 7afcebea2dd638ed0cf0d5367f820f73
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 71fe49d45..bb12e4e7a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,26 @@
# Changelog
+## 1.29.0 (2026-08-20)
+
+Full Changelog: [v1.28.0...v1.29.0](https://github.com/runloopai/api-client-ts/compare/v1.28.0...v1.29.0)
+
+### Features
+
+* **axon:** add registry delete endpoint ([#10769](https://github.com/runloopai/api-client-ts/issues/10769)) ([e82b606](https://github.com/runloopai/api-client-ts/commit/e82b606f189f91751fb636a2b8878daea69a74af))
+* **broker:** plumb Pi protocol selection ([#10256](https://github.com/runloopai/api-client-ts/issues/10256)) ([84893cc](https://github.com/runloopai/api-client-ts/commit/84893cc2ca7e97176bb24c917b1fcd08c1cc2fd5))
+* **config:** custom_headers on McpConfig/GatewayConfig — persistence, REST, validation, provisioner, OpenAPI ([#11096](https://github.com/runloopai/api-client-ts/issues/11096)) ([378d2df](https://github.com/runloopai/api-client-ts/commit/378d2df40b5580bf09e9b394e75f5c5763418be6))
+* **converter:** add Helm chart, container image, and enable in dev ([#10405](https://github.com/runloopai/api-client-ts/issues/10405)) ([3d08f4d](https://github.com/runloopai/api-client-ts/commit/3d08f4d5771cb771101fb479d5bb8d72b62a2092))
+* **devbox:** recover resume provisioning failures ([#10597](https://github.com/runloopai/api-client-ts/issues/10597)) ([b85737e](https://github.com/runloopai/api-client-ts/commit/b85737ef21a61dd4ed6c0f4c669cc313346e3af4))
+* **gateway:** first-class BASIC auth mechanism ([#11063](https://github.com/runloopai/api-client-ts/issues/11063)) ([6ad0047](https://github.com/runloopai/api-client-ts/commit/6ad00478d8c7853bcb173ea1579d0e1da8825dd3))
+* **mcp:** configurable auth_mechanism on McpConfig, shared shape with gateway ([#11113](https://github.com/runloopai/api-client-ts/issues/11113)) ([d81080b](https://github.com/runloopai/api-client-ts/commit/d81080bcce7704b498f7242a4738eb767bcb5dd5))
+
+
+### Bug Fixes
+
+* **devbox:** make Devbox update API patch-like ([#10582](https://github.com/runloopai/api-client-ts/issues/10582)) ([e99087b](https://github.com/runloopai/api-client-ts/commit/e99087b1a297230510180d041e8da895d993c552))
+* **gateway:** reject keyless HEADER auth_mechanism at admission and in looper ([#11120](https://github.com/runloopai/api-client-ts/issues/11120)) ([9277e11](https://github.com/runloopai/api-client-ts/commit/9277e118b9fcd85cd05106390be0a98ed4f3a8c8))
+* **mcp:** remove stale createFromInspection metadata ([#811](https://github.com/runloopai/api-client-ts/issues/811)) ([0842f40](https://github.com/runloopai/api-client-ts/commit/0842f402cc4a7ddc73d89e4643c3a5984e1bdb4a))
+
## 1.28.0 (2026-07-29)
Full Changelog: [v1.27.0...v1.28.0](https://github.com/runloopai/api-client-ts/compare/v1.27.0...v1.28.0)
diff --git a/api.md b/api.md
index 3af4951ad..7f2f6b985 100644
--- a/api.md
+++ b/api.md
@@ -5,8 +5,10 @@ Types:
- AfterIdle
- AgentMount
- AgentSource
+- AuthMechanism
- BrokerMount
- CodeMountParameters
+- CustomHeader
- LaunchParameters
- LifecycleConfiguration
- LifecycleHooks
@@ -105,12 +107,14 @@ Types:
- AxonView
- PublishParams
- PublishResultView
+- AxonDeleteResponse
Methods:
- client.axons.create({ ...params }) -> AxonView
- client.axons.retrieve(id) -> AxonView
- client.axons.list({ ...params }) -> AxonViewsAxonsCursorIDPage
+- client.axons.delete(id) -> unknown
- client.axons.publish(id, { ...params }) -> PublishResultView
- client.axons.subscribeSse(id, { ...params }) -> AxonEventView
diff --git a/package.json b/package.json
index 9732d37b5..f534c35b2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@runloop/api-client",
- "version": "1.28.0",
+ "version": "1.29.0",
"description": "The official TypeScript library for the Runloop API",
"author": "Runloop ",
"types": "dist/sdk.d.ts",
diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json
index baed81029..9be530795 100644
--- a/packages/mcp-server/manifest.json
+++ b/packages/mcp-server/manifest.json
@@ -1,7 +1,7 @@
{
"dxt_version": "0.2",
"name": "@runloop/api-client-mcp",
- "version": "1.28.0",
+ "version": "1.29.0",
"description": "The official MCP Server for the Runloop API",
"author": {
"name": "Runloop",
diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json
index c897256cd..4791bec49 100644
--- a/packages/mcp-server/package.json
+++ b/packages/mcp-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@runloop/api-client-mcp",
- "version": "1.28.0",
+ "version": "1.29.0",
"description": "The official MCP Server for the Runloop API",
"author": "Runloop ",
"types": "dist/index.d.ts",
diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts
index 7f6bb184a..b298e8737 100644
--- a/packages/mcp-server/src/code-tool-worker.ts
+++ b/packages/mcp-server/src/code-tool-worker.ts
@@ -124,7 +124,6 @@ const fuse = new Fuse(
'client.agents.list',
'client.agents.retrieve',
'client.blueprints.create',
- 'client.blueprints.createFromInspection',
'client.blueprints.delete',
'client.blueprints.list',
'client.blueprints.listPublic',
diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts
index 9bd369130..b7cf06691 100644
--- a/packages/mcp-server/src/methods.ts
+++ b/packages/mcp-server/src/methods.ts
@@ -148,12 +148,6 @@ export const sdkMethods: SdkMethod[] = [
httpMethod: 'post',
httpPath: '/v1/blueprints/{id}/delete',
},
- {
- clientCallName: 'client.blueprints.createFromInspection',
- fullyQualifiedName: 'blueprints.createFromInspection',
- httpMethod: 'post',
- httpPath: '/v1/blueprints/create_from_inspection',
- },
{
clientCallName: 'client.blueprints.listPublic',
fullyQualifiedName: 'blueprints.listPublic',
diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts
index 2ab66aec9..8ba74e597 100644
--- a/packages/mcp-server/src/server.ts
+++ b/packages/mcp-server/src/server.ts
@@ -16,7 +16,7 @@ export const newMcpServer = async (stainlessApiKey: string | undefined) =>
new McpServer(
{
name: 'runloop_api_client_api',
- version: '1.28.0',
+ version: '1.29.0',
},
{
instructions: await getInstructions(stainlessApiKey),
diff --git a/src/index.ts b/src/index.ts
index b4ac078fd..b0692cf5d 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -178,6 +178,7 @@ import {
} from './resources/secrets';
import {
AxonCreateParams,
+ AxonDeleteResponse,
AxonEventView,
AxonListParams,
AxonListView,
@@ -649,6 +650,7 @@ export declare namespace Runloop {
type AxonView as AxonView,
type PublishParams as PublishParams,
type PublishResultView as PublishResultView,
+ type AxonDeleteResponse as AxonDeleteResponse,
AxonViewsAxonsCursorIDPage as AxonViewsAxonsCursorIDPage,
type AxonListParams as AxonListParams,
type AxonPublishParams as AxonPublishParams,
@@ -830,8 +832,10 @@ export declare namespace Runloop {
export type AfterIdle = API.AfterIdle;
export type AgentMount = API.AgentMount;
export type AgentSource = API.AgentSource;
+ export type AuthMechanism = API.AuthMechanism;
export type BrokerMount = API.BrokerMount;
export type CodeMountParameters = API.CodeMountParameters;
+ export type CustomHeader = API.CustomHeader;
export type LaunchParameters = API.LaunchParameters;
export type LifecycleConfiguration = API.LifecycleConfiguration;
export type LifecycleHooks = API.LifecycleHooks;
diff --git a/src/resources/axons/axons.ts b/src/resources/axons/axons.ts
index b674680e7..4455c248b 100644
--- a/src/resources/axons/axons.ts
+++ b/src/resources/axons/axons.ts
@@ -67,6 +67,13 @@ export class Axons extends APIResource {
return this._client.getAPIList('/v1/axons', AxonViewsAxonsCursorIDPage, { query, ...options });
}
+ /**
+ * [Beta] Mark an axon deleted.
+ */
+ delete(id: string, options?: Core.RequestOptions): Core.APIPromise {
+ return this._client.delete(`/v1/axons/${id}`, options);
+ }
+
/**
* [Beta] Publish an event to a specified axon.
*/
@@ -220,6 +227,8 @@ export interface PublishResultView {
timestamp_ms: number;
}
+export type AxonDeleteResponse = unknown;
+
export interface AxonCreateParams {
/**
* (Optional) Name for the axon.
@@ -292,6 +301,7 @@ export declare namespace Axons {
type AxonView as AxonView,
type PublishParams as PublishParams,
type PublishResultView as PublishResultView,
+ type AxonDeleteResponse as AxonDeleteResponse,
AxonViewsAxonsCursorIDPage as AxonViewsAxonsCursorIDPage,
type AxonListParams as AxonListParams,
type AxonPublishParams as AxonPublishParams,
diff --git a/src/resources/axons/index.ts b/src/resources/axons/index.ts
index 9c5b7033c..d85145ea3 100644
--- a/src/resources/axons/index.ts
+++ b/src/resources/axons/index.ts
@@ -9,6 +9,7 @@ export {
type AxonView,
type PublishParams,
type PublishResultView,
+ type AxonDeleteResponse,
type AxonListParams,
type AxonPublishParams,
type AxonSubscribeSseParams,
diff --git a/src/resources/blueprints.ts b/src/resources/blueprints.ts
index f6ed91e77..e8c9818c0 100644
--- a/src/resources/blueprints.ts
+++ b/src/resources/blueprints.ts
@@ -449,7 +449,7 @@ export interface BlueprintView {
/**
* The status of the Blueprint build.
*/
- status: 'queued' | 'provisioning' | 'building' | 'failed' | 'build_complete';
+ status: 'queued' | 'provisioning' | 'building' | 'awaiting_upload' | 'failed' | 'build_complete';
/**
* The ID of the base Blueprint.
diff --git a/src/resources/devboxes/devboxes.ts b/src/resources/devboxes/devboxes.ts
index af8bc6aa6..d88aac1ab 100644
--- a/src/resources/devboxes/devboxes.ts
+++ b/src/resources/devboxes/devboxes.ts
@@ -135,8 +135,8 @@ export class Devboxes extends APIResource {
return this.awaitRunning(devbox.id, { ...requestOptions, longPoll, polling });
}
/**
- * Updates a devbox by doing a complete update the existing name,metadata fields.
- * It does not patch partial values.
+ * Updates the specified Devbox fields. Omitted fields are left unchanged. An empty
+ * name clears the name, and an empty metadata map clears the metadata.
*/
update(id: string, body?: DevboxUpdateParams, options?: Core.RequestOptions): Core.APIPromise;
update(id: string, options?: Core.RequestOptions): Core.APIPromise;
@@ -968,6 +968,11 @@ export interface DevboxView {
export namespace DevboxView {
export interface StateTransition {
+ /**
+ * The failure that caused this state transition, if applicable.
+ */
+ failure_reason?: string | null;
+
/**
* The status of the Devbox.
*
@@ -1290,12 +1295,14 @@ export namespace DevboxCreateParams {
export interface DevboxUpdateParams {
/**
- * User defined metadata to attach to the devbox for organization.
+ * User defined metadata to replace the Devbox metadata. Omit to leave unchanged or
+ * set to an empty map to clear it.
*/
metadata?: { [key: string]: string } | null;
/**
- * (Optional) A user specified name to give the Devbox.
+ * A user specified name to give the Devbox. Omit to leave unchanged or set to an
+ * empty string to clear it.
*/
name?: string | null;
}
diff --git a/src/resources/gateway-configs.ts b/src/resources/gateway-configs.ts
index 69d77e1cc..0ef501ac1 100644
--- a/src/resources/gateway-configs.ts
+++ b/src/resources/gateway-configs.ts
@@ -3,6 +3,7 @@
import { APIResource } from '../resource';
import { isRequestOptions } from '../core';
import * as Core from '../core';
+import * as Shared from './shared';
import { GatewayConfigsCursorIDPage, type GatewayConfigsCursorIDPageParams } from '../pagination';
export class GatewayConfigs extends APIResource {
@@ -87,7 +88,7 @@ export interface GatewayConfigCreateParameters {
* How credentials should be applied to proxied requests. Specify the type
* ('header', 'bearer') and optional key field.
*/
- auth_mechanism: GatewayConfigCreateParameters.AuthMechanism;
+ auth_mechanism: Shared.AuthMechanism;
/**
* The target endpoint URL (e.g., 'https://api.anthropic.com').
@@ -101,27 +102,15 @@ export interface GatewayConfigCreateParameters {
name: string;
/**
- * Optional description for this gateway configuration.
+ * Additional headers applied to proxied requests after the auth mechanism. At most
+ * 8 entries.
*/
- description?: string | null;
-}
+ custom_headers?: Array | null;
-export namespace GatewayConfigCreateParameters {
/**
- * How credentials should be applied to proxied requests. Specify the type
- * ('header', 'bearer') and optional key field.
+ * Optional description for this gateway configuration.
*/
- export interface AuthMechanism {
- /**
- * The type of authentication mechanism: 'header', 'bearer'.
- */
- type: string;
-
- /**
- * For 'header' type: the header name (e.g., 'x-api-key').
- */
- key?: string | null;
- }
+ description?: string | null;
}
/**
@@ -150,10 +139,16 @@ export interface GatewayConfigListView {
*/
export interface GatewayConfigUpdateParameters {
/**
- * Defines how credentials are applied to HTTP requests when proxying through the
- * gateway.
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
*/
- auth_mechanism?: GatewayConfigUpdateParameters.AuthMechanism | null;
+ auth_mechanism?: Shared.AuthMechanism | null;
+
+ /**
+ * New list of additional headers. Replaces the existing list entirely; use an
+ * empty list to clear all custom headers. At most 8 entries.
+ */
+ custom_headers?: Array | null;
/**
* New description for this gateway configuration.
@@ -171,24 +166,6 @@ export interface GatewayConfigUpdateParameters {
name?: string | null;
}
-export namespace GatewayConfigUpdateParameters {
- /**
- * Defines how credentials are applied to HTTP requests when proxying through the
- * gateway.
- */
- export interface AuthMechanism {
- /**
- * The type of authentication mechanism: 'header', 'bearer'.
- */
- type: string;
-
- /**
- * For 'header' type: the header name (e.g., 'x-api-key').
- */
- key?: string | null;
- }
-}
-
/**
* A GatewayConfig defines a configuration for proxying API requests through the
* agent gateway. It specifies the target endpoint and how credentials should be
@@ -203,7 +180,7 @@ export interface GatewayConfigView {
/**
* How credentials should be applied to proxied requests.
*/
- auth_mechanism: GatewayConfigView.AuthMechanism;
+ auth_mechanism: Shared.AuthMechanism;
/**
* Creation time of the GatewayConfig (Unix timestamp in milliseconds).
@@ -227,26 +204,16 @@ export interface GatewayConfigView {
account_id?: string | null;
/**
- * Optional description for this gateway configuration.
+ * Additional headers applied to proxied requests after the auth mechanism.
+ * Secret-backed entries reference the secret by 'sec\_' id; values are never
+ * returned.
*/
- description?: string | null;
-}
+ custom_headers?: Array | null;
-export namespace GatewayConfigView {
/**
- * How credentials should be applied to proxied requests.
+ * Optional description for this gateway configuration.
*/
- export interface AuthMechanism {
- /**
- * The type of authentication mechanism: 'header', 'bearer'.
- */
- type: string;
-
- /**
- * For 'header' type: the header name (e.g., 'x-api-key').
- */
- key?: string | null;
- }
+ description?: string | null;
}
export interface GatewayConfigCreateParams {
@@ -254,7 +221,7 @@ export interface GatewayConfigCreateParams {
* How credentials should be applied to proxied requests. Specify the type
* ('header', 'bearer') and optional key field.
*/
- auth_mechanism: GatewayConfigCreateParams.AuthMechanism;
+ auth_mechanism: Shared.AuthMechanism;
/**
* The target endpoint URL (e.g., 'https://api.anthropic.com').
@@ -267,36 +234,30 @@ export interface GatewayConfigCreateParams {
*/
name: string;
+ /**
+ * Additional headers applied to proxied requests after the auth mechanism. At most
+ * 8 entries.
+ */
+ custom_headers?: Array | null;
+
/**
* Optional description for this gateway configuration.
*/
description?: string | null;
}
-export namespace GatewayConfigCreateParams {
+export interface GatewayConfigUpdateParams {
/**
- * How credentials should be applied to proxied requests. Specify the type
- * ('header', 'bearer') and optional key field.
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
*/
- export interface AuthMechanism {
- /**
- * The type of authentication mechanism: 'header', 'bearer'.
- */
- type: string;
+ auth_mechanism?: Shared.AuthMechanism | null;
- /**
- * For 'header' type: the header name (e.g., 'x-api-key').
- */
- key?: string | null;
- }
-}
-
-export interface GatewayConfigUpdateParams {
/**
- * Defines how credentials are applied to HTTP requests when proxying through the
- * gateway.
+ * New list of additional headers. Replaces the existing list entirely; use an
+ * empty list to clear all custom headers. At most 8 entries.
*/
- auth_mechanism?: GatewayConfigUpdateParams.AuthMechanism | null;
+ custom_headers?: Array | null;
/**
* New description for this gateway configuration.
@@ -314,24 +275,6 @@ export interface GatewayConfigUpdateParams {
name?: string | null;
}
-export namespace GatewayConfigUpdateParams {
- /**
- * Defines how credentials are applied to HTTP requests when proxying through the
- * gateway.
- */
- export interface AuthMechanism {
- /**
- * The type of authentication mechanism: 'header', 'bearer'.
- */
- type: string;
-
- /**
- * For 'header' type: the header name (e.g., 'x-api-key').
- */
- key?: string | null;
- }
-}
-
export interface GatewayConfigListParams extends GatewayConfigsCursorIDPageParams {
/**
* Filter by ID.
diff --git a/src/resources/index.ts b/src/resources/index.ts
index fe0f43691..8e7799bea 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -29,6 +29,7 @@ export {
type AxonView,
type PublishParams,
type PublishResultView,
+ type AxonDeleteResponse,
type AxonListParams,
type AxonPublishParams,
type AxonSubscribeSseParams,
diff --git a/src/resources/mcp-configs.ts b/src/resources/mcp-configs.ts
index 705a7a6a0..6e763c1c6 100644
--- a/src/resources/mcp-configs.ts
+++ b/src/resources/mcp-configs.ts
@@ -3,6 +3,7 @@
import { APIResource } from '../resource';
import { isRequestOptions } from '../core';
import * as Core from '../core';
+import * as Shared from './shared';
import { McpConfigsCursorIDPage, type McpConfigsCursorIDPageParams } from '../pagination';
export class McpConfigs extends APIResource {
@@ -99,6 +100,18 @@ export interface McpConfigCreateParameters {
*/
name: string;
+ /**
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
+ */
+ auth_mechanism?: Shared.AuthMechanism | null;
+
+ /**
+ * Additional headers applied to upstream requests after the credential. At most 8
+ * entries.
+ */
+ custom_headers?: Array | null;
+
/**
* Optional description for this MCP configuration.
*/
@@ -136,6 +149,18 @@ export interface McpConfigUpdateParameters {
*/
allowed_tools?: Array | null;
+ /**
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
+ */
+ auth_mechanism?: Shared.AuthMechanism | null;
+
+ /**
+ * New list of additional headers. Replaces the existing list entirely; use an
+ * empty list to clear all custom headers. At most 8 entries.
+ */
+ custom_headers?: Array | null;
+
/**
* New description for this MCP configuration.
*/
@@ -169,6 +194,11 @@ export interface McpConfigView {
*/
allowed_tools: Array;
+ /**
+ * How the primary credential is applied to upstream requests.
+ */
+ auth_mechanism: Shared.AuthMechanism;
+
/**
* Creation time of the McpConfig (Unix timestamp in milliseconds).
*/
@@ -184,6 +214,13 @@ export interface McpConfigView {
*/
name: string;
+ /**
+ * Additional headers applied to upstream requests after the credential.
+ * Secret-backed entries reference the secret by 'sec\_' id; values are never
+ * returned.
+ */
+ custom_headers?: Array | null;
+
/**
* Optional description for this MCP configuration.
*/
@@ -209,6 +246,18 @@ export interface McpConfigCreateParams {
*/
name: string;
+ /**
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
+ */
+ auth_mechanism?: Shared.AuthMechanism | null;
+
+ /**
+ * Additional headers applied to upstream requests after the credential. At most 8
+ * entries.
+ */
+ custom_headers?: Array | null;
+
/**
* Optional description for this MCP configuration.
*/
@@ -222,6 +271,18 @@ export interface McpConfigUpdateParams {
*/
allowed_tools?: Array | null;
+ /**
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
+ */
+ auth_mechanism?: Shared.AuthMechanism | null;
+
+ /**
+ * New list of additional headers. Replaces the existing list entirely; use an
+ * empty list to clear all custom headers. At most 8 entries.
+ */
+ custom_headers?: Array | null;
+
/**
* New description for this MCP configuration.
*/
diff --git a/src/resources/shared.ts b/src/resources/shared.ts
index 9e83d3071..894ea9fc2 100644
--- a/src/resources/shared.ts
+++ b/src/resources/shared.ts
@@ -152,6 +152,24 @@ export namespace AgentSource {
}
}
+/**
+ * Defines how the primary credential is applied to requests proxied to the
+ * upstream.
+ */
+export interface AuthMechanism {
+ /**
+ * The type of authentication mechanism: 'header', 'bearer', or 'basic'. For
+ * 'basic', store the secret as plain 'user:pass'; the proxy base64-encodes it.
+ */
+ type: string;
+
+ /**
+ * The header name (e.g., 'x-api-key'). Required for 'header' type; invalid for
+ * other types.
+ */
+ key?: string | null;
+}
+
export interface BrokerMount {
/**
* The ID of the axon event stream to mount onto the Devbox.
@@ -162,20 +180,20 @@ export interface BrokerMount {
/**
* Binary to launch the agent (e.g., 'opencode'). Used by protocols that launch a
- * subprocess (acp, claude_json, codex_json).
+ * subprocess (acp, claude_json, codex_json, pi_json).
*/
agent_binary?: string | null;
/**
* Arguments to pass to the agent command (e.g., ['acp']). Used by protocols that
- * launch a subprocess (acp, claude_json, codex_json).
+ * launch a subprocess (acp, claude_json, codex_json, pi_json).
*/
launch_args?: Array | null;
/**
* The protocol used by the broker to deliver events to the agent.
*/
- protocol?: 'acp' | 'claude_json' | 'codex_json' | null;
+ protocol?: 'acp' | 'claude_json' | 'codex_json' | 'pi_json' | null;
/**
* Working directory in which to launch the agent binary. Defaults to the home
@@ -218,6 +236,30 @@ export interface CodeMountParameters {
install_command?: string | null;
}
+/**
+ * An additional header applied to upstream requests alongside the primary
+ * credential. The value comes from an account secret or a literal string; exactly
+ * one of 'secret' and 'value' must be set.
+ */
+export interface CustomHeader {
+ /**
+ * The header name (e.g., 'DD-APPLICATION-KEY').
+ */
+ name: string;
+
+ /**
+ * Account secret providing the header value. Accepts a secret name or 'sec*' id on
+ * writes; reads always return the 'sec*' id.
+ */
+ secret?: string | null;
+
+ /**
+ * Literal header value. Stored in plaintext and returned by reads - use 'secret'
+ * for credentials or other sensitive values.
+ */
+ value?: string | null;
+}
+
/**
* LaunchParameters enable you to customize the resources available to your Devbox
* as well as the environment set up that should be completed before the Devbox is
diff --git a/src/version.ts b/src/version.ts
index df29c98cf..ec0d2ee29 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '1.28.0'; // x-release-please-version
+export const VERSION = '1.29.0'; // x-release-please-version
diff --git a/tests/api-resources/axons/axons.test.ts b/tests/api-resources/axons/axons.test.ts
index c0e97978b..4f67d7ec7 100644
--- a/tests/api-resources/axons/axons.test.ts
+++ b/tests/api-resources/axons/axons.test.ts
@@ -87,6 +87,24 @@ describe('resource axons', () => {
).rejects.toThrow(Runloop.NotFoundError);
});
+ test('delete', async () => {
+ const responsePromise = client.axons.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);
+ });
+
+ test('delete: request options instead of 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.axons.delete('id', { path: '/_stainless_unknown_path' })).rejects.toThrow(
+ Runloop.NotFoundError,
+ );
+ });
+
test('publish: only required params', async () => {
const responsePromise = client.axons.publish('id', {
event_type: 'event_type',
diff --git a/tests/api-resources/gateway-configs.test.ts b/tests/api-resources/gateway-configs.test.ts
index 18f0eac1a..0deed0553 100644
--- a/tests/api-resources/gateway-configs.test.ts
+++ b/tests/api-resources/gateway-configs.test.ts
@@ -29,6 +29,13 @@ describe('resource gatewayConfigs', () => {
auth_mechanism: { type: 'type', key: 'key' },
endpoint: 'endpoint',
name: 'name',
+ custom_headers: [
+ {
+ name: 'name',
+ secret: 'secret',
+ value: 'value',
+ },
+ ],
description: 'description',
});
});
@@ -76,6 +83,13 @@ describe('resource gatewayConfigs', () => {
'id',
{
auth_mechanism: { type: 'type', key: 'key' },
+ custom_headers: [
+ {
+ name: 'name',
+ secret: 'secret',
+ value: 'value',
+ },
+ ],
description: 'description',
endpoint: 'endpoint',
name: 'name',
diff --git a/tests/api-resources/mcp-configs.test.ts b/tests/api-resources/mcp-configs.test.ts
index 8f37db19f..e0d21d97e 100644
--- a/tests/api-resources/mcp-configs.test.ts
+++ b/tests/api-resources/mcp-configs.test.ts
@@ -29,6 +29,14 @@ describe('resource mcpConfigs', () => {
allowed_tools: ['string'],
endpoint: 'endpoint',
name: 'name',
+ auth_mechanism: { type: 'type', key: 'key' },
+ custom_headers: [
+ {
+ name: 'name',
+ secret: 'secret',
+ value: 'value',
+ },
+ ],
description: 'description',
});
});
@@ -76,6 +84,14 @@ describe('resource mcpConfigs', () => {
'id',
{
allowed_tools: ['string'],
+ auth_mechanism: { type: 'type', key: 'key' },
+ custom_headers: [
+ {
+ name: 'name',
+ secret: 'secret',
+ value: 'value',
+ },
+ ],
description: 'description',
endpoint: 'endpoint',
name: 'name',