* fix: handle missing skill parameter in SkillTool * fix: preserve SkillTool schema contract * fix: align SkillTool schema error output
81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import { expect, test } from 'bun:test'
|
|
import { z } from 'zod/v4'
|
|
import { getEmptyToolPermissionContext, type Tool, type Tools } from '../Tool.js'
|
|
import { SkillTool } from '../tools/SkillTool/SkillTool.js'
|
|
import { toolToAPISchema } from './api.js'
|
|
|
|
test('toolToAPISchema preserves provider-specific schema keywords in input_schema', async () => {
|
|
const schema = await toolToAPISchema(
|
|
{
|
|
name: 'WebFetch',
|
|
inputSchema: z.strictObject({}),
|
|
inputJSONSchema: {
|
|
type: 'object',
|
|
properties: {
|
|
url: {
|
|
type: 'string',
|
|
format: 'uri',
|
|
description: 'Public HTTP or HTTPS URL',
|
|
},
|
|
metadata: {
|
|
type: 'object',
|
|
propertyNames: {
|
|
pattern: '^[a-z]+$',
|
|
},
|
|
properties: {
|
|
callback: {
|
|
type: 'string',
|
|
format: 'uri-reference',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
prompt: async () => 'Fetch a URL',
|
|
} as unknown as Tool,
|
|
{
|
|
getToolPermissionContext: async () => getEmptyToolPermissionContext(),
|
|
tools: [] as unknown as Tools,
|
|
agents: [],
|
|
},
|
|
)
|
|
|
|
expect(schema).toMatchObject({
|
|
input_schema: {
|
|
type: 'object',
|
|
properties: {
|
|
url: {
|
|
type: 'string',
|
|
format: 'uri',
|
|
description: 'Public HTTP or HTTPS URL',
|
|
},
|
|
metadata: {
|
|
type: 'object',
|
|
propertyNames: {
|
|
pattern: '^[a-z]+$',
|
|
},
|
|
properties: {
|
|
callback: {
|
|
type: 'string',
|
|
format: 'uri-reference',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
test('toolToAPISchema keeps skill required for SkillTool', async () => {
|
|
const schema = await toolToAPISchema(SkillTool, {
|
|
getToolPermissionContext: async () => getEmptyToolPermissionContext(),
|
|
tools: [] as unknown as Tools,
|
|
agents: [],
|
|
})
|
|
|
|
expect((schema as { input_schema: unknown }).input_schema).toMatchObject({
|
|
type: 'object',
|
|
required: ['skill'],
|
|
})
|
|
})
|