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