UNPKG

@agenite/tool

Version:
1 lines 8.97 kB
{"version":3,"sources":["../src/tool.ts"],"names":["z","zodToJsonSchema","jsonSchemaToZod"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { ToolDefinition } from '@agenite/llm';\nimport {\n Tool as ToolInterface,\n ToolOptions,\n ToolExecuteParams,\n ToolResponse,\n ValidationResult,\n JSONSchema,\n} from './types';\n\ntype ToolSchema = {\n type: 'object';\n properties: Record<string, unknown>;\n required?: string[];\n};\nimport { JsonSchemaObject, jsonSchemaToZod } from '@n8n/json-schema-to-zod';\n\nexport class Tool<TInput = unknown> implements ToolInterface<TInput> {\n public readonly name: string;\n public readonly description: string;\n public readonly version?: string;\n public readonly inputSchema?: ToolDefinition['inputSchema'];\n\n private readonly executeImpl: (\n params: ToolExecuteParams<TInput>\n ) => Promise<ToolResponse>;\n private readonly validateImpl?: (input: TInput) => Promise<ValidationResult>;\n private readonly zodSchema?: z.ZodType<TInput>;\n private readonly jsonSchema?: JSONSchema;\n\n constructor(options: ToolOptions<TInput>) {\n this.name = options.name;\n this.description = options.description;\n this.version = options.version;\n this.executeImpl = options.execute;\n this.validateImpl = options.validate;\n\n // Handle input schema\n if (options.inputSchema) {\n if (options.inputSchema instanceof z.ZodType) {\n this.zodSchema = options.inputSchema;\n const { $schema: _, ...schema } = zodToJsonSchema(\n options.inputSchema,\n {}\n );\n this.jsonSchema = schema as JSONSchema;\n this.inputSchema = this.createToolSchema(schema as JSONSchema);\n } else {\n this.jsonSchema = options.inputSchema;\n this.inputSchema = this.createToolSchema(options.inputSchema);\n }\n }\n }\n\n private createToolSchema(schema: JSONSchema): ToolSchema {\n return {\n type: 'object',\n properties: schema.properties || {},\n required: schema.required,\n };\n }\n\n public async execute(\n params: ToolExecuteParams<TInput>\n ): Promise<ToolResponse> {\n try {\n // Validate input if schema or validator is provided\n if (this.validateImpl || this.jsonSchema) {\n const validationResult = await this.validate(params.input);\n if (!validationResult.isValid) {\n return {\n isError: true,\n data: `Validation failed: ${validationResult.errors?.map((e) => e.message).join(', ')}`,\n error: {\n code: 'VALIDATION_ERROR',\n message: 'Input validation failed',\n details: validationResult.errors,\n },\n };\n }\n }\n\n // Track execution time\n const startTime = Date.now();\n\n // Execute the tool\n const response = await this.executeImpl(params);\n\n // Add duration if not provided\n if (!response.duration) {\n response.duration = Date.now() - startTime;\n }\n\n return response;\n } catch (error) {\n // Handle execution errors\n return {\n isError: true,\n data: `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`,\n error: {\n code: 'EXECUTION_ERROR',\n message: error instanceof Error ? error.message : String(error),\n details: error,\n },\n };\n }\n }\n\n public async validate(input: TInput): Promise<ValidationResult> {\n try {\n // Use custom validator if provided\n if (this.validateImpl) {\n return await this.validateImpl(input);\n }\n\n // Use Zod schema if available\n if (this.zodSchema) {\n try {\n this.zodSchema.parse(input);\n return { isValid: true };\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n isValid: false,\n errors: error.errors.map((err) => ({\n field: err.path.join('.'),\n message: err.message,\n })),\n };\n }\n }\n }\n\n // Use JSON Schema validation if provided\n if (this.jsonSchema) {\n return this.validateJsonSchema(input);\n }\n\n // No validation needed\n return { isValid: true };\n } catch (error) {\n return {\n isValid: false,\n errors: [\n {\n field: '*',\n message: `Validation error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n };\n }\n }\n\n private async validateJsonSchema(input: TInput): Promise<ValidationResult> {\n try {\n const zodSchema = jsonSchemaToZod(this.jsonSchema as JsonSchemaObject);\n zodSchema.parse(input);\n\n return { isValid: true };\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n isValid: false,\n errors: error.errors.map((err) => ({\n field: err.path.join('.'),\n message: err.message,\n })),\n };\n } else {\n return {\n isValid: false,\n errors: [{ field: '*', message: 'Validation failed' }],\n };\n }\n }\n }\n}\n"]}