@ai-sdk/openai
Version:
The **[OpenAI provider](https://ai-sdk.dev/providers/ai-sdk-providers/openai)** for the [AI SDK](https://ai-sdk.dev/docs) contains language model support for the OpenAI chat and completion APIs and embedding model support for the OpenAI embeddings API.
1,261 lines (1,225 loc) • 38.4 kB
text/typescript
import { JSONSchema7 } from '@ai-sdk/provider';
import { InferSchema, lazySchema, zodSchema } from '@ai-sdk/provider-utils';
import { z } from 'zod/v4';
export type OpenAIResponsesInput = Array<OpenAIResponsesInputItem>;
export type OpenAIResponsesInputItem =
| OpenAIResponsesSystemMessage
| OpenAIResponsesUserMessage
| OpenAIResponsesAssistantMessage
| OpenAIResponsesFunctionCall
| OpenAIResponsesFunctionCallOutput
| OpenAIResponsesCustomToolCall
| OpenAIResponsesCustomToolCallOutput
| OpenAIResponsesMcpApprovalResponse
| OpenAIResponsesComputerCall
| OpenAIResponsesLocalShellCall
| OpenAIResponsesLocalShellCallOutput
| OpenAIResponsesShellCall
| OpenAIResponsesShellCallOutput
| OpenAIResponsesApplyPatchCall
| OpenAIResponsesApplyPatchCallOutput
| OpenAIResponsesReasoning
| OpenAIResponsesItemReference;
export type OpenAIResponsesIncludeValue =
| 'web_search_call.action.sources'
| 'code_interpreter_call.outputs'
| 'computer_call_output.output.image_url'
| 'file_search_call.results'
| 'message.input_image.image_url'
| 'message.output_text.logprobs'
| 'reasoning.encrypted_content';
export type OpenAIResponsesIncludeOptions =
| Array<OpenAIResponsesIncludeValue>
| undefined
| null;
export type OpenAIResponsesApplyPatchOperationDiffDeltaChunk = {
type: 'response.apply_patch_call_operation_diff.delta';
item_id: string;
output_index: number;
delta: string;
obfuscation?: string | null;
};
export type OpenAIResponsesApplyPatchOperationDiffDoneChunk = {
type: 'response.apply_patch_call_operation_diff.done';
item_id: string;
output_index: number;
diff: string;
};
export type OpenAIResponsesSystemMessage = {
role: 'system' | 'developer';
content: string;
};
export type OpenAIResponsesUserMessage = {
role: 'user';
content: Array<
| { type: 'input_text'; text: string }
| { type: 'input_image'; image_url: string }
| { type: 'input_image'; file_id: string }
| { type: 'input_file'; file_url: string }
| { type: 'input_file'; filename: string; file_data: string }
| { type: 'input_file'; file_id: string }
>;
};
export type OpenAIResponsesAssistantMessage = {
role: 'assistant';
content: Array<{ type: 'output_text'; text: string }>;
id?: string;
phase?: 'commentary' | 'final_answer' | null;
};
export type OpenAIResponsesFunctionCall = {
type: 'function_call';
call_id: string;
name: string;
arguments: string;
id?: string;
};
export type OpenAIResponsesFunctionCallOutput = {
type: 'function_call_output';
call_id: string;
output:
| string
| Array<
| { type: 'input_text'; text: string }
| { type: 'input_image'; image_url: string }
| { type: 'input_file'; filename: string; file_data: string }
>;
};
export type OpenAIResponsesCustomToolCall = {
type: 'custom_tool_call';
id?: string;
call_id: string;
name: string;
input: string;
};
export type OpenAIResponsesCustomToolCallOutput = {
type: 'custom_tool_call_output';
call_id: string;
output: OpenAIResponsesFunctionCallOutput['output'];
};
export type OpenAIResponsesMcpApprovalResponse = {
type: 'mcp_approval_response';
approval_request_id: string;
approve: boolean;
};
export type OpenAIResponsesComputerCall = {
type: 'computer_call';
id: string;
status?: string;
};
export type OpenAIResponsesLocalShellCall = {
type: 'local_shell_call';
id: string;
call_id: string;
action: {
type: 'exec';
command: string[];
timeout_ms?: number;
user?: string;
working_directory?: string;
env?: Record<string, string>;
};
};
export type OpenAIResponsesLocalShellCallOutput = {
type: 'local_shell_call_output';
call_id: string;
output: string;
};
/**
* Official OpenAI API Specifications: https://platform.openai.com/docs/api-reference/responses/object#responses-object-output-shell_tool_call
*/
export type OpenAIResponsesShellCall = {
type: 'shell_call';
id: string;
call_id: string;
status: 'in_progress' | 'completed' | 'incomplete';
action: {
commands: string[];
timeout_ms?: number;
max_output_length?: number;
};
};
export type OpenAIResponsesShellCallOutput = {
type: 'shell_call_output';
id?: string;
call_id: string;
status?: 'in_progress' | 'completed' | 'incomplete';
max_output_length?: number | null;
output: Array<{
stdout: string;
stderr: string;
outcome: { type: 'timeout' } | { type: 'exit'; exit_code: number };
}>;
};
export type OpenAIResponsesApplyPatchCall = {
type: 'apply_patch_call';
id?: string;
call_id: string;
status: 'in_progress' | 'completed';
operation:
| {
type: 'create_file';
path: string;
diff: string;
}
| {
type: 'delete_file';
path: string;
}
| {
type: 'update_file';
path: string;
diff: string;
};
};
export type OpenAIResponsesApplyPatchCallOutput = {
type: 'apply_patch_call_output';
call_id: string;
status: 'completed' | 'failed';
output?: string;
};
export type OpenAIResponsesItemReference = {
type: 'item_reference';
id: string;
};
/**
* A filter used to compare a specified attribute key to a given value using a defined comparison operation.
*/
export type OpenAIResponsesFileSearchToolComparisonFilter = {
/**
* The key to compare against the value.
*/
key: string;
/**
* Specifies the comparison operator: eq, ne, gt, gte, lt, lte, in, nin.
*/
type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin';
/**
* The value to compare against the attribute key; supports string, number, boolean, or array of string types.
*/
value: string | number | boolean | string[];
};
/**
* Combine multiple filters using and or or.
*/
export type OpenAIResponsesFileSearchToolCompoundFilter = {
/**
* Type of operation: and or or.
*/
type: 'and' | 'or';
/**
* Array of filters to combine. Items can be ComparisonFilter or CompoundFilter.
*/
filters: Array<
| OpenAIResponsesFileSearchToolComparisonFilter
| OpenAIResponsesFileSearchToolCompoundFilter
>;
};
export type OpenAIResponsesTool =
| {
type: 'function';
name: string;
description: string | undefined;
parameters: JSONSchema7;
strict?: boolean;
}
| {
type: 'apply_patch';
}
| {
type: 'web_search';
external_web_access: boolean | undefined;
filters: { allowed_domains: string[] | undefined } | undefined;
search_context_size: 'low' | 'medium' | 'high' | undefined;
user_location:
| {
type: 'approximate';
city?: string;
country?: string;
region?: string;
timezone?: string;
}
| undefined;
}
| {
type: 'web_search_preview';
search_context_size: 'low' | 'medium' | 'high' | undefined;
user_location:
| {
type: 'approximate';
city?: string;
country?: string;
region?: string;
timezone?: string;
}
| undefined;
}
| {
type: 'code_interpreter';
container: string | { type: 'auto'; file_ids: string[] | undefined };
}
| {
type: 'file_search';
vector_store_ids: string[];
max_num_results: number | undefined;
ranking_options:
| { ranker?: string; score_threshold?: number }
| undefined;
filters:
| OpenAIResponsesFileSearchToolComparisonFilter
| OpenAIResponsesFileSearchToolCompoundFilter
| undefined;
}
| {
type: 'image_generation';
background: 'auto' | 'opaque' | 'transparent' | undefined;
input_fidelity: 'low' | 'high' | undefined;
input_image_mask:
| {
file_id: string | undefined;
image_url: string | undefined;
}
| undefined;
model: string | undefined;
moderation: 'auto' | undefined;
output_compression: number | undefined;
output_format: 'png' | 'jpeg' | 'webp' | undefined;
partial_images: number | undefined;
quality: 'auto' | 'low' | 'medium' | 'high' | undefined;
size: 'auto' | '1024x1024' | '1024x1536' | '1536x1024' | undefined;
}
/**
* Official OpenAI API Specifications: https://platform.openai.com/docs/api-reference/responses/create#responses_create-tools-mcp_tool
*/
| {
type: 'mcp';
server_label: string;
allowed_tools:
| string[]
| {
read_only?: boolean;
tool_names?: string[];
}
| undefined;
authorization: string | undefined;
connector_id: string | undefined;
headers: Record<string, string> | undefined;
require_approval:
| 'always'
| 'never'
| {
never?: { tool_names?: string[] };
}
| undefined;
server_description: string | undefined;
server_url: string | undefined;
}
| {
type: 'custom';
name: string;
description?: string;
format?:
| {
type: 'grammar';
syntax: 'regex' | 'lark';
definition: string;
}
| {
type: 'text';
};
}
| {
type: 'local_shell';
}
| {
type: 'shell';
environment?:
| {
type: 'container_auto';
file_ids?: string[];
memory_limit?: '1g' | '4g' | '16g' | '64g';
network_policy?:
| { type: 'disabled' }
| {
type: 'allowlist';
allowed_domains: string[];
domain_secrets?: Array<{
domain: string;
name: string;
value: string;
}>;
};
skills?: Array<
| {
type: 'skill_reference';
skill_id: string;
version?: string;
}
| {
type: 'inline';
name: string;
description: string;
source: {
type: 'base64';
media_type: 'application/zip';
data: string;
};
}
>;
}
| {
type: 'container_reference';
container_id: string;
}
| {
type: 'local';
skills?: Array<{
name: string;
description: string;
path: string;
}>;
};
};
export type OpenAIResponsesReasoning = {
type: 'reasoning';
id?: string;
encrypted_content?: string | null;
summary: Array<{
type: 'summary_text';
text: string;
}>;
};
export const openaiResponsesChunkSchema = lazySchema(() =>
zodSchema(
z.union([
z.object({
type: z.literal('response.output_text.delta'),
item_id: z.string(),
delta: z.string(),
logprobs: z
.array(
z.object({
token: z.string(),
logprob: z.number(),
top_logprobs: z.array(
z.object({
token: z.string(),
logprob: z.number(),
}),
),
}),
)
.nullish(),
}),
z.object({
type: z.enum(['response.completed', 'response.incomplete']),
response: z.object({
incomplete_details: z.object({ reason: z.string() }).nullish(),
usage: z.object({
input_tokens: z.number(),
input_tokens_details: z
.object({ cached_tokens: z.number().nullish() })
.nullish(),
output_tokens: z.number(),
output_tokens_details: z
.object({ reasoning_tokens: z.number().nullish() })
.nullish(),
}),
service_tier: z.string().nullish(),
}),
}),
z.object({
type: z.literal('response.created'),
response: z.object({
id: z.string(),
created_at: z.number(),
model: z.string(),
service_tier: z.string().nullish(),
}),
}),
z.object({
type: z.literal('response.output_item.added'),
output_index: z.number(),
item: z.discriminatedUnion('type', [
z.object({
type: z.literal('message'),
id: z.string(),
phase: z.enum(['commentary', 'final_answer']).nullish(),
}),
z.object({
type: z.literal('reasoning'),
id: z.string(),
encrypted_content: z.string().nullish(),
}),
z.object({
type: z.literal('function_call'),
id: z.string(),
call_id: z.string(),
name: z.string(),
arguments: z.string(),
}),
z.object({
type: z.literal('web_search_call'),
id: z.string(),
status: z.string(),
}),
z.object({
type: z.literal('computer_call'),
id: z.string(),
status: z.string(),
}),
z.object({
type: z.literal('file_search_call'),
id: z.string(),
}),
z.object({
type: z.literal('image_generation_call'),
id: z.string(),
}),
z.object({
type: z.literal('code_interpreter_call'),
id: z.string(),
container_id: z.string(),
code: z.string().nullable(),
outputs: z
.array(
z.discriminatedUnion('type', [
z.object({ type: z.literal('logs'), logs: z.string() }),
z.object({ type: z.literal('image'), url: z.string() }),
]),
)
.nullable(),
status: z.string(),
}),
z.object({
type: z.literal('mcp_call'),
id: z.string(),
status: z.string(),
approval_request_id: z.string().nullish(),
}),
z.object({
type: z.literal('mcp_list_tools'),
id: z.string(),
}),
z.object({
type: z.literal('mcp_approval_request'),
id: z.string(),
}),
z.object({
type: z.literal('apply_patch_call'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed']),
operation: z.discriminatedUnion('type', [
z.object({
type: z.literal('create_file'),
path: z.string(),
diff: z.string(),
}),
z.object({
type: z.literal('delete_file'),
path: z.string(),
}),
z.object({
type: z.literal('update_file'),
path: z.string(),
diff: z.string(),
}),
]),
}),
z.object({
type: z.literal('custom_tool_call'),
id: z.string(),
call_id: z.string(),
name: z.string(),
input: z.string(),
}),
z.object({
type: z.literal('shell_call'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed', 'incomplete']),
action: z.object({
commands: z.array(z.string()),
}),
}),
z.object({
type: z.literal('shell_call_output'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed', 'incomplete']),
output: z.array(
z.object({
stdout: z.string(),
stderr: z.string(),
outcome: z.discriminatedUnion('type', [
z.object({ type: z.literal('timeout') }),
z.object({
type: z.literal('exit'),
exit_code: z.number(),
}),
]),
}),
),
}),
]),
}),
z.object({
type: z.literal('response.output_item.done'),
output_index: z.number(),
item: z.discriminatedUnion('type', [
z.object({
type: z.literal('message'),
id: z.string(),
phase: z.enum(['commentary', 'final_answer']).nullish(),
}),
z.object({
type: z.literal('reasoning'),
id: z.string(),
encrypted_content: z.string().nullish(),
}),
z.object({
type: z.literal('function_call'),
id: z.string(),
call_id: z.string(),
name: z.string(),
arguments: z.string(),
status: z.literal('completed'),
}),
z.object({
type: z.literal('custom_tool_call'),
id: z.string(),
call_id: z.string(),
name: z.string(),
input: z.string(),
status: z.literal('completed'),
}),
z.object({
type: z.literal('code_interpreter_call'),
id: z.string(),
code: z.string().nullable(),
container_id: z.string(),
outputs: z
.array(
z.discriminatedUnion('type', [
z.object({ type: z.literal('logs'), logs: z.string() }),
z.object({ type: z.literal('image'), url: z.string() }),
]),
)
.nullable(),
}),
z.object({
type: z.literal('image_generation_call'),
id: z.string(),
result: z.string(),
}),
z.object({
type: z.literal('web_search_call'),
id: z.string(),
status: z.string(),
action: z
.discriminatedUnion('type', [
z.object({
type: z.literal('search'),
query: z.string().nullish(),
sources: z
.array(
z.discriminatedUnion('type', [
z.object({ type: z.literal('url'), url: z.string() }),
z.object({ type: z.literal('api'), name: z.string() }),
]),
)
.nullish(),
}),
z.object({
type: z.literal('open_page'),
url: z.string().nullish(),
}),
z.object({
type: z.literal('find_in_page'),
url: z.string().nullish(),
pattern: z.string().nullish(),
}),
])
.nullish(),
}),
z.object({
type: z.literal('file_search_call'),
id: z.string(),
queries: z.array(z.string()),
results: z
.array(
z.object({
attributes: z.record(
z.string(),
z.union([z.string(), z.number(), z.boolean()]),
),
file_id: z.string(),
filename: z.string(),
score: z.number(),
text: z.string(),
}),
)
.nullish(),
}),
z.object({
type: z.literal('local_shell_call'),
id: z.string(),
call_id: z.string(),
action: z.object({
type: z.literal('exec'),
command: z.array(z.string()),
timeout_ms: z.number().optional(),
user: z.string().optional(),
working_directory: z.string().optional(),
env: z.record(z.string(), z.string()).optional(),
}),
}),
z.object({
type: z.literal('computer_call'),
id: z.string(),
status: z.literal('completed'),
}),
z.object({
type: z.literal('mcp_call'),
id: z.string(),
status: z.string(),
arguments: z.string(),
name: z.string(),
server_label: z.string(),
output: z.string().nullish(),
error: z
.union([
z.string(),
z
.object({
type: z.string().optional(),
code: z.union([z.number(), z.string()]).optional(),
message: z.string().optional(),
})
.loose(),
])
.nullish(),
approval_request_id: z.string().nullish(),
}),
z.object({
type: z.literal('mcp_list_tools'),
id: z.string(),
server_label: z.string(),
tools: z.array(
z.object({
name: z.string(),
description: z.string().optional(),
input_schema: z.any(),
annotations: z.record(z.string(), z.unknown()).optional(),
}),
),
error: z
.union([
z.string(),
z
.object({
type: z.string().optional(),
code: z.union([z.number(), z.string()]).optional(),
message: z.string().optional(),
})
.loose(),
])
.optional(),
}),
z.object({
type: z.literal('mcp_approval_request'),
id: z.string(),
server_label: z.string(),
name: z.string(),
arguments: z.string(),
approval_request_id: z.string().optional(),
}),
z.object({
type: z.literal('apply_patch_call'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed']),
operation: z.discriminatedUnion('type', [
z.object({
type: z.literal('create_file'),
path: z.string(),
diff: z.string(),
}),
z.object({
type: z.literal('delete_file'),
path: z.string(),
}),
z.object({
type: z.literal('update_file'),
path: z.string(),
diff: z.string(),
}),
]),
}),
z.object({
type: z.literal('shell_call'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed', 'incomplete']),
action: z.object({
commands: z.array(z.string()),
}),
}),
z.object({
type: z.literal('shell_call_output'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed', 'incomplete']),
output: z.array(
z.object({
stdout: z.string(),
stderr: z.string(),
outcome: z.discriminatedUnion('type', [
z.object({ type: z.literal('timeout') }),
z.object({
type: z.literal('exit'),
exit_code: z.number(),
}),
]),
}),
),
}),
]),
}),
z.object({
type: z.literal('response.function_call_arguments.delta'),
item_id: z.string(),
output_index: z.number(),
delta: z.string(),
}),
z.object({
type: z.literal('response.custom_tool_call_input.delta'),
item_id: z.string(),
output_index: z.number(),
delta: z.string(),
}),
z.object({
type: z.literal('response.image_generation_call.partial_image'),
item_id: z.string(),
output_index: z.number(),
partial_image_b64: z.string(),
}),
z.object({
type: z.literal('response.code_interpreter_call_code.delta'),
item_id: z.string(),
output_index: z.number(),
delta: z.string(),
}),
z.object({
type: z.literal('response.code_interpreter_call_code.done'),
item_id: z.string(),
output_index: z.number(),
code: z.string(),
}),
z.object({
type: z.literal('response.output_text.annotation.added'),
annotation: z.discriminatedUnion('type', [
z.object({
type: z.literal('url_citation'),
start_index: z.number(),
end_index: z.number(),
url: z.string(),
title: z.string(),
}),
z.object({
type: z.literal('file_citation'),
file_id: z.string(),
filename: z.string(),
index: z.number(),
}),
z.object({
type: z.literal('container_file_citation'),
container_id: z.string(),
file_id: z.string(),
filename: z.string(),
start_index: z.number(),
end_index: z.number(),
}),
z.object({
type: z.literal('file_path'),
file_id: z.string(),
index: z.number(),
}),
]),
}),
z.object({
type: z.literal('response.reasoning_summary_part.added'),
item_id: z.string(),
summary_index: z.number(),
}),
z.object({
type: z.literal('response.reasoning_summary_text.delta'),
item_id: z.string(),
summary_index: z.number(),
delta: z.string(),
}),
z.object({
type: z.literal('response.reasoning_summary_part.done'),
item_id: z.string(),
summary_index: z.number(),
}),
z.object({
type: z.literal('response.apply_patch_call_operation_diff.delta'),
item_id: z.string(),
output_index: z.number(),
delta: z.string(),
obfuscation: z.string().nullish(),
}),
z.object({
type: z.literal('response.apply_patch_call_operation_diff.done'),
item_id: z.string(),
output_index: z.number(),
diff: z.string(),
}),
z.object({
type: z.literal('error'),
sequence_number: z.number(),
error: z.object({
type: z.string(),
code: z.string(),
message: z.string(),
param: z.string().nullish(),
}),
}),
z
.object({ type: z.string() })
.loose()
.transform(value => ({
type: 'unknown_chunk' as const,
message: value.type,
})), // fallback for unknown chunks
]),
),
);
export type OpenAIResponsesChunk = InferSchema<
typeof openaiResponsesChunkSchema
>;
export type OpenAIResponsesLogprobs = NonNullable<
(OpenAIResponsesChunk & {
type: 'response.output_text.delta';
})['logprobs']
> | null;
export type OpenAIResponsesWebSearchAction = NonNullable<
((OpenAIResponsesChunk & {
type: 'response.output_item.done';
})['item'] & {
type: 'web_search_call';
})['action']
>;
export const openaiResponsesResponseSchema = lazySchema(() =>
zodSchema(
z.object({
id: z.string().optional(),
created_at: z.number().optional(),
error: z
.object({
message: z.string(),
type: z.string(),
param: z.string().nullish(),
code: z.string(),
})
.nullish(),
model: z.string().optional(),
output: z
.array(
z.discriminatedUnion('type', [
z.object({
type: z.literal('message'),
role: z.literal('assistant'),
id: z.string(),
phase: z.enum(['commentary', 'final_answer']).nullish(),
content: z.array(
z.object({
type: z.literal('output_text'),
text: z.string(),
logprobs: z
.array(
z.object({
token: z.string(),
logprob: z.number(),
top_logprobs: z.array(
z.object({
token: z.string(),
logprob: z.number(),
}),
),
}),
)
.nullish(),
annotations: z.array(
z.discriminatedUnion('type', [
z.object({
type: z.literal('url_citation'),
start_index: z.number(),
end_index: z.number(),
url: z.string(),
title: z.string(),
}),
z.object({
type: z.literal('file_citation'),
file_id: z.string(),
filename: z.string(),
index: z.number(),
}),
z.object({
type: z.literal('container_file_citation'),
container_id: z.string(),
file_id: z.string(),
filename: z.string(),
start_index: z.number(),
end_index: z.number(),
}),
z.object({
type: z.literal('file_path'),
file_id: z.string(),
index: z.number(),
}),
]),
),
}),
),
}),
z.object({
type: z.literal('web_search_call'),
id: z.string(),
status: z.string(),
action: z
.discriminatedUnion('type', [
z.object({
type: z.literal('search'),
query: z.string().nullish(),
sources: z
.array(
z.discriminatedUnion('type', [
z.object({ type: z.literal('url'), url: z.string() }),
z.object({
type: z.literal('api'),
name: z.string(),
}),
]),
)
.nullish(),
}),
z.object({
type: z.literal('open_page'),
url: z.string().nullish(),
}),
z.object({
type: z.literal('find_in_page'),
url: z.string().nullish(),
pattern: z.string().nullish(),
}),
])
.nullish(),
}),
z.object({
type: z.literal('file_search_call'),
id: z.string(),
queries: z.array(z.string()),
results: z
.array(
z.object({
attributes: z.record(
z.string(),
z.union([z.string(), z.number(), z.boolean()]),
),
file_id: z.string(),
filename: z.string(),
score: z.number(),
text: z.string(),
}),
)
.nullish(),
}),
z.object({
type: z.literal('code_interpreter_call'),
id: z.string(),
code: z.string().nullable(),
container_id: z.string(),
outputs: z
.array(
z.discriminatedUnion('type', [
z.object({ type: z.literal('logs'), logs: z.string() }),
z.object({ type: z.literal('image'), url: z.string() }),
]),
)
.nullable(),
}),
z.object({
type: z.literal('image_generation_call'),
id: z.string(),
result: z.string(),
}),
z.object({
type: z.literal('local_shell_call'),
id: z.string(),
call_id: z.string(),
action: z.object({
type: z.literal('exec'),
command: z.array(z.string()),
timeout_ms: z.number().optional(),
user: z.string().optional(),
working_directory: z.string().optional(),
env: z.record(z.string(), z.string()).optional(),
}),
}),
z.object({
type: z.literal('function_call'),
call_id: z.string(),
name: z.string(),
arguments: z.string(),
id: z.string(),
}),
z.object({
type: z.literal('custom_tool_call'),
call_id: z.string(),
name: z.string(),
input: z.string(),
id: z.string(),
}),
z.object({
type: z.literal('computer_call'),
id: z.string(),
status: z.string().optional(),
}),
z.object({
type: z.literal('reasoning'),
id: z.string(),
encrypted_content: z.string().nullish(),
summary: z.array(
z.object({
type: z.literal('summary_text'),
text: z.string(),
}),
),
}),
z.object({
type: z.literal('mcp_call'),
id: z.string(),
status: z.string(),
arguments: z.string(),
name: z.string(),
server_label: z.string(),
output: z.string().nullish(),
error: z
.union([
z.string(),
z
.object({
type: z.string().optional(),
code: z.union([z.number(), z.string()]).optional(),
message: z.string().optional(),
})
.loose(),
])
.nullish(),
approval_request_id: z.string().nullish(),
}),
z.object({
type: z.literal('mcp_list_tools'),
id: z.string(),
server_label: z.string(),
tools: z.array(
z.object({
name: z.string(),
description: z.string().optional(),
input_schema: z.any(),
annotations: z.record(z.string(), z.unknown()).optional(),
}),
),
error: z
.union([
z.string(),
z
.object({
type: z.string().optional(),
code: z.union([z.number(), z.string()]).optional(),
message: z.string().optional(),
})
.loose(),
])
.optional(),
}),
z.object({
type: z.literal('mcp_approval_request'),
id: z.string(),
server_label: z.string(),
name: z.string(),
arguments: z.string(),
approval_request_id: z.string().optional(),
}),
z.object({
type: z.literal('apply_patch_call'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed']),
operation: z.discriminatedUnion('type', [
z.object({
type: z.literal('create_file'),
path: z.string(),
diff: z.string(),
}),
z.object({
type: z.literal('delete_file'),
path: z.string(),
}),
z.object({
type: z.literal('update_file'),
path: z.string(),
diff: z.string(),
}),
]),
}),
z.object({
type: z.literal('shell_call'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed', 'incomplete']),
action: z.object({
commands: z.array(z.string()),
}),
}),
z.object({
type: z.literal('shell_call_output'),
id: z.string(),
call_id: z.string(),
status: z.enum(['in_progress', 'completed', 'incomplete']),
output: z.array(
z.object({
stdout: z.string(),
stderr: z.string(),
outcome: z.discriminatedUnion('type', [
z.object({ type: z.literal('timeout') }),
z.object({
type: z.literal('exit'),
exit_code: z.number(),
}),
]),
}),
),
}),
]),
)
.optional(),
service_tier: z.string().nullish(),
incomplete_details: z.object({ reason: z.string() }).nullish(),
usage: z
.object({
input_tokens: z.number(),
input_tokens_details: z
.object({ cached_tokens: z.number().nullish() })
.nullish(),
output_tokens: z.number(),
output_tokens_details: z
.object({ reasoning_tokens: z.number().nullish() })
.nullish(),
})
.optional(),
}),
),
);