@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.
204 lines (193 loc) • 4.96 kB
text/typescript
import {
createProviderToolFactoryWithOutputSchema,
lazySchema,
zodSchema,
} from '@ai-sdk/provider-utils';
import { z } from 'zod/v4';
export const shellInputSchema = lazySchema(() =>
zodSchema(
z.object({
action: z.object({
commands: z.array(z.string()),
timeoutMs: z.number().optional(),
maxOutputLength: z.number().optional(),
}),
}),
),
);
export const shellOutputSchema = lazySchema(() =>
zodSchema(
z.object({
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'), exitCode: z.number() }),
]),
}),
),
}),
),
);
const shellSkillsSchema = z
.array(
z.discriminatedUnion('type', [
z.object({
type: z.literal('skillReference'),
skillId: z.string(),
version: z.string().optional(),
}),
z.object({
type: z.literal('inline'),
name: z.string(),
description: z.string(),
source: z.object({
type: z.literal('base64'),
mediaType: z.literal('application/zip'),
data: z.string(),
}),
}),
]),
)
.optional();
export const shellArgsSchema = lazySchema(() =>
zodSchema(
z.object({
environment: z
.union([
z.object({
type: z.literal('containerAuto'),
fileIds: z.array(z.string()).optional(),
memoryLimit: z.enum(['1g', '4g', '16g', '64g']).optional(),
networkPolicy: z
.discriminatedUnion('type', [
z.object({ type: z.literal('disabled') }),
z.object({
type: z.literal('allowlist'),
allowedDomains: z.array(z.string()),
domainSecrets: z
.array(
z.object({
domain: z.string(),
name: z.string(),
value: z.string(),
}),
)
.optional(),
}),
])
.optional(),
skills: shellSkillsSchema,
}),
z.object({
type: z.literal('containerReference'),
containerId: z.string(),
}),
z.object({
type: z.literal('local').optional(),
skills: z
.array(
z.object({
name: z.string(),
description: z.string(),
path: z.string(),
}),
)
.optional(),
}),
])
.optional(),
}),
),
);
type ShellArgs = {
environment?:
| {
type: 'containerAuto';
fileIds?: string[];
memoryLimit?: '1g' | '4g' | '16g' | '64g';
networkPolicy?:
| { type: 'disabled' }
| {
type: 'allowlist';
allowedDomains: string[];
domainSecrets?: Array<{
domain: string;
name: string;
value: string;
}>;
};
skills?: Array<
| { type: 'skillReference'; skillId: string; version?: string }
| {
type: 'inline';
name: string;
description: string;
source: {
type: 'base64';
mediaType: 'application/zip';
data: string;
};
}
>;
}
| {
type: 'containerReference';
containerId: string;
}
| {
type?: 'local';
skills?: Array<{
name: string;
description: string;
path: string;
}>;
};
};
export const shell = createProviderToolFactoryWithOutputSchema<
{
/**
* Shell tool action containing commands to execute.
*/
action: {
/**
* A list of shell commands to execute.
*/
commands: string[];
/**
* Optional timeout in milliseconds for the commands.
*/
timeoutMs?: number;
/**
* Optional maximum number of characters to return from each command.
*/
maxOutputLength?: number;
};
},
{
/**
* An array of shell call output contents.
*/
output: Array<{
/**
* Standard output from the command.
*/
stdout: string;
/**
* Standard error from the command.
*/
stderr: string;
/**
* The outcome of the shell execution - either timeout or exit with code.
*/
outcome: { type: 'timeout' } | { type: 'exit'; exitCode: number };
}>;
},
ShellArgs
>({
id: 'openai.shell',
inputSchema: shellInputSchema,
outputSchema: shellOutputSchema,
});