{"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"]}