{"version":3,"file":"use-human-in-the-loop.cjs","names":["useCopilotKit","React"],"sources":["../../src/hooks/use-human-in-the-loop.tsx"],"sourcesContent":["import { useCopilotKit } from \"@/providers/CopilotKitProvider\";\nimport type { ReactFrontendTool } from \"@/types/frontend-tool\";\nimport type { ReactHumanInTheLoop } from \"@/types/human-in-the-loop\";\nimport type { ReactToolCallRenderer } from \"@/types/react-tool-call-renderer\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport React from \"react\";\nimport { useFrontendTool } from \"./use-frontend-tool\";\n\nexport function useHumanInTheLoop<\n  T extends Record<string, unknown> = Record<string, unknown>,\n>(tool: ReactHumanInTheLoop<T>, deps?: ReadonlyArray<unknown>) {\n  const { copilotkit } = useCopilotKit();\n  const resolvePromiseRef = useRef<((result: unknown) => void) | null>(null);\n\n  const respond = useCallback(async (result: unknown) => {\n    if (resolvePromiseRef.current) {\n      resolvePromiseRef.current(result);\n      resolvePromiseRef.current = null;\n    }\n  }, []);\n\n  const handler = useCallback(async () => {\n    return new Promise((resolve) => {\n      resolvePromiseRef.current = resolve;\n    });\n  }, []);\n\n  const RenderComponent: ReactToolCallRenderer<T>[\"render\"] = useCallback(\n    (props) => {\n      const ToolComponent = tool.render;\n\n      // Enhance props based on current status\n      if (props.status === \"inProgress\") {\n        const enhancedProps = {\n          ...props,\n          name: tool.name,\n          description: tool.description || \"\",\n          respond: undefined,\n        };\n        return React.createElement(ToolComponent, enhancedProps);\n      } else if (props.status === \"executing\") {\n        const enhancedProps = {\n          ...props,\n          name: tool.name,\n          description: tool.description || \"\",\n          respond,\n        };\n        return React.createElement(ToolComponent, enhancedProps);\n      } else if (props.status === \"complete\") {\n        const enhancedProps = {\n          ...props,\n          name: tool.name,\n          description: tool.description || \"\",\n          respond: undefined,\n        };\n        return React.createElement(ToolComponent, enhancedProps);\n      }\n\n      // Fallback - just render with original props\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      return React.createElement(ToolComponent, props as any);\n    },\n    [tool.render, tool.name, tool.description, respond],\n  );\n\n  const frontendTool: ReactFrontendTool<T> = {\n    ...tool,\n    handler,\n    render: RenderComponent,\n  };\n\n  useFrontendTool(frontendTool, deps);\n\n  // Human-in-the-loop tools should remove their renderer on unmount\n  // since they can't respond to user interactions anymore\n  useEffect(() => {\n    return () => {\n      copilotkit.removeHookRenderToolCall(tool.name, tool.agentId);\n    };\n  }, [copilotkit, tool.name, tool.agentId]);\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,kBAEd,MAA8B,MAA+B;CAC7D,MAAM,EAAE,eAAeA,0CAAe;CACtC,MAAM,sCAA+D,KAAK;CAE1E,MAAM,iCAAsB,OAAO,WAAoB;AACrD,MAAI,kBAAkB,SAAS;AAC7B,qBAAkB,QAAQ,OAAO;AACjC,qBAAkB,UAAU;;IAE7B,EAAE,CAAC;CAEN,MAAM,iCAAsB,YAAY;AACtC,SAAO,IAAI,SAAS,YAAY;AAC9B,qBAAkB,UAAU;IAC5B;IACD,EAAE,CAAC;CAEN,MAAM,0CACH,UAAU;EACT,MAAM,gBAAgB,KAAK;AAG3B,MAAI,MAAM,WAAW,cAAc;GACjC,MAAM,gBAAgB;IACpB,GAAG;IACH,MAAM,KAAK;IACX,aAAa,KAAK,eAAe;IACjC,SAAS;IACV;AACD,UAAOC,cAAM,cAAc,eAAe,cAAc;aAC/C,MAAM,WAAW,aAAa;GACvC,MAAM,gBAAgB;IACpB,GAAG;IACH,MAAM,KAAK;IACX,aAAa,KAAK,eAAe;IACjC;IACD;AACD,UAAOA,cAAM,cAAc,eAAe,cAAc;aAC/C,MAAM,WAAW,YAAY;GACtC,MAAM,gBAAgB;IACpB,GAAG;IACH,MAAM,KAAK;IACX,aAAa,KAAK,eAAe;IACjC,SAAS;IACV;AACD,UAAOA,cAAM,cAAc,eAAe,cAAc;;AAK1D,SAAOA,cAAM,cAAc,eAAe,MAAa;IAEzD;EAAC,KAAK;EAAQ,KAAK;EAAM,KAAK;EAAa;EAAQ,CACpD;AAQD,2CAN2C;EACzC,GAAG;EACH;EACA,QAAQ;EACT,EAE6B,KAAK;AAInC,4BAAgB;AACd,eAAa;AACX,cAAW,yBAAyB,KAAK,MAAM,KAAK,QAAQ;;IAE7D;EAAC;EAAY,KAAK;EAAM,KAAK;EAAQ,CAAC"}