{"version":3,"sources":["../../src/tools/custom.ts"],"names":["CustomToolCreateError","FrameworkError","CustomToolExecuteError","toolOptionsSchema","z","object","codeInterpreter","url","string","connectionOptions","any","optional","sourceCode","min","name","description","inputSchema","passthrough","CustomTool","Tool","emitter","Emitter","root","child","namespace","creator","options","register","validate","_run","input","run","result","callCodeInterpreter","body","tool_source_code","tool_input_json","JSON","stringify","env","merge","omitUndefined","signal","stderr","StringToolOutput","tool_output_json","e","ToolError","message","loadSnapshot","snapshot","fromSourceCode","error_messages","join","tool_name","tool_description","parse","tool_input_schema_json"],"mappings":"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","file":"custom.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n  BaseToolOptions,\n  BaseToolRunOptions,\n  ToolEmitter,\n  StringToolOutput,\n  Tool,\n  ToolInput,\n} from \"@/tools/base.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { z } from \"zod\";\nimport { validate } from \"@/internals/helpers/general.js\";\nimport { callCodeInterpreter, CodeInterpreterOptions } from \"./python/python.js\";\nimport { RunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { ToolError } from \"@/tools/base.js\";\nimport { merge } from \"remeda\";\nimport { omitUndefined } from \"@/internals/helpers/object.js\";\n\nexport class CustomToolCreateError extends FrameworkError {}\nexport class CustomToolExecuteError extends FrameworkError {}\n\nconst toolOptionsSchema = z\n  .object({\n    codeInterpreter: z.object({\n      url: z.string().url(),\n      connectionOptions: z.any().optional(),\n    }),\n    sourceCode: z.string().min(1),\n    name: z.string().min(1),\n    description: z.string().min(1),\n    inputSchema: z.any(),\n  })\n  .passthrough();\n\ntype CustomToolEnv = Record<string, string | boolean | null | undefined | number>;\n\nexport type CustomToolOptions = z.output<typeof toolOptionsSchema> &\n  BaseToolOptions & { env?: CustomToolEnv };\n\nexport type CustomToolRunOptions = Pick<CustomToolOptions, \"env\"> & BaseToolRunOptions;\n\nexport class CustomTool extends Tool<StringToolOutput, CustomToolOptions, CustomToolRunOptions> {\n  name: string;\n  description: string;\n\n  public readonly emitter: ToolEmitter<ToolInput<this>, StringToolOutput> = Emitter.root.child({\n    namespace: [\"tool\", \"custom\"],\n    creator: this,\n  });\n\n  public inputSchema() {\n    return this.options.inputSchema;\n  }\n\n  static {\n    this.register();\n  }\n\n  public constructor(options: CustomToolOptions) {\n    validate(options, toolOptionsSchema);\n    super(options);\n    this.name = options.name;\n    this.description = options.description;\n  }\n\n  protected async _run(\n    input: any,\n    options: Partial<CustomToolRunOptions>,\n    run: RunContext<typeof this>,\n  ) {\n    try {\n      const result = await callCodeInterpreter({\n        url: `${this.options.codeInterpreter.url}/v1/execute-custom-tool`,\n        body: {\n          tool_source_code: this.options.sourceCode,\n          tool_input_json: JSON.stringify(input),\n          env: merge(omitUndefined(this.options.env ?? {}), omitUndefined(options.env ?? {})),\n        },\n        signal: run.signal,\n      });\n\n      if (result.stderr) {\n        throw new CustomToolExecuteError(result.stderr);\n      }\n\n      return new StringToolOutput(result.tool_output_json);\n    } catch (e) {\n      if (e instanceof ToolError) {\n        throw new CustomToolExecuteError(e.message, [e]);\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>): void {\n    super.loadSnapshot(snapshot);\n  }\n\n  static async fromSourceCode(\n    { env, ...codeInterpreter }: CodeInterpreterOptions & Pick<CustomToolOptions, \"env\">,\n    sourceCode: string,\n  ) {\n    try {\n      const result = await callCodeInterpreter({\n        url: `${codeInterpreter.url}/v1/parse-custom-tool`,\n        body: {\n          tool_source_code: sourceCode,\n        },\n      });\n\n      if (result.error_messages) {\n        throw new CustomToolCreateError(result.error_messages.join(\"\\n\"));\n      }\n\n      return new CustomTool({\n        codeInterpreter,\n        sourceCode,\n        name: result.tool_name,\n        description: result.tool_description,\n        inputSchema: JSON.parse(result.tool_input_schema_json),\n        env,\n      });\n    } catch (e) {\n      if (e instanceof ToolError) {\n        throw new CustomToolCreateError(e.message, [e]);\n      } else {\n        throw e;\n      }\n    }\n  }\n}\n"]}