rdesign/frontend/node_modules/@copilotkitnext/react/dist/hooks/use-human-in-the-loop.cjs

74 lines
2.1 KiB
JavaScript

const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
const require_CopilotKitProvider = require('../providers/CopilotKitProvider.cjs');
const require_use_frontend_tool = require('./use-frontend-tool.cjs');
let react = require("react");
react = require_runtime.__toESM(react);
//#region src/hooks/use-human-in-the-loop.tsx
function useHumanInTheLoop(tool, deps) {
const { copilotkit } = require_CopilotKitProvider.useCopilotKit();
const resolvePromiseRef = (0, react.useRef)(null);
const respond = (0, react.useCallback)(async (result) => {
if (resolvePromiseRef.current) {
resolvePromiseRef.current(result);
resolvePromiseRef.current = null;
}
}, []);
const handler = (0, react.useCallback)(async () => {
return new Promise((resolve) => {
resolvePromiseRef.current = resolve;
});
}, []);
const RenderComponent = (0, react.useCallback)((props) => {
const ToolComponent = tool.render;
if (props.status === "inProgress") {
const enhancedProps = {
...props,
name: tool.name,
description: tool.description || "",
respond: void 0
};
return react.default.createElement(ToolComponent, enhancedProps);
} else if (props.status === "executing") {
const enhancedProps = {
...props,
name: tool.name,
description: tool.description || "",
respond
};
return react.default.createElement(ToolComponent, enhancedProps);
} else if (props.status === "complete") {
const enhancedProps = {
...props,
name: tool.name,
description: tool.description || "",
respond: void 0
};
return react.default.createElement(ToolComponent, enhancedProps);
}
return react.default.createElement(ToolComponent, props);
}, [
tool.render,
tool.name,
tool.description,
respond
]);
require_use_frontend_tool.useFrontendTool({
...tool,
handler,
render: RenderComponent
}, deps);
(0, react.useEffect)(() => {
return () => {
copilotkit.removeHookRenderToolCall(tool.name, tool.agentId);
};
}, [
copilotkit,
tool.name,
tool.agentId
]);
}
//#endregion
exports.useHumanInTheLoop = useHumanInTheLoop;
//# sourceMappingURL=use-human-in-the-loop.cjs.map