80 lines
2.3 KiB
JavaScript
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
|