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/.stats.yml b/.stats.yml
index 6163321..c09cf00 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-348bf98eecccd80255fdcee166b5eb385d8d9743811d080f94a1ec33337abc48.yml
+openapi_spec_hash: e192bff5e5b54b3a763136e6cbd70e76
+config_hash: c5fc921cc04f541a85f92299f365eba6
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/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/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/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
diff --git a/src/resources/agent/agent.ts b/src/resources/agent/agent.ts
index 897d3e1..52a3a30 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);
/**
@@ -246,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:
@@ -272,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';
}
/**
@@ -288,6 +310,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';
+ }
}
/**
@@ -1019,6 +1062,7 @@ export namespace AgentRunParams {
Agent.Runs = Runs;
Agent.Schedules = Schedules;
+Agent.Agent = AgentAPIAgent;
Agent.Sessions = Sessions;
export declare namespace Agent {
@@ -1064,5 +1108,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/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
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);
+ });
+});
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',
},