From 1baea618d2b6c11ca203b9a7427f9a6b5bd46302 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 15 Apr 2026 18:20:39 +0000
Subject: [PATCH 01/19] codegen metadata
---
.stats.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.stats.yml b/.stats.yml
index 6163321..238dbfe 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 15
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-252ab435934e85d5f76957188c64906abf76a0351c5861383327cb1297a2ac8a.yml
openapi_spec_hash: ed801bb30428c1c66cb0af97e3f6ee9c
-config_hash: 253e4b5ca01236d448980a78491c17c5
+config_hash: b39effa64874ba589480760347b915be
From 5036b1bb235dc35f844a85d269be889a82e852ca Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 16 Apr 2026 13:56:23 +0000
Subject: [PATCH 02/19] feat(api): api update
---
.stats.yml | 6 +++---
src/resources/agent/agent.ts | 7 -------
2 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 238dbfe..6fad0eb 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 15
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-252ab435934e85d5f76957188c64906abf76a0351c5861383327cb1297a2ac8a.yml
-openapi_spec_hash: ed801bb30428c1c66cb0af97e3f6ee9c
-config_hash: b39effa64874ba589480760347b915be
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-8e7a3c9ef00ac517caaa193265398850b6925ab898aaf84e83e28c9f023c0ba8.yml
+openapi_spec_hash: ebf53d80dd9066d5ac9401f1493544e3
+config_hash: 253e4b5ca01236d448980a78491c17c5
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 897d3e1..ed2e27f 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -178,13 +178,6 @@ export namespace AgentSkill {
* Path to the skill definition file within the repository
*/
skill_path: string;
-
- /**
- * Self-hosted worker host that reported this skill. Present only for skills
- * discovered from self-hosted workers (as opposed to skills from GitHub repos
- * linked to environments).
- */
- worker_host?: string;
}
}
}
From b0a1504a65ce72f232540eb69916bdd71bdabfe4 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 16 Apr 2026 15:28:16 +0000
Subject: [PATCH 03/19] feat(api): api update
---
.stats.yml | 4 ++--
src/resources/agent/agent.ts | 7 +++++++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 6fad0eb..6163321 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 15
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-8e7a3c9ef00ac517caaa193265398850b6925ab898aaf84e83e28c9f023c0ba8.yml
-openapi_spec_hash: ebf53d80dd9066d5ac9401f1493544e3
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-252ab435934e85d5f76957188c64906abf76a0351c5861383327cb1297a2ac8a.yml
+openapi_spec_hash: ed801bb30428c1c66cb0af97e3f6ee9c
config_hash: 253e4b5ca01236d448980a78491c17c5
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index ed2e27f..897d3e1 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -178,6 +178,13 @@ export namespace AgentSkill {
* Path to the skill definition file within the repository
*/
skill_path: string;
+
+ /**
+ * Self-hosted worker host that reported this skill. Present only for skills
+ * discovered from self-hosted workers (as opposed to skills from GitHub repos
+ * linked to environments).
+ */
+ worker_host?: string;
}
}
}
From ac31015a446470fdadd7f3f941a378ab8b7462b6 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 16 Apr 2026 20:20:58 +0000
Subject: [PATCH 04/19] codegen metadata
---
.stats.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 6163321..b124fdb 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 15
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-252ab435934e85d5f76957188c64906abf76a0351c5861383327cb1297a2ac8a.yml
-openapi_spec_hash: ed801bb30428c1c66cb0af97e3f6ee9c
-config_hash: 253e4b5ca01236d448980a78491c17c5
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-11fd464a4cf5b849a565d00039093093ef93acdb99679ae94b2908543a55097b.yml
+openapi_spec_hash: 12840099351c5309d6cf8c4b92f028b3
+config_hash: 42666caf45e82675e80982d51e3b7727
From 1fa19c39375550cc1dfe4b7dd0bce5bb58361821 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Apr 2026 15:42:06 +0000
Subject: [PATCH 05/19] feat: Update public API and graphql to support creating
multiple service accounts and API keys
---
.stats.yml | 8 +-
api.md | 16 +++
src/resources/agent/agent.ts | 22 ++++
src/resources/agent/agent_.ts | 135 +++++++++++++++++++++++
src/resources/agent/index.ts | 8 ++
tests/api-resources/agent/agent_.test.ts | 63 +++++++++++
6 files changed, 248 insertions(+), 4 deletions(-)
create mode 100644 src/resources/agent/agent_.ts
create mode 100644 tests/api-resources/agent/agent_.test.ts
diff --git a/.stats.yml b/.stats.yml
index b124fdb..2077b1f 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 15
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-11fd464a4cf5b849a565d00039093093ef93acdb99679ae94b2908543a55097b.yml
-openapi_spec_hash: 12840099351c5309d6cf8c4b92f028b3
-config_hash: 42666caf45e82675e80982d51e3b7727
+configured_endpoints: 19
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-3226a0810ae5de980509e31910138990d93d2843918730249caed1436e677ec3.yml
+openapi_spec_hash: 776a9087e0c342e9fcbd140e75936d75
+config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/api.md b/api.md
index 9d85823..e7d79b1 100644
--- a/api.md
+++ b/api.md
@@ -60,6 +60,22 @@ Methods:
- client.agent.schedules.pause(scheduleID) -> ScheduledAgentItem
- client.agent.schedules.resume(scheduleID) -> ScheduledAgentItem
+## Agent
+
+Types:
+
+- AgentResponse
+- CreateAgentRequest
+- ListAgentIdentitiesResponse
+- UpdateAgentRequest
+
+Methods:
+
+- client.agent.agent.create({ ...params }) -> AgentResponse
+- client.agent.agent.update(uid, { ...params }) -> AgentResponse
+- client.agent.agent.list() -> ListAgentIdentitiesResponse
+- client.agent.agent.delete(uid) -> void
+
## Sessions
Types:
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 897d3e1..1bfebfa 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -2,6 +2,16 @@
import { APIResource } from '../../core/resource';
import * as AgentAPI from './agent';
+import * as AgentAgentAPI from './agent_';
+import {
+ Agent as AgentAPIAgent,
+ AgentCreateParams,
+ AgentResponse,
+ AgentUpdateParams,
+ CreateAgentRequest,
+ ListAgentIdentitiesResponse,
+ UpdateAgentRequest,
+} from './agent_';
import * as RunsAPI from './runs';
import {
ArtifactItem,
@@ -35,6 +45,7 @@ import { path } from '../../internal/utils/path';
export class Agent extends APIResource {
runs: RunsAPI.Runs = new RunsAPI.Runs(this._client);
schedules: SchedulesAPI.Schedules = new SchedulesAPI.Schedules(this._client);
+ agent: AgentAgentAPI.Agent = new AgentAgentAPI.Agent(this._client);
sessions: SessionsAPI.Sessions = new SessionsAPI.Sessions(this._client);
/**
@@ -1019,6 +1030,7 @@ export namespace AgentRunParams {
Agent.Runs = Runs;
Agent.Schedules = Schedules;
+Agent.Agent = AgentAPIAgent;
Agent.Sessions = Sessions;
export declare namespace Agent {
@@ -1064,5 +1076,15 @@ export declare namespace Agent {
type ScheduleUpdateParams as ScheduleUpdateParams,
};
+ export {
+ AgentAPIAgent as Agent,
+ type AgentResponse as AgentResponse,
+ type CreateAgentRequest as CreateAgentRequest,
+ type ListAgentIdentitiesResponse as ListAgentIdentitiesResponse,
+ type UpdateAgentRequest as UpdateAgentRequest,
+ type AgentCreateParams as AgentCreateParams,
+ type AgentUpdateParams as AgentUpdateParams,
+ };
+
export { Sessions as Sessions, type SessionCheckRedirectResponse as SessionCheckRedirectResponse };
}
diff --git a/src/resources/agent/agent_.ts b/src/resources/agent/agent_.ts
new file mode 100644
index 0000000..8256155
--- /dev/null
+++ b/src/resources/agent/agent_.ts
@@ -0,0 +1,135 @@
+// 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 { buildHeaders } from '../../internal/headers';
+import { RequestOptions } from '../../internal/request-options';
+import { path } from '../../internal/utils/path';
+
+/**
+ * Operations for running and managing cloud agents
+ */
+export class Agent extends APIResource {
+ /**
+ * Create a new agent for the caller's team. Agents can be used as the execution
+ * principal for team-owned runs.
+ *
+ * @example
+ * ```ts
+ * const agentResponse = await client.agent.agent.create({
+ * name: 'name',
+ * });
+ * ```
+ */
+ create(body: AgentCreateParams, options?: RequestOptions): APIPromise {
+ return this._client.post('/agent/identities', { body, ...options });
+ }
+
+ /**
+ * Update an existing agent.
+ *
+ * @example
+ * ```ts
+ * const agentResponse = await client.agent.agent.update(
+ * 'uid',
+ * );
+ * ```
+ */
+ update(uid: string, body: AgentUpdateParams, options?: RequestOptions): APIPromise {
+ return this._client.put(path`/agent/identities/${uid}`, { body, ...options });
+ }
+
+ /**
+ * List all agents for the caller's team. Each agent includes an `available` flag
+ * indicating whether it is within the team's plan limit and may be used for runs.
+ *
+ * @example
+ * ```ts
+ * const listAgentIdentitiesResponse =
+ * await client.agent.agent.list();
+ * ```
+ */
+ list(options?: RequestOptions): APIPromise {
+ return this._client.get('/agent/identities', options);
+ }
+
+ /**
+ * Delete an agent. All API keys associated with the agent are deleted atomically.
+ *
+ * @example
+ * ```ts
+ * await client.agent.agent.delete('uid');
+ * ```
+ */
+ delete(uid: string, options?: RequestOptions): APIPromise {
+ return this._client.delete(path`/agent/identities/${uid}`, {
+ ...options,
+ headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
+ });
+ }
+}
+
+export interface AgentResponse {
+ /**
+ * Whether this agent is within the team's plan limit and can be used for runs
+ */
+ available: boolean;
+
+ /**
+ * When the agent was created (RFC3339)
+ */
+ created_at: string;
+
+ /**
+ * Name of the agent
+ */
+ name: string;
+
+ /**
+ * Unique identifier for the agent
+ */
+ uid: string;
+}
+
+export interface CreateAgentRequest {
+ /**
+ * A name for the agent
+ */
+ name: string;
+}
+
+export interface ListAgentIdentitiesResponse {
+ agents: Array;
+}
+
+export interface UpdateAgentRequest {
+ /**
+ * The new name for the agent
+ */
+ name?: string;
+}
+
+export interface AgentCreateParams {
+ /**
+ * A name for the agent
+ */
+ name: string;
+}
+
+export interface AgentUpdateParams {
+ /**
+ * The new name for the agent
+ */
+ name?: string;
+}
+
+export declare namespace Agent {
+ export {
+ type AgentResponse as AgentResponse,
+ type CreateAgentRequest as CreateAgentRequest,
+ type ListAgentIdentitiesResponse as ListAgentIdentitiesResponse,
+ type UpdateAgentRequest as UpdateAgentRequest,
+ type AgentCreateParams as AgentCreateParams,
+ type AgentUpdateParams as AgentUpdateParams,
+ };
+}
diff --git a/src/resources/agent/index.ts b/src/resources/agent/index.ts
index 724f8b9..efd188f 100644
--- a/src/resources/agent/index.ts
+++ b/src/resources/agent/index.ts
@@ -41,3 +41,11 @@ export {
type ScheduleUpdateParams,
} from './schedules';
export { Sessions, type SessionCheckRedirectResponse } from './sessions';
+export {
+ type AgentResponse,
+ type CreateAgentRequest,
+ type ListAgentIdentitiesResponse,
+ type UpdateAgentRequest,
+ type AgentCreateParams,
+ type AgentUpdateParams,
+} from './agent_';
diff --git a/tests/api-resources/agent/agent_.test.ts b/tests/api-resources/agent/agent_.test.ts
new file mode 100644
index 0000000..58d707f
--- /dev/null
+++ b/tests/api-resources/agent/agent_.test.ts
@@ -0,0 +1,63 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import OzAPI from 'oz-agent-sdk';
+
+const client = new OzAPI({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource agent', () => {
+ // Mock server tests are disabled
+ test.skip('create: only required params', async () => {
+ const responsePromise = client.agent.agent.create({ name: 'name' });
+ 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.agent.agent.create({ name: 'name' });
+ });
+
+ // Mock server tests are disabled
+ test.skip('update', async () => {
+ const responsePromise = client.agent.agent.update('uid', {});
+ 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.agent.agent.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('delete', async () => {
+ const responsePromise = client.agent.agent.delete('uid');
+ 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 5f82281f598ced615fb4349b76433f2b11f7e166 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Apr 2026 19:47:15 +0000
Subject: [PATCH 06/19] feat(api): api update
---
.stats.yml | 8 +-
api.md | 16 ---
src/resources/agent/agent.ts | 22 ----
src/resources/agent/agent_.ts | 135 -----------------------
src/resources/agent/index.ts | 8 --
tests/api-resources/agent/agent_.test.ts | 63 -----------
6 files changed, 4 insertions(+), 248 deletions(-)
delete mode 100644 src/resources/agent/agent_.ts
delete mode 100644 tests/api-resources/agent/agent_.test.ts
diff --git a/.stats.yml b/.stats.yml
index 2077b1f..6163321 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-3226a0810ae5de980509e31910138990d93d2843918730249caed1436e677ec3.yml
-openapi_spec_hash: 776a9087e0c342e9fcbd140e75936d75
-config_hash: c5fc921cc04f541a85f92299f365eba6
+configured_endpoints: 15
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-252ab435934e85d5f76957188c64906abf76a0351c5861383327cb1297a2ac8a.yml
+openapi_spec_hash: ed801bb30428c1c66cb0af97e3f6ee9c
+config_hash: 253e4b5ca01236d448980a78491c17c5
diff --git a/api.md b/api.md
index e7d79b1..9d85823 100644
--- a/api.md
+++ b/api.md
@@ -60,22 +60,6 @@ Methods:
- client.agent.schedules.pause(scheduleID) -> ScheduledAgentItem
- client.agent.schedules.resume(scheduleID) -> ScheduledAgentItem
-## Agent
-
-Types:
-
-- AgentResponse
-- CreateAgentRequest
-- ListAgentIdentitiesResponse
-- UpdateAgentRequest
-
-Methods:
-
-- client.agent.agent.create({ ...params }) -> AgentResponse
-- client.agent.agent.update(uid, { ...params }) -> AgentResponse
-- client.agent.agent.list() -> ListAgentIdentitiesResponse
-- client.agent.agent.delete(uid) -> void
-
## Sessions
Types:
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 1bfebfa..897d3e1 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -2,16 +2,6 @@
import { APIResource } from '../../core/resource';
import * as AgentAPI from './agent';
-import * as AgentAgentAPI from './agent_';
-import {
- Agent as AgentAPIAgent,
- AgentCreateParams,
- AgentResponse,
- AgentUpdateParams,
- CreateAgentRequest,
- ListAgentIdentitiesResponse,
- UpdateAgentRequest,
-} from './agent_';
import * as RunsAPI from './runs';
import {
ArtifactItem,
@@ -45,7 +35,6 @@ import { path } from '../../internal/utils/path';
export class Agent extends APIResource {
runs: RunsAPI.Runs = new RunsAPI.Runs(this._client);
schedules: SchedulesAPI.Schedules = new SchedulesAPI.Schedules(this._client);
- agent: AgentAgentAPI.Agent = new AgentAgentAPI.Agent(this._client);
sessions: SessionsAPI.Sessions = new SessionsAPI.Sessions(this._client);
/**
@@ -1030,7 +1019,6 @@ export namespace AgentRunParams {
Agent.Runs = Runs;
Agent.Schedules = Schedules;
-Agent.Agent = AgentAPIAgent;
Agent.Sessions = Sessions;
export declare namespace Agent {
@@ -1076,15 +1064,5 @@ export declare namespace Agent {
type ScheduleUpdateParams as ScheduleUpdateParams,
};
- export {
- AgentAPIAgent as Agent,
- type AgentResponse as AgentResponse,
- type CreateAgentRequest as CreateAgentRequest,
- type ListAgentIdentitiesResponse as ListAgentIdentitiesResponse,
- type UpdateAgentRequest as UpdateAgentRequest,
- type AgentCreateParams as AgentCreateParams,
- type AgentUpdateParams as AgentUpdateParams,
- };
-
export { Sessions as Sessions, type SessionCheckRedirectResponse as SessionCheckRedirectResponse };
}
diff --git a/src/resources/agent/agent_.ts b/src/resources/agent/agent_.ts
deleted file mode 100644
index 8256155..0000000
--- a/src/resources/agent/agent_.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-// 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 { buildHeaders } from '../../internal/headers';
-import { RequestOptions } from '../../internal/request-options';
-import { path } from '../../internal/utils/path';
-
-/**
- * Operations for running and managing cloud agents
- */
-export class Agent extends APIResource {
- /**
- * Create a new agent for the caller's team. Agents can be used as the execution
- * principal for team-owned runs.
- *
- * @example
- * ```ts
- * const agentResponse = await client.agent.agent.create({
- * name: 'name',
- * });
- * ```
- */
- create(body: AgentCreateParams, options?: RequestOptions): APIPromise {
- return this._client.post('/agent/identities', { body, ...options });
- }
-
- /**
- * Update an existing agent.
- *
- * @example
- * ```ts
- * const agentResponse = await client.agent.agent.update(
- * 'uid',
- * );
- * ```
- */
- update(uid: string, body: AgentUpdateParams, options?: RequestOptions): APIPromise {
- return this._client.put(path`/agent/identities/${uid}`, { body, ...options });
- }
-
- /**
- * List all agents for the caller's team. Each agent includes an `available` flag
- * indicating whether it is within the team's plan limit and may be used for runs.
- *
- * @example
- * ```ts
- * const listAgentIdentitiesResponse =
- * await client.agent.agent.list();
- * ```
- */
- list(options?: RequestOptions): APIPromise {
- return this._client.get('/agent/identities', options);
- }
-
- /**
- * Delete an agent. All API keys associated with the agent are deleted atomically.
- *
- * @example
- * ```ts
- * await client.agent.agent.delete('uid');
- * ```
- */
- delete(uid: string, options?: RequestOptions): APIPromise {
- return this._client.delete(path`/agent/identities/${uid}`, {
- ...options,
- headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
- });
- }
-}
-
-export interface AgentResponse {
- /**
- * Whether this agent is within the team's plan limit and can be used for runs
- */
- available: boolean;
-
- /**
- * When the agent was created (RFC3339)
- */
- created_at: string;
-
- /**
- * Name of the agent
- */
- name: string;
-
- /**
- * Unique identifier for the agent
- */
- uid: string;
-}
-
-export interface CreateAgentRequest {
- /**
- * A name for the agent
- */
- name: string;
-}
-
-export interface ListAgentIdentitiesResponse {
- agents: Array;
-}
-
-export interface UpdateAgentRequest {
- /**
- * The new name for the agent
- */
- name?: string;
-}
-
-export interface AgentCreateParams {
- /**
- * A name for the agent
- */
- name: string;
-}
-
-export interface AgentUpdateParams {
- /**
- * The new name for the agent
- */
- name?: string;
-}
-
-export declare namespace Agent {
- export {
- type AgentResponse as AgentResponse,
- type CreateAgentRequest as CreateAgentRequest,
- type ListAgentIdentitiesResponse as ListAgentIdentitiesResponse,
- type UpdateAgentRequest as UpdateAgentRequest,
- type AgentCreateParams as AgentCreateParams,
- type AgentUpdateParams as AgentUpdateParams,
- };
-}
diff --git a/src/resources/agent/index.ts b/src/resources/agent/index.ts
index efd188f..724f8b9 100644
--- a/src/resources/agent/index.ts
+++ b/src/resources/agent/index.ts
@@ -41,11 +41,3 @@ export {
type ScheduleUpdateParams,
} from './schedules';
export { Sessions, type SessionCheckRedirectResponse } from './sessions';
-export {
- type AgentResponse,
- type CreateAgentRequest,
- type ListAgentIdentitiesResponse,
- type UpdateAgentRequest,
- type AgentCreateParams,
- type AgentUpdateParams,
-} from './agent_';
diff --git a/tests/api-resources/agent/agent_.test.ts b/tests/api-resources/agent/agent_.test.ts
deleted file mode 100644
index 58d707f..0000000
--- a/tests/api-resources/agent/agent_.test.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-import OzAPI from 'oz-agent-sdk';
-
-const client = new OzAPI({
- apiKey: 'My API Key',
- baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
-});
-
-describe('resource agent', () => {
- // Mock server tests are disabled
- test.skip('create: only required params', async () => {
- const responsePromise = client.agent.agent.create({ name: 'name' });
- 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.agent.agent.create({ name: 'name' });
- });
-
- // Mock server tests are disabled
- test.skip('update', async () => {
- const responsePromise = client.agent.agent.update('uid', {});
- 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.agent.agent.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('delete', async () => {
- const responsePromise = client.agent.agent.delete('uid');
- 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 b01e3a7535604d26079b1cbe00aca5cded1452e5 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Apr 2026 20:00:20 +0000
Subject: [PATCH 07/19] feat(api): api update
---
.stats.yml | 8 +-
api.md | 16 +++
src/resources/agent/agent.ts | 22 ++++
src/resources/agent/agent_.ts | 135 +++++++++++++++++++++++
src/resources/agent/index.ts | 8 ++
tests/api-resources/agent/agent_.test.ts | 63 +++++++++++
6 files changed, 248 insertions(+), 4 deletions(-)
create mode 100644 src/resources/agent/agent_.ts
create mode 100644 tests/api-resources/agent/agent_.test.ts
diff --git a/.stats.yml b/.stats.yml
index 6163321..f4077c2 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 15
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-252ab435934e85d5f76957188c64906abf76a0351c5861383327cb1297a2ac8a.yml
-openapi_spec_hash: ed801bb30428c1c66cb0af97e3f6ee9c
-config_hash: 253e4b5ca01236d448980a78491c17c5
+configured_endpoints: 19
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-d8d008dde648ff6cf158203be9805315cf281f1f354a81bfc38c3eaf58952999.yml
+openapi_spec_hash: 4e16bd26f8ac5f53ca2e663aabc6a1d1
+config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/api.md b/api.md
index 9d85823..e7d79b1 100644
--- a/api.md
+++ b/api.md
@@ -60,6 +60,22 @@ Methods:
- client.agent.schedules.pause(scheduleID) -> ScheduledAgentItem
- client.agent.schedules.resume(scheduleID) -> ScheduledAgentItem
+## Agent
+
+Types:
+
+- AgentResponse
+- CreateAgentRequest
+- ListAgentIdentitiesResponse
+- UpdateAgentRequest
+
+Methods:
+
+- client.agent.agent.create({ ...params }) -> AgentResponse
+- client.agent.agent.update(uid, { ...params }) -> AgentResponse
+- client.agent.agent.list() -> ListAgentIdentitiesResponse
+- client.agent.agent.delete(uid) -> void
+
## Sessions
Types:
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 897d3e1..1bfebfa 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -2,6 +2,16 @@
import { APIResource } from '../../core/resource';
import * as AgentAPI from './agent';
+import * as AgentAgentAPI from './agent_';
+import {
+ Agent as AgentAPIAgent,
+ AgentCreateParams,
+ AgentResponse,
+ AgentUpdateParams,
+ CreateAgentRequest,
+ ListAgentIdentitiesResponse,
+ UpdateAgentRequest,
+} from './agent_';
import * as RunsAPI from './runs';
import {
ArtifactItem,
@@ -35,6 +45,7 @@ import { path } from '../../internal/utils/path';
export class Agent extends APIResource {
runs: RunsAPI.Runs = new RunsAPI.Runs(this._client);
schedules: SchedulesAPI.Schedules = new SchedulesAPI.Schedules(this._client);
+ agent: AgentAgentAPI.Agent = new AgentAgentAPI.Agent(this._client);
sessions: SessionsAPI.Sessions = new SessionsAPI.Sessions(this._client);
/**
@@ -1019,6 +1030,7 @@ export namespace AgentRunParams {
Agent.Runs = Runs;
Agent.Schedules = Schedules;
+Agent.Agent = AgentAPIAgent;
Agent.Sessions = Sessions;
export declare namespace Agent {
@@ -1064,5 +1076,15 @@ export declare namespace Agent {
type ScheduleUpdateParams as ScheduleUpdateParams,
};
+ export {
+ AgentAPIAgent as Agent,
+ type AgentResponse as AgentResponse,
+ type CreateAgentRequest as CreateAgentRequest,
+ type ListAgentIdentitiesResponse as ListAgentIdentitiesResponse,
+ type UpdateAgentRequest as UpdateAgentRequest,
+ type AgentCreateParams as AgentCreateParams,
+ type AgentUpdateParams as AgentUpdateParams,
+ };
+
export { Sessions as Sessions, type SessionCheckRedirectResponse as SessionCheckRedirectResponse };
}
diff --git a/src/resources/agent/agent_.ts b/src/resources/agent/agent_.ts
new file mode 100644
index 0000000..8256155
--- /dev/null
+++ b/src/resources/agent/agent_.ts
@@ -0,0 +1,135 @@
+// 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 { buildHeaders } from '../../internal/headers';
+import { RequestOptions } from '../../internal/request-options';
+import { path } from '../../internal/utils/path';
+
+/**
+ * Operations for running and managing cloud agents
+ */
+export class Agent extends APIResource {
+ /**
+ * Create a new agent for the caller's team. Agents can be used as the execution
+ * principal for team-owned runs.
+ *
+ * @example
+ * ```ts
+ * const agentResponse = await client.agent.agent.create({
+ * name: 'name',
+ * });
+ * ```
+ */
+ create(body: AgentCreateParams, options?: RequestOptions): APIPromise {
+ return this._client.post('/agent/identities', { body, ...options });
+ }
+
+ /**
+ * Update an existing agent.
+ *
+ * @example
+ * ```ts
+ * const agentResponse = await client.agent.agent.update(
+ * 'uid',
+ * );
+ * ```
+ */
+ update(uid: string, body: AgentUpdateParams, options?: RequestOptions): APIPromise {
+ return this._client.put(path`/agent/identities/${uid}`, { body, ...options });
+ }
+
+ /**
+ * List all agents for the caller's team. Each agent includes an `available` flag
+ * indicating whether it is within the team's plan limit and may be used for runs.
+ *
+ * @example
+ * ```ts
+ * const listAgentIdentitiesResponse =
+ * await client.agent.agent.list();
+ * ```
+ */
+ list(options?: RequestOptions): APIPromise {
+ return this._client.get('/agent/identities', options);
+ }
+
+ /**
+ * Delete an agent. All API keys associated with the agent are deleted atomically.
+ *
+ * @example
+ * ```ts
+ * await client.agent.agent.delete('uid');
+ * ```
+ */
+ delete(uid: string, options?: RequestOptions): APIPromise {
+ return this._client.delete(path`/agent/identities/${uid}`, {
+ ...options,
+ headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
+ });
+ }
+}
+
+export interface AgentResponse {
+ /**
+ * Whether this agent is within the team's plan limit and can be used for runs
+ */
+ available: boolean;
+
+ /**
+ * When the agent was created (RFC3339)
+ */
+ created_at: string;
+
+ /**
+ * Name of the agent
+ */
+ name: string;
+
+ /**
+ * Unique identifier for the agent
+ */
+ uid: string;
+}
+
+export interface CreateAgentRequest {
+ /**
+ * A name for the agent
+ */
+ name: string;
+}
+
+export interface ListAgentIdentitiesResponse {
+ agents: Array;
+}
+
+export interface UpdateAgentRequest {
+ /**
+ * The new name for the agent
+ */
+ name?: string;
+}
+
+export interface AgentCreateParams {
+ /**
+ * A name for the agent
+ */
+ name: string;
+}
+
+export interface AgentUpdateParams {
+ /**
+ * The new name for the agent
+ */
+ name?: string;
+}
+
+export declare namespace Agent {
+ export {
+ type AgentResponse as AgentResponse,
+ type CreateAgentRequest as CreateAgentRequest,
+ type ListAgentIdentitiesResponse as ListAgentIdentitiesResponse,
+ type UpdateAgentRequest as UpdateAgentRequest,
+ type AgentCreateParams as AgentCreateParams,
+ type AgentUpdateParams as AgentUpdateParams,
+ };
+}
diff --git a/src/resources/agent/index.ts b/src/resources/agent/index.ts
index 724f8b9..efd188f 100644
--- a/src/resources/agent/index.ts
+++ b/src/resources/agent/index.ts
@@ -41,3 +41,11 @@ export {
type ScheduleUpdateParams,
} from './schedules';
export { Sessions, type SessionCheckRedirectResponse } from './sessions';
+export {
+ type AgentResponse,
+ type CreateAgentRequest,
+ type ListAgentIdentitiesResponse,
+ type UpdateAgentRequest,
+ type AgentCreateParams,
+ type AgentUpdateParams,
+} from './agent_';
diff --git a/tests/api-resources/agent/agent_.test.ts b/tests/api-resources/agent/agent_.test.ts
new file mode 100644
index 0000000..58d707f
--- /dev/null
+++ b/tests/api-resources/agent/agent_.test.ts
@@ -0,0 +1,63 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import OzAPI from 'oz-agent-sdk';
+
+const client = new OzAPI({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource agent', () => {
+ // Mock server tests are disabled
+ test.skip('create: only required params', async () => {
+ const responsePromise = client.agent.agent.create({ name: 'name' });
+ 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.agent.agent.create({ name: 'name' });
+ });
+
+ // Mock server tests are disabled
+ test.skip('update', async () => {
+ const responsePromise = client.agent.agent.update('uid', {});
+ 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.agent.agent.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('delete', async () => {
+ const responsePromise = client.agent.agent.delete('uid');
+ 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 a33e8e1308ddb9fe2554892584d5c1998dc67049 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 17 Apr 2026 20:16:19 +0000
Subject: [PATCH 08/19] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index f4077c2..fd4484e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-d8d008dde648ff6cf158203be9805315cf281f1f354a81bfc38c3eaf58952999.yml
-openapi_spec_hash: 4e16bd26f8ac5f53ca2e663aabc6a1d1
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-caba3084bc4ae52a6847df96dd0f8fe0a3b2bc9801ff4d2935092ae7e2c794f7.yml
+openapi_spec_hash: d3dd12a5a9bffb132239a2a206890602
config_hash: c5fc921cc04f541a85f92299f365eba6
From 979efa5f15d65451eebb8020a8b72e02f16fe3eb Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Apr 2026 16:25:12 +0000
Subject: [PATCH 09/19] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index fd4484e..13fbe4a 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-caba3084bc4ae52a6847df96dd0f8fe0a3b2bc9801ff4d2935092ae7e2c794f7.yml
-openapi_spec_hash: d3dd12a5a9bffb132239a2a206890602
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-4db59eaf2017b748c39a5690eeec7d7a4c37b6358c46c9223c4e4fb03e7d6897.yml
+openapi_spec_hash: e0d929d48abff1f167b0d7c034b430de
config_hash: c5fc921cc04f541a85f92299f365eba6
From 4cb146ccb9e0c03c84fc58bfc0913ac80de798e0 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Apr 2026 19:45:30 +0000
Subject: [PATCH 10/19] feat: Add API support for public access on oz session
link
---
.stats.yml | 4 +--
src/resources/agent/agent.ts | 31 +++++++++++++++++++++
tests/api-resources/agent/schedules.test.ts | 2 ++
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 13fbe4a..5651ce9 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-4db59eaf2017b748c39a5690eeec7d7a4c37b6358c46c9223c4e4fb03e7d6897.yml
-openapi_spec_hash: e0d929d48abff1f167b0d7c034b430de
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-a3668b4e18010f399c438348f52d536f65eb30027149e8860fa0c92242e19027.yml
+openapi_spec_hash: 5a89788631afcdccbdc361645c9a6c80
config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 1bfebfa..9699cb4 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -257,6 +257,16 @@ export interface AmbientAgentConfig {
*/
name?: string;
+ /**
+ * Configures sharing behavior for the run's shared session. When set, the worker
+ * emits `--share public:` and the bundled Warp client applies an
+ * anyone-with-link ACL to the shared session once it has bootstrapped. The same
+ * ACL is mirrored onto the backing conversation so link viewers can read the
+ * conversation without being on the run's team. Subject to the workspace-level
+ * anyone-with-link sharing setting.
+ */
+ session_sharing?: AmbientAgentConfig.SessionSharing;
+
/**
* Skill specification identifying which agent skill to use. Format:
* "{owner}/{repo}:{skill_path}" Example:
@@ -299,6 +309,27 @@ export namespace AmbientAgentConfig {
*/
claude_auth_secret_name?: string;
}
+
+ /**
+ * Configures sharing behavior for the run's shared session. When set, the worker
+ * emits `--share public:` and the bundled Warp client applies an
+ * anyone-with-link ACL to the shared session once it has bootstrapped. The same
+ * ACL is mirrored onto the backing conversation so link viewers can read the
+ * conversation without being on the run's team. Subject to the workspace-level
+ * anyone-with-link sharing setting.
+ */
+ export interface SessionSharing {
+ /**
+ * Grants anyone-with-link access at the specified level to the run's shared
+ * session and backing conversation.
+ *
+ * - VIEWER: link viewers can read the session and conversation.
+ * - EDITOR: link viewers can also interact with the session. Anonymous
+ * (unauthenticated) reads are not supported in this release; link viewers must
+ * still be authenticated Warp users.
+ */
+ public_access?: 'VIEWER' | 'EDITOR';
+ }
}
/**
diff --git a/tests/api-resources/agent/schedules.test.ts b/tests/api-resources/agent/schedules.test.ts
index dd5e2af..0256ee4 100644
--- a/tests/api-resources/agent/schedules.test.ts
+++ b/tests/api-resources/agent/schedules.test.ts
@@ -47,6 +47,7 @@ describe('resource schedules', () => {
},
model_id: 'model_id',
name: 'name',
+ session_sharing: { public_access: 'VIEWER' },
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
@@ -109,6 +110,7 @@ describe('resource schedules', () => {
},
model_id: 'model_id',
name: 'name',
+ session_sharing: { public_access: 'VIEWER' },
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
From aedca4a06790460e99ce7194cd7eba11e9769449 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Apr 2026 21:25:57 +0000
Subject: [PATCH 11/19] feat(api): api update
---
.stats.yml | 4 +--
src/resources/agent/agent.ts | 31 ---------------------
tests/api-resources/agent/schedules.test.ts | 2 --
3 files changed, 2 insertions(+), 35 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 5651ce9..fd4484e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-a3668b4e18010f399c438348f52d536f65eb30027149e8860fa0c92242e19027.yml
-openapi_spec_hash: 5a89788631afcdccbdc361645c9a6c80
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-caba3084bc4ae52a6847df96dd0f8fe0a3b2bc9801ff4d2935092ae7e2c794f7.yml
+openapi_spec_hash: d3dd12a5a9bffb132239a2a206890602
config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 9699cb4..1bfebfa 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -257,16 +257,6 @@ export interface AmbientAgentConfig {
*/
name?: string;
- /**
- * Configures sharing behavior for the run's shared session. When set, the worker
- * emits `--share public:` and the bundled Warp client applies an
- * anyone-with-link ACL to the shared session once it has bootstrapped. The same
- * ACL is mirrored onto the backing conversation so link viewers can read the
- * conversation without being on the run's team. Subject to the workspace-level
- * anyone-with-link sharing setting.
- */
- session_sharing?: AmbientAgentConfig.SessionSharing;
-
/**
* Skill specification identifying which agent skill to use. Format:
* "{owner}/{repo}:{skill_path}" Example:
@@ -309,27 +299,6 @@ export namespace AmbientAgentConfig {
*/
claude_auth_secret_name?: string;
}
-
- /**
- * Configures sharing behavior for the run's shared session. When set, the worker
- * emits `--share public:` and the bundled Warp client applies an
- * anyone-with-link ACL to the shared session once it has bootstrapped. The same
- * ACL is mirrored onto the backing conversation so link viewers can read the
- * conversation without being on the run's team. Subject to the workspace-level
- * anyone-with-link sharing setting.
- */
- export interface SessionSharing {
- /**
- * Grants anyone-with-link access at the specified level to the run's shared
- * session and backing conversation.
- *
- * - VIEWER: link viewers can read the session and conversation.
- * - EDITOR: link viewers can also interact with the session. Anonymous
- * (unauthenticated) reads are not supported in this release; link viewers must
- * still be authenticated Warp users.
- */
- public_access?: 'VIEWER' | 'EDITOR';
- }
}
/**
diff --git a/tests/api-resources/agent/schedules.test.ts b/tests/api-resources/agent/schedules.test.ts
index 0256ee4..dd5e2af 100644
--- a/tests/api-resources/agent/schedules.test.ts
+++ b/tests/api-resources/agent/schedules.test.ts
@@ -47,7 +47,6 @@ describe('resource schedules', () => {
},
model_id: 'model_id',
name: 'name',
- session_sharing: { public_access: 'VIEWER' },
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
@@ -110,7 +109,6 @@ describe('resource schedules', () => {
},
model_id: 'model_id',
name: 'name',
- session_sharing: { public_access: 'VIEWER' },
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
From 272c4604fc764ca8e844cbbdf9b3adea785bf378 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 21 Apr 2026 21:33:49 +0000
Subject: [PATCH 12/19] feat(api): api update
---
.stats.yml | 4 +--
src/resources/agent/agent.ts | 31 +++++++++++++++++++++
tests/api-resources/agent/schedules.test.ts | 2 ++
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index fd4484e..54a3931 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-caba3084bc4ae52a6847df96dd0f8fe0a3b2bc9801ff4d2935092ae7e2c794f7.yml
-openapi_spec_hash: d3dd12a5a9bffb132239a2a206890602
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-256ff5878e3bbb3164f39342087829f5114c1918d51212668fe8a1f9c8151e4a.yml
+openapi_spec_hash: 900f64d8c755ef60e047b63fe23ace66
config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 1bfebfa..9699cb4 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -257,6 +257,16 @@ export interface AmbientAgentConfig {
*/
name?: string;
+ /**
+ * Configures sharing behavior for the run's shared session. When set, the worker
+ * emits `--share public:` and the bundled Warp client applies an
+ * anyone-with-link ACL to the shared session once it has bootstrapped. The same
+ * ACL is mirrored onto the backing conversation so link viewers can read the
+ * conversation without being on the run's team. Subject to the workspace-level
+ * anyone-with-link sharing setting.
+ */
+ session_sharing?: AmbientAgentConfig.SessionSharing;
+
/**
* Skill specification identifying which agent skill to use. Format:
* "{owner}/{repo}:{skill_path}" Example:
@@ -299,6 +309,27 @@ export namespace AmbientAgentConfig {
*/
claude_auth_secret_name?: string;
}
+
+ /**
+ * Configures sharing behavior for the run's shared session. When set, the worker
+ * emits `--share public:` and the bundled Warp client applies an
+ * anyone-with-link ACL to the shared session once it has bootstrapped. The same
+ * ACL is mirrored onto the backing conversation so link viewers can read the
+ * conversation without being on the run's team. Subject to the workspace-level
+ * anyone-with-link sharing setting.
+ */
+ export interface SessionSharing {
+ /**
+ * Grants anyone-with-link access at the specified level to the run's shared
+ * session and backing conversation.
+ *
+ * - VIEWER: link viewers can read the session and conversation.
+ * - EDITOR: link viewers can also interact with the session. Anonymous
+ * (unauthenticated) reads are not supported in this release; link viewers must
+ * still be authenticated Warp users.
+ */
+ public_access?: 'VIEWER' | 'EDITOR';
+ }
}
/**
diff --git a/tests/api-resources/agent/schedules.test.ts b/tests/api-resources/agent/schedules.test.ts
index dd5e2af..0256ee4 100644
--- a/tests/api-resources/agent/schedules.test.ts
+++ b/tests/api-resources/agent/schedules.test.ts
@@ -47,6 +47,7 @@ describe('resource schedules', () => {
},
model_id: 'model_id',
name: 'name',
+ session_sharing: { public_access: 'VIEWER' },
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
@@ -109,6 +110,7 @@ describe('resource schedules', () => {
},
model_id: 'model_id',
name: 'name',
+ session_sharing: { public_access: 'VIEWER' },
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
From 1c52dcf1aa971ee4dbd8b672e8dff5c7765d8148 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Apr 2026 14:03:01 +0000
Subject: [PATCH 13/19] chore(internal): more robust bootstrap script
---
scripts/bootstrap | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/bootstrap b/scripts/bootstrap
index 2bb3c94..3a8293a 100755
--- a/scripts/bootstrap
+++ b/scripts/bootstrap
@@ -4,7 +4,7 @@ set -e
cd "$(dirname "$0")/.."
-if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then
+if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then
brew bundle check >/dev/null 2>&1 || {
echo -n "==> Install Homebrew dependencies? (y/N): "
read -r response
From a40afa57024e4c08626b7fe6b46adb6db0d326b7 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Apr 2026 23:35:33 +0000
Subject: [PATCH 14/19] feat: Add Gemini as a third-party Oz harness.
---
.stats.yml | 4 ++--
src/resources/agent/agent.ts | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 54a3931..caf5a6c 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-256ff5878e3bbb3164f39342087829f5114c1918d51212668fe8a1f9c8151e4a.yml
-openapi_spec_hash: 900f64d8c755ef60e047b63fe23ace66
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-45c55f7358f117c3291cb54717a97ccb1e7a55691a9cb7541d13064b630030ee.yml
+openapi_spec_hash: b50f477080595c2f0b9b4378b2ac774a
config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 9699cb4..52a3a30 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -293,8 +293,9 @@ export namespace AmbientAgentConfig {
*
* - oz: Warp's built-in harness (default)
* - claude: Claude Code harness
+ * - gemini: Gemini CLI harness
*/
- type?: 'oz' | 'claude';
+ type?: 'oz' | 'claude' | 'gemini';
}
/**
From bc0d237a92192f262c26b5ab4ec3544e8eb508c1 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 17:25:46 +0000
Subject: [PATCH 15/19] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index caf5a6c..c09cf00 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-45c55f7358f117c3291cb54717a97ccb1e7a55691a9cb7541d13064b630030ee.yml
-openapi_spec_hash: b50f477080595c2f0b9b4378b2ac774a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-348bf98eecccd80255fdcee166b5eb385d8d9743811d080f94a1ec33337abc48.yml
+openapi_spec_hash: e192bff5e5b54b3a763136e6cbd70e76
config_hash: c5fc921cc04f541a85f92299f365eba6
From 1134f2b93bb30785866bc67831b75182d65c6a45 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 17:31:57 +0000
Subject: [PATCH 16/19] feat: implement server-side cloud-to-cloud handoff for
agent follow-ups (REMOTE-1290)
---
.stats.yml | 8 +--
api.md | 4 ++
src/resources/agent/agent.ts | 6 ++
src/resources/agent/index.ts | 3 +
src/resources/agent/runs.ts | 94 ++++++++++++++++++++++++++
tests/api-resources/agent/runs.test.ts | 29 ++++++++
6 files changed, 140 insertions(+), 4 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index c09cf00..c37cbba 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 19
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-348bf98eecccd80255fdcee166b5eb385d8d9743811d080f94a1ec33337abc48.yml
-openapi_spec_hash: e192bff5e5b54b3a763136e6cbd70e76
-config_hash: c5fc921cc04f541a85f92299f365eba6
+configured_endpoints: 21
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-ba0eb0c9006df2bc1ad77d365586cdcc4ae62565aff5a7b746ba613fb3fe0889.yml
+openapi_spec_hash: 3ed3c07bf50eba4f02cbbbed358f5761
+config_hash: b893614299dd99b07446072ade3737d1
diff --git a/api.md b/api.md
index e7d79b1..504819b 100644
--- a/api.md
+++ b/api.md
@@ -34,12 +34,16 @@ Types:
- RunSourceType
- RunState
- RunCancelResponse
+- RunListHandoffAttachmentsResponse
+- RunSubmitFollowupResponse
Methods:
- client.agent.runs.retrieve(runID) -> RunItem
- client.agent.runs.list({ ...params }) -> RunItemsRunsCursorPage
- client.agent.runs.cancel(runID) -> string
+- client.agent.runs.listHandoffAttachments(runID) -> RunListHandoffAttachmentsResponse
+- client.agent.runs.submitFollowup(runID, { ...params }) -> unknown
## Schedules
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 52a3a30..8b48373 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -18,9 +18,12 @@ import {
RunCancelResponse,
RunItem,
RunItemsRunsCursorPage,
+ RunListHandoffAttachmentsResponse,
RunListParams,
RunSourceType,
RunState,
+ RunSubmitFollowupParams,
+ RunSubmitFollowupResponse,
Runs,
} from './runs';
import * as SchedulesAPI from './schedules';
@@ -1094,8 +1097,11 @@ export declare namespace Agent {
type RunSourceType as RunSourceType,
type RunState as RunState,
type RunCancelResponse as RunCancelResponse,
+ type RunListHandoffAttachmentsResponse as RunListHandoffAttachmentsResponse,
+ type RunSubmitFollowupResponse as RunSubmitFollowupResponse,
type RunItemsRunsCursorPage as RunItemsRunsCursorPage,
type RunListParams as RunListParams,
+ type RunSubmitFollowupParams as RunSubmitFollowupParams,
};
export {
diff --git a/src/resources/agent/index.ts b/src/resources/agent/index.ts
index efd188f..6f3a9f8 100644
--- a/src/resources/agent/index.ts
+++ b/src/resources/agent/index.ts
@@ -28,7 +28,10 @@ export {
type RunSourceType,
type RunState,
type RunCancelResponse,
+ type RunListHandoffAttachmentsResponse,
+ type RunSubmitFollowupResponse,
type RunListParams,
+ type RunSubmitFollowupParams,
type RunItemsRunsCursorPage,
} from './runs';
export {
diff --git a/src/resources/agent/runs.ts b/src/resources/agent/runs.ts
index e575b54..fdf964f 100644
--- a/src/resources/agent/runs.ts
+++ b/src/resources/agent/runs.ts
@@ -59,6 +59,50 @@ export class Runs extends APIResource {
cancel(runID: string, options?: RequestOptions): APIPromise {
return this._client.post(path`/agent/runs/${runID}/cancel`, options);
}
+
+ /**
+ * Return fresh presigned download URLs for handoff snapshot files uploaded by the
+ * latest ended execution of this run. An empty list is returned when no ended
+ * execution exists or no snapshot files were uploaded.
+ *
+ * This endpoint is useful for third-party harnesses that want to download the
+ * snapshot files produced by a previous execution before starting a handoff
+ * execution themselves.
+ *
+ * @example
+ * ```ts
+ * const response =
+ * await client.agent.runs.listHandoffAttachments('runId');
+ * ```
+ */
+ listHandoffAttachments(
+ runID: string,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.get(path`/agent/runs/${runID}/handoff/attachments`, options);
+ }
+
+ /**
+ * Send a follow-up message to an existing run. The server transparently routes the
+ * message based on the current state of the run (still queued, actively running,
+ * or ended). A 200 response means the follow-up was accepted; updated run state
+ * can be observed via `GET /agent/runs/{runId}`.
+ *
+ * @example
+ * ```ts
+ * const response = await client.agent.runs.submitFollowup(
+ * 'runId',
+ * { message: 'message' },
+ * );
+ * ```
+ */
+ submitFollowup(
+ runID: string,
+ body: RunSubmitFollowupParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.post(path`/agent/runs/${runID}/followups`, { body, ...options });
+ }
}
export type RunItemsRunsCursorPage = RunsCursorPage;
@@ -534,6 +578,46 @@ export type RunState =
*/
export type RunCancelResponse = string;
+/**
+ * Response body for listing handoff snapshot attachments.
+ */
+export interface RunListHandoffAttachmentsResponse {
+ /**
+ * Handoff snapshot attachments exposed by the latest ended execution. Empty when
+ * no ended execution exists or no files were uploaded.
+ */
+ attachments: Array;
+}
+
+export namespace RunListHandoffAttachmentsResponse {
+ /**
+ * A handoff snapshot attachment exposed for download.
+ */
+ export interface Attachment {
+ /**
+ * Identifier for the snapshot attachment within the run.
+ */
+ attachment_id: string;
+
+ /**
+ * Time-limited signed URL to download the snapshot attachment.
+ */
+ download_url: string;
+
+ /**
+ * Original filename of the snapshot attachment.
+ */
+ filename: string;
+
+ /**
+ * MIME type of the snapshot attachment, if known.
+ */
+ mime_type?: string;
+ }
+}
+
+export type RunSubmitFollowupResponse = unknown;
+
export interface RunListParams extends RunsCursorPageParams {
/**
* Filter runs by ancestor run ID. The referenced run must exist and be accessible
@@ -634,6 +718,13 @@ export interface RunListParams extends RunsCursorPageParams {
updated_after?: string;
}
+export interface RunSubmitFollowupParams {
+ /**
+ * The follow-up message to send to the run.
+ */
+ message: string;
+}
+
export declare namespace Runs {
export {
type ArtifactItem as ArtifactItem,
@@ -641,7 +732,10 @@ export declare namespace Runs {
type RunSourceType as RunSourceType,
type RunState as RunState,
type RunCancelResponse as RunCancelResponse,
+ type RunListHandoffAttachmentsResponse as RunListHandoffAttachmentsResponse,
+ type RunSubmitFollowupResponse as RunSubmitFollowupResponse,
type RunItemsRunsCursorPage as RunItemsRunsCursorPage,
type RunListParams as RunListParams,
+ type RunSubmitFollowupParams as RunSubmitFollowupParams,
};
}
diff --git a/tests/api-resources/agent/runs.test.ts b/tests/api-resources/agent/runs.test.ts
index adc0f33..c1a4e11 100644
--- a/tests/api-resources/agent/runs.test.ts
+++ b/tests/api-resources/agent/runs.test.ts
@@ -75,4 +75,33 @@ describe('resource runs', () => {
expect(dataAndResponse.data).toBe(response);
expect(dataAndResponse.response).toBe(rawResponse);
});
+
+ // Mock server tests are disabled
+ test.skip('listHandoffAttachments', async () => {
+ const responsePromise = client.agent.runs.listHandoffAttachments('runId');
+ 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('submitFollowup: only required params', async () => {
+ const responsePromise = client.agent.runs.submitFollowup('runId', { message: 'message' });
+ 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('submitFollowup: required and optional params', async () => {
+ const response = await client.agent.runs.submitFollowup('runId', { message: 'message' });
+ });
});
From 5f9b8bc3957e30ac32b1719ac58d098db375c94c Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 18:22:00 +0000
Subject: [PATCH 17/19] feat: Accept and persist executor on schedule and
integration create/update APIs
---
.stats.yml | 4 ++--
src/resources/agent/schedules.ts | 12 ++++++++++++
tests/api-resources/agent/schedules.test.ts | 2 ++
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index c37cbba..ebdcb69 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 21
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-ba0eb0c9006df2bc1ad77d365586cdcc4ae62565aff5a7b746ba613fb3fe0889.yml
-openapi_spec_hash: 3ed3c07bf50eba4f02cbbbed358f5761
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-0610670bab7ee6c6c6630c94cf22162d57784544b4ff3acd7f1b9a9b405f71b4.yml
+openapi_spec_hash: 53fed4f8bfe081ebe46f892dd6f1f501
config_hash: b893614299dd99b07446072ade3737d1
diff --git a/src/resources/agent/schedules.ts b/src/resources/agent/schedules.ts
index 82dc8dd..0e399e3 100644
--- a/src/resources/agent/schedules.ts
+++ b/src/resources/agent/schedules.ts
@@ -234,6 +234,12 @@ export interface ScheduleCreateParams {
*/
agent_config?: AgentAPI.AmbientAgentConfig;
+ /**
+ * Agent UID to use as the execution principal for this schedule. Only valid for
+ * team-owned schedules.
+ */
+ agent_uid?: string;
+
/**
* Whether the schedule should be active immediately
*/
@@ -273,6 +279,12 @@ export interface ScheduleUpdateParams {
*/
agent_config?: AgentAPI.AmbientAgentConfig;
+ /**
+ * Agent UID to use as the execution principal for this schedule. Only valid for
+ * team-owned schedules.
+ */
+ agent_uid?: string;
+
/**
* The prompt/instruction for the agent to execute. Required unless
* agent_config.skill_spec is provided.
diff --git a/tests/api-resources/agent/schedules.test.ts b/tests/api-resources/agent/schedules.test.ts
index 0256ee4..ccdfd22 100644
--- a/tests/api-resources/agent/schedules.test.ts
+++ b/tests/api-resources/agent/schedules.test.ts
@@ -51,6 +51,7 @@ describe('resource schedules', () => {
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
+ agent_uid: 'agent_uid',
enabled: true,
prompt: 'Review open pull requests and provide feedback',
team: true,
@@ -114,6 +115,7 @@ describe('resource schedules', () => {
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
+ agent_uid: 'agent_uid',
prompt: 'prompt',
});
});
From c8c6e74fc51ae73bf32104dd482ad2202bf34849 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 22:00:42 +0000
Subject: [PATCH 18/19] feat(api): api update
---
.stats.yml | 8 +-
api.md | 4 -
src/resources/agent/agent.ts | 6 --
src/resources/agent/index.ts | 3 -
src/resources/agent/runs.ts | 94 ---------------------
src/resources/agent/schedules.ts | 12 ---
tests/api-resources/agent/runs.test.ts | 29 -------
tests/api-resources/agent/schedules.test.ts | 2 -
8 files changed, 4 insertions(+), 154 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ebdcb69..c09cf00 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 21
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-0610670bab7ee6c6c6630c94cf22162d57784544b4ff3acd7f1b9a9b405f71b4.yml
-openapi_spec_hash: 53fed4f8bfe081ebe46f892dd6f1f501
-config_hash: b893614299dd99b07446072ade3737d1
+configured_endpoints: 19
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/warp-bnavetta%2Fwarp-api-348bf98eecccd80255fdcee166b5eb385d8d9743811d080f94a1ec33337abc48.yml
+openapi_spec_hash: e192bff5e5b54b3a763136e6cbd70e76
+config_hash: c5fc921cc04f541a85f92299f365eba6
diff --git a/api.md b/api.md
index 504819b..e7d79b1 100644
--- a/api.md
+++ b/api.md
@@ -34,16 +34,12 @@ Types:
- RunSourceType
- RunState
- RunCancelResponse
-- RunListHandoffAttachmentsResponse
-- RunSubmitFollowupResponse
Methods:
- client.agent.runs.retrieve(runID) -> RunItem
- client.agent.runs.list({ ...params }) -> RunItemsRunsCursorPage
- client.agent.runs.cancel(runID) -> string
-- client.agent.runs.listHandoffAttachments(runID) -> RunListHandoffAttachmentsResponse
-- client.agent.runs.submitFollowup(runID, { ...params }) -> unknown
## Schedules
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 8b48373..52a3a30 100644
--- a/src/resources/agent/agent.ts
+++ b/src/resources/agent/agent.ts
@@ -18,12 +18,9 @@ import {
RunCancelResponse,
RunItem,
RunItemsRunsCursorPage,
- RunListHandoffAttachmentsResponse,
RunListParams,
RunSourceType,
RunState,
- RunSubmitFollowupParams,
- RunSubmitFollowupResponse,
Runs,
} from './runs';
import * as SchedulesAPI from './schedules';
@@ -1097,11 +1094,8 @@ export declare namespace Agent {
type RunSourceType as RunSourceType,
type RunState as RunState,
type RunCancelResponse as RunCancelResponse,
- type RunListHandoffAttachmentsResponse as RunListHandoffAttachmentsResponse,
- type RunSubmitFollowupResponse as RunSubmitFollowupResponse,
type RunItemsRunsCursorPage as RunItemsRunsCursorPage,
type RunListParams as RunListParams,
- type RunSubmitFollowupParams as RunSubmitFollowupParams,
};
export {
diff --git a/src/resources/agent/index.ts b/src/resources/agent/index.ts
index 6f3a9f8..efd188f 100644
--- a/src/resources/agent/index.ts
+++ b/src/resources/agent/index.ts
@@ -28,10 +28,7 @@ export {
type RunSourceType,
type RunState,
type RunCancelResponse,
- type RunListHandoffAttachmentsResponse,
- type RunSubmitFollowupResponse,
type RunListParams,
- type RunSubmitFollowupParams,
type RunItemsRunsCursorPage,
} from './runs';
export {
diff --git a/src/resources/agent/runs.ts b/src/resources/agent/runs.ts
index fdf964f..e575b54 100644
--- a/src/resources/agent/runs.ts
+++ b/src/resources/agent/runs.ts
@@ -59,50 +59,6 @@ export class Runs extends APIResource {
cancel(runID: string, options?: RequestOptions): APIPromise {
return this._client.post(path`/agent/runs/${runID}/cancel`, options);
}
-
- /**
- * Return fresh presigned download URLs for handoff snapshot files uploaded by the
- * latest ended execution of this run. An empty list is returned when no ended
- * execution exists or no snapshot files were uploaded.
- *
- * This endpoint is useful for third-party harnesses that want to download the
- * snapshot files produced by a previous execution before starting a handoff
- * execution themselves.
- *
- * @example
- * ```ts
- * const response =
- * await client.agent.runs.listHandoffAttachments('runId');
- * ```
- */
- listHandoffAttachments(
- runID: string,
- options?: RequestOptions,
- ): APIPromise {
- return this._client.get(path`/agent/runs/${runID}/handoff/attachments`, options);
- }
-
- /**
- * Send a follow-up message to an existing run. The server transparently routes the
- * message based on the current state of the run (still queued, actively running,
- * or ended). A 200 response means the follow-up was accepted; updated run state
- * can be observed via `GET /agent/runs/{runId}`.
- *
- * @example
- * ```ts
- * const response = await client.agent.runs.submitFollowup(
- * 'runId',
- * { message: 'message' },
- * );
- * ```
- */
- submitFollowup(
- runID: string,
- body: RunSubmitFollowupParams,
- options?: RequestOptions,
- ): APIPromise {
- return this._client.post(path`/agent/runs/${runID}/followups`, { body, ...options });
- }
}
export type RunItemsRunsCursorPage = RunsCursorPage;
@@ -578,46 +534,6 @@ export type RunState =
*/
export type RunCancelResponse = string;
-/**
- * Response body for listing handoff snapshot attachments.
- */
-export interface RunListHandoffAttachmentsResponse {
- /**
- * Handoff snapshot attachments exposed by the latest ended execution. Empty when
- * no ended execution exists or no files were uploaded.
- */
- attachments: Array;
-}
-
-export namespace RunListHandoffAttachmentsResponse {
- /**
- * A handoff snapshot attachment exposed for download.
- */
- export interface Attachment {
- /**
- * Identifier for the snapshot attachment within the run.
- */
- attachment_id: string;
-
- /**
- * Time-limited signed URL to download the snapshot attachment.
- */
- download_url: string;
-
- /**
- * Original filename of the snapshot attachment.
- */
- filename: string;
-
- /**
- * MIME type of the snapshot attachment, if known.
- */
- mime_type?: string;
- }
-}
-
-export type RunSubmitFollowupResponse = unknown;
-
export interface RunListParams extends RunsCursorPageParams {
/**
* Filter runs by ancestor run ID. The referenced run must exist and be accessible
@@ -718,13 +634,6 @@ export interface RunListParams extends RunsCursorPageParams {
updated_after?: string;
}
-export interface RunSubmitFollowupParams {
- /**
- * The follow-up message to send to the run.
- */
- message: string;
-}
-
export declare namespace Runs {
export {
type ArtifactItem as ArtifactItem,
@@ -732,10 +641,7 @@ export declare namespace Runs {
type RunSourceType as RunSourceType,
type RunState as RunState,
type RunCancelResponse as RunCancelResponse,
- type RunListHandoffAttachmentsResponse as RunListHandoffAttachmentsResponse,
- type RunSubmitFollowupResponse as RunSubmitFollowupResponse,
type RunItemsRunsCursorPage as RunItemsRunsCursorPage,
type RunListParams as RunListParams,
- type RunSubmitFollowupParams as RunSubmitFollowupParams,
};
}
diff --git a/src/resources/agent/schedules.ts b/src/resources/agent/schedules.ts
index 0e399e3..82dc8dd 100644
--- a/src/resources/agent/schedules.ts
+++ b/src/resources/agent/schedules.ts
@@ -234,12 +234,6 @@ export interface ScheduleCreateParams {
*/
agent_config?: AgentAPI.AmbientAgentConfig;
- /**
- * Agent UID to use as the execution principal for this schedule. Only valid for
- * team-owned schedules.
- */
- agent_uid?: string;
-
/**
* Whether the schedule should be active immediately
*/
@@ -279,12 +273,6 @@ export interface ScheduleUpdateParams {
*/
agent_config?: AgentAPI.AmbientAgentConfig;
- /**
- * Agent UID to use as the execution principal for this schedule. Only valid for
- * team-owned schedules.
- */
- agent_uid?: string;
-
/**
* The prompt/instruction for the agent to execute. Required unless
* agent_config.skill_spec is provided.
diff --git a/tests/api-resources/agent/runs.test.ts b/tests/api-resources/agent/runs.test.ts
index c1a4e11..adc0f33 100644
--- a/tests/api-resources/agent/runs.test.ts
+++ b/tests/api-resources/agent/runs.test.ts
@@ -75,33 +75,4 @@ describe('resource runs', () => {
expect(dataAndResponse.data).toBe(response);
expect(dataAndResponse.response).toBe(rawResponse);
});
-
- // Mock server tests are disabled
- test.skip('listHandoffAttachments', async () => {
- const responsePromise = client.agent.runs.listHandoffAttachments('runId');
- 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('submitFollowup: only required params', async () => {
- const responsePromise = client.agent.runs.submitFollowup('runId', { message: 'message' });
- 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('submitFollowup: required and optional params', async () => {
- const response = await client.agent.runs.submitFollowup('runId', { message: 'message' });
- });
});
diff --git a/tests/api-resources/agent/schedules.test.ts b/tests/api-resources/agent/schedules.test.ts
index ccdfd22..0256ee4 100644
--- a/tests/api-resources/agent/schedules.test.ts
+++ b/tests/api-resources/agent/schedules.test.ts
@@ -51,7 +51,6 @@ describe('resource schedules', () => {
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
- agent_uid: 'agent_uid',
enabled: true,
prompt: 'Review open pull requests and provide feedback',
team: true,
@@ -115,7 +114,6 @@ describe('resource schedules', () => {
skill_spec: 'skill_spec',
worker_host: 'worker_host',
},
- agent_uid: 'agent_uid',
prompt: 'prompt',
});
});
From 2462fa8fc01fc6fc5fdc0aca0ad07b64fe21c2fb Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 22:01:05 +0000
Subject: [PATCH 19/19] release: 1.3.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 24 ++++++++++++++++++++++++
package.json | 2 +-
src/version.ts | 2 +-
4 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index c3f1463..96f1cd9 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "1.2.0"
+ ".": "1.3.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 54d72eb..700a1b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,29 @@
# Changelog
+## 1.3.0 (2026-04-23)
+
+Full Changelog: [v1.2.0...v1.3.0](https://github.com/warpdotdev/oz-sdk-typescript/compare/v1.2.0...v1.3.0)
+
+### Features
+
+* Accept and persist executor on schedule and integration create/update APIs ([5f9b8bc](https://github.com/warpdotdev/oz-sdk-typescript/commit/5f9b8bc3957e30ac32b1719ac58d098db375c94c))
+* Add API support for public access on oz session link ([4cb146c](https://github.com/warpdotdev/oz-sdk-typescript/commit/4cb146ccb9e0c03c84fc58bfc0913ac80de798e0))
+* Add Gemini as a third-party Oz harness. ([a40afa5](https://github.com/warpdotdev/oz-sdk-typescript/commit/a40afa57024e4c08626b7fe6b46adb6db0d326b7))
+* **api:** api update ([c8c6e74](https://github.com/warpdotdev/oz-sdk-typescript/commit/c8c6e74fc51ae73bf32104dd482ad2202bf34849))
+* **api:** api update ([272c460](https://github.com/warpdotdev/oz-sdk-typescript/commit/272c4604fc764ca8e844cbbdf9b3adea785bf378))
+* **api:** api update ([aedca4a](https://github.com/warpdotdev/oz-sdk-typescript/commit/aedca4a06790460e99ce7194cd7eba11e9769449))
+* **api:** api update ([b01e3a7](https://github.com/warpdotdev/oz-sdk-typescript/commit/b01e3a7535604d26079b1cbe00aca5cded1452e5))
+* **api:** api update ([5f82281](https://github.com/warpdotdev/oz-sdk-typescript/commit/5f82281f598ced615fb4349b76433f2b11f7e166))
+* **api:** api update ([b0a1504](https://github.com/warpdotdev/oz-sdk-typescript/commit/b0a1504a65ce72f232540eb69916bdd71bdabfe4))
+* **api:** api update ([5036b1b](https://github.com/warpdotdev/oz-sdk-typescript/commit/5036b1bb235dc35f844a85d269be889a82e852ca))
+* implement server-side cloud-to-cloud handoff for agent follow-ups (REMOTE-1290) ([1134f2b](https://github.com/warpdotdev/oz-sdk-typescript/commit/1134f2b93bb30785866bc67831b75182d65c6a45))
+* Update public API and graphql to support creating multiple service accounts and API keys ([1fa19c3](https://github.com/warpdotdev/oz-sdk-typescript/commit/1fa19c39375550cc1dfe4b7dd0bce5bb58361821))
+
+
+### Chores
+
+* **internal:** more robust bootstrap script ([1c52dcf](https://github.com/warpdotdev/oz-sdk-typescript/commit/1c52dcf1aa971ee4dbd8b672e8dff5c7765d8148))
+
## 1.2.0 (2026-04-15)
Full Changelog: [v1.1.1...v1.2.0](https://github.com/warpdotdev/oz-sdk-typescript/compare/v1.1.1...v1.2.0)
diff --git a/package.json b/package.json
index e12d139..eeb7e81 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "oz-agent-sdk",
- "version": "1.2.0",
+ "version": "1.3.0",
"description": "The official TypeScript library for the Oz API API",
"author": "Oz API <>",
"types": "dist/index.d.ts",
diff --git a/src/version.ts b/src/version.ts
index 54c8a47..39fa5bc 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '1.2.0'; // x-release-please-version
+export const VERSION = '1.3.0'; // x-release-please-version