{"version":3,"file":"external-tools.cjs","sources":["@gensx/core/../../../../src/external-tools.ts"],"sourcesContent":["import { Component } from \"./component.js\";\nimport { getCurrentContext } from \"./context.js\";\nimport { JsonValue } from \"./workflow-state.js\";\nimport { InferZodType, toJsonSchema, ZodTypeAny, zodValidate } from \"./zod.js\";\n\nexport interface ToolDefinition<\n  TParamsSchema extends ZodTypeAny,\n  TResultSchema extends ZodTypeAny,\n> {\n  description?: string;\n  params: TParamsSchema;\n  result: TResultSchema;\n}\n\n// Tool box type\nexport type ToolBox = Record<string, ToolDefinition<ZodTypeAny, ZodTypeAny>>;\n\n// Extract param/result types automatically\nexport type InferToolParams<T extends ToolBox, K extends keyof T> =\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T[K] extends ToolDefinition<infer P, any> ? InferZodType<P> : never;\n\nexport type InferToolResult<T extends ToolBox, K extends keyof T> =\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T[K] extends ToolDefinition<any, infer R> ? InferZodType<R> : never;\n\n// Tool implementations for frontend\nexport type ToolImplementations<T extends ToolBox> = {\n  [K in keyof T]: {\n    execute: (\n      params: InferToolParams<T, K>,\n    ) => InferToolResult<T, K> | Promise<InferToolResult<T, K>>;\n  };\n};\n\n// Helper to create tool box\nexport function createToolBox<T extends ToolBox>(definitions: T): T {\n  return definitions;\n}\n\nexport async function executeExternalTool<T extends ToolBox, K extends keyof T>(\n  toolBox: T,\n  toolName: K,\n  params: InferToolParams<T, K>,\n): Promise<InferToolResult<T, K>> {\n  const toolDef = toolBox[toolName] as ToolDefinition<ZodTypeAny, ZodTypeAny>;\n  const validatedParams = zodValidate(toolDef.params, params);\n  const paramsJsonSchema = toJsonSchema(toolDef.params);\n  const resultJsonSchema = toJsonSchema(toolDef.result);\n\n  const component = Component(\n    \"ExternalTool\",\n    async ({\n      toolName,\n      validatedParams,\n    }: {\n      toolName: string;\n      validatedParams: Record<string, unknown>;\n    }) => {\n      const context = getCurrentContext();\n      const workflowContext = context.getWorkflowContext();\n      const currentNode = context.getCurrentNode();\n      if (!currentNode) {\n        throw new Error(\"No current node ID found\");\n      }\n\n      // Send external tool call message\n      workflowContext.sendWorkflowMessage({\n        type: \"external-tool\",\n        toolName: String(toolName),\n        params: validatedParams as JsonValue,\n        paramsSchema: paramsJsonSchema,\n        resultSchema: resultJsonSchema,\n        nodeId: currentNode.id,\n      });\n\n      const result = await workflowContext.onRequestInput({\n        type: \"external-tool\",\n        toolName: String(toolName),\n        nodeId: currentNode.id,\n        params: validatedParams as JsonValue,\n        paramsSchema: paramsJsonSchema,\n        resultSchema: resultJsonSchema,\n      });\n\n      if (\n        typeof result === \"object\" &&\n        result !== null &&\n        \"__gensxMissingToolImplementation\" in result\n      ) {\n        throw new Error(`Tool implementation not found: ${String(toolName)}`);\n      }\n\n      return result as InferToolResult<T, K>;\n    },\n  );\n\n  return await component({\n    toolName: String(toolName),\n    validatedParams: validatedParams as Record<string, unknown>,\n  });\n}\n"],"names":["zodValidate","toJsonSchema","component","Component","context","getCurrentContext"],"mappings":";;;;;;;;;;;;AAmCA;AACM,SAAU,aAAa,CAAoB,WAAc,EAAA;AAC7D,IAAA,OAAO,WAAW;AACpB;AAEO,eAAe,mBAAmB,CACvC,OAAU,EACV,QAAW,EACX,MAA6B,EAAA;AAE7B,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAA2C;IAC3E,MAAM,eAAe,GAAGA,eAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3D,MAAM,gBAAgB,GAAGC,gBAAY,CAAC,OAAO,CAAC,MAAM,CAAC;IACrD,MAAM,gBAAgB,GAAGA,gBAAY,CAAC,OAAO,CAAC,MAAM,CAAC;AAErD,IAAA,MAAMC,WAAS,GAAGC,mBAAS,CACzB,cAAc,EACd,OAAO,EACL,QAAQ,EACR,eAAe,GAIhB,KAAI;AACH,QAAA,MAAMC,SAAO,GAAGC,yBAAiB,EAAE;AACnC,QAAA,MAAM,eAAe,GAAGD,SAAO,CAAC,kBAAkB,EAAE;AACpD,QAAA,MAAM,WAAW,GAAGA,SAAO,CAAC,cAAc,EAAE;QAC5C,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;;;QAI7C,eAAe,CAAC,mBAAmB,CAAC;AAClC,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,YAAA,MAAM,EAAE,eAA4B;AACpC,YAAA,YAAY,EAAE,gBAAgB;AAC9B,YAAA,YAAY,EAAE,gBAAgB;YAC9B,MAAM,EAAE,WAAW,CAAC,EAAE;AACvB,SAAA,CAAC;AAEF,QAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC;AAClD,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,EAAE;AACtB,YAAA,MAAM,EAAE,eAA4B;AACpC,YAAA,YAAY,EAAE,gBAAgB;AAC9B,YAAA,YAAY,EAAE,gBAAgB;AAC/B,SAAA,CAAC;QAEF,IACE,OAAO,MAAM,KAAK,QAAQ;AAC1B,YAAA,MAAM,KAAK,IAAI;YACf,kCAAkC,IAAI,MAAM,EAC5C;YACA,MAAM,IAAI,KAAK,CAAC,CAAkC,+BAAA,EAAA,MAAM,CAAC,QAAQ,CAAC,CAAE,CAAA,CAAC;;AAGvE,QAAA,OAAO,MAA+B;AACxC,KAAC,CACF;IAED,OAAO,MAAMF,WAAS,CAAC;AACrB,QAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,QAAA,eAAe,EAAE,eAA0C;AAC5D,KAAA,CAAC;AACJ;;;;;"}