rdesign/frontend/node_modules/@copilotkitnext/react/dist/hooks/use-render-tool.cjs

80 lines
2.3 KiB
JavaScript

const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
const require_CopilotKitProvider = require('../providers/CopilotKitProvider.cjs');
const require_defineToolCallRenderer = require('../types/defineToolCallRenderer.cjs');
let react = require("react");
//#region src/hooks/use-render-tool.tsx
const EMPTY_DEPS = [];
/**
* Registers a renderer entry in CopilotKit's `renderToolCalls` registry.
*
* Key behavior:
* - deduplicates by `agentId:name` (latest registration wins),
* - keeps renderer entries on cleanup so historical chat tool calls can still render,
* - refreshes registration when `deps` change.
*
* @typeParam S - Schema type describing tool call parameters.
* @param config - Renderer config for wildcard or named tools.
* @param deps - Optional dependencies to refresh registration.
*
* @example
* ```tsx
* useRenderTool(
* {
* name: "searchDocs",
* parameters: z.object({ query: z.string() }),
* render: ({ status, parameters, result }) => {
* if (status === "executing") return <div>Searching {parameters.query}</div>;
* if (status === "complete") return <div>{result}</div>;
* return <div>Preparing...</div>;
* },
* },
* [],
* );
* ```
*
* @example
* ```tsx
* useRenderTool(
* {
* name: "summarize",
* parameters: z.object({ text: z.string() }),
* agentId: "research-agent",
* render: ({ name, status }) => <div>{name}: {status}</div>,
* },
* [selectedAgentId],
* );
* ```
*/
function useRenderTool(config, deps) {
const { copilotkit } = require_CopilotKitProvider.useCopilotKit();
const extraDeps = deps ?? EMPTY_DEPS;
(0, react.useEffect)(() => {
const renderer = config.name === "*" && !config.parameters ? require_defineToolCallRenderer.defineToolCallRenderer({
name: "*",
render: (props) => config.render({
...props,
parameters: props.args
}),
...config.agentId ? { agentId: config.agentId } : {}
}) : require_defineToolCallRenderer.defineToolCallRenderer({
name: config.name,
args: config.parameters,
render: (props) => config.render({
...props,
parameters: props.args
}),
...config.agentId ? { agentId: config.agentId } : {}
});
copilotkit.addHookRenderToolCall(renderer);
}, [
config.name,
copilotkit,
extraDeps.length,
...extraDeps
]);
}
//#endregion
exports.useRenderTool = useRenderTool;
//# sourceMappingURL=use-render-tool.cjs.map