@copilotkitnext/react 1.51.5-next.2 → 1.51.5-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/hooks/index.cjs +1 -0
  2. package/dist/hooks/index.d.cts +1 -0
  3. package/dist/hooks/index.d.mts +1 -0
  4. package/dist/hooks/index.mjs +1 -0
  5. package/dist/hooks/use-component.cjs +60 -0
  6. package/dist/hooks/use-component.cjs.map +1 -0
  7. package/dist/hooks/use-component.d.cts +51 -0
  8. package/dist/hooks/use-component.d.cts.map +1 -0
  9. package/dist/hooks/use-component.d.mts +51 -0
  10. package/dist/hooks/use-component.d.mts.map +1 -0
  11. package/dist/hooks/use-component.mjs +59 -0
  12. package/dist/hooks/use-component.mjs.map +1 -0
  13. package/dist/hooks/use-default-render-tool.cjs +33 -3
  14. package/dist/hooks/use-default-render-tool.cjs.map +1 -1
  15. package/dist/hooks/use-default-render-tool.d.cts +33 -3
  16. package/dist/hooks/use-default-render-tool.d.cts.map +1 -1
  17. package/dist/hooks/use-default-render-tool.d.mts +33 -3
  18. package/dist/hooks/use-default-render-tool.d.mts.map +1 -1
  19. package/dist/hooks/use-default-render-tool.mjs +33 -3
  20. package/dist/hooks/use-default-render-tool.mjs.map +1 -1
  21. package/dist/hooks/use-frontend-tool.cjs.map +1 -1
  22. package/dist/hooks/use-frontend-tool.mjs.map +1 -1
  23. package/dist/hooks/use-render-tool.cjs +41 -0
  24. package/dist/hooks/use-render-tool.cjs.map +1 -1
  25. package/dist/hooks/use-render-tool.d.cts +50 -0
  26. package/dist/hooks/use-render-tool.d.cts.map +1 -1
  27. package/dist/hooks/use-render-tool.d.mts +50 -0
  28. package/dist/hooks/use-render-tool.d.mts.map +1 -1
  29. package/dist/hooks/use-render-tool.mjs +41 -0
  30. package/dist/hooks/use-render-tool.mjs.map +1 -1
  31. package/dist/index.cjs +2 -0
  32. package/dist/index.d.cts +2 -1
  33. package/dist/index.d.mts +2 -1
  34. package/dist/index.mjs +2 -1
  35. package/dist/index.umd.js +129 -3
  36. package/dist/index.umd.js.map +1 -1
  37. package/dist/types/react-tool-call-renderer.d.cts +1 -1
  38. package/dist/types/react-tool-call-renderer.d.mts +1 -1
  39. package/package.json +6 -6
@@ -5,6 +5,47 @@ let react = require("react");
5
5
 
6
6
  //#region src/hooks/use-render-tool.tsx
7
7
  const EMPTY_DEPS = [];
8
+ /**
9
+ * Registers a renderer entry in CopilotKit's `renderToolCalls` registry.
10
+ *
11
+ * Key behavior:
12
+ * - deduplicates by `agentId:name` (latest registration wins),
13
+ * - keeps renderer entries on cleanup so historical chat tool calls can still render,
14
+ * - refreshes registration when `deps` change.
15
+ *
16
+ * @typeParam S - Zod schema type describing tool call args.
17
+ * @param config - Renderer config for wildcard or named tools.
18
+ * @param deps - Optional dependencies to refresh registration.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * useRenderTool(
23
+ * {
24
+ * name: "searchDocs",
25
+ * args: z.object({ query: z.string() }),
26
+ * render: ({ status, args, result }) => {
27
+ * if (status === "executing") return <div>Searching {args.query}</div>;
28
+ * if (status === "complete") return <div>{result}</div>;
29
+ * return <div>Preparing...</div>;
30
+ * },
31
+ * },
32
+ * [],
33
+ * );
34
+ * ```
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * useRenderTool(
39
+ * {
40
+ * name: "summarize",
41
+ * args: z.object({ text: z.string() }),
42
+ * agentId: "research-agent",
43
+ * render: ({ name, status }) => <div>{name}: {status}</div>,
44
+ * },
45
+ * [selectedAgentId],
46
+ * );
47
+ * ```
48
+ */
8
49
  function useRenderTool(config, deps) {
9
50
  const { copilotkit } = require_CopilotKitProvider.useCopilotKit();
10
51
  const extraDeps = deps ?? EMPTY_DEPS;
@@ -1 +1 @@
1
- {"version":3,"file":"use-render-tool.cjs","names":["useCopilotKit","defineToolCallRenderer"],"sources":["../../src/hooks/use-render-tool.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { z } from \"zod\";\nimport { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { defineToolCallRenderer } from \"../types/defineToolCallRenderer\";\nimport type { ReactToolCallRenderer } from \"../types/react-tool-call-renderer\";\n\nconst EMPTY_DEPS: ReadonlyArray<unknown> = [];\n\nexport interface RenderToolInProgressProps<S extends z.ZodTypeAny> {\n name: string;\n args: Partial<z.infer<S>>;\n status: \"inProgress\";\n result: undefined;\n}\n\nexport interface RenderToolExecutingProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"executing\";\n result: undefined;\n}\n\nexport interface RenderToolCompleteProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"complete\";\n result: string;\n}\n\nexport type RenderToolProps<S extends z.ZodTypeAny> =\n | RenderToolInProgressProps<S>\n | RenderToolExecutingProps<S>\n | RenderToolCompleteProps<S>;\n\ntype RenderToolConfig<S extends z.ZodTypeAny> = {\n name: string;\n args?: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n};\n\n// Overload: wildcard without args\nexport function useRenderTool(\n config: {\n name: \"*\";\n render: (props: any) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n// Overload: named tool with args\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: {\n name: string;\n args: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n// Implementation\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: RenderToolConfig<S>,\n deps?: ReadonlyArray<unknown>,\n): void {\n const { copilotkit } = useCopilotKit();\n const extraDeps = deps ?? EMPTY_DEPS;\n\n useEffect(() => {\n // Build the ReactToolCallRenderer via defineToolCallRenderer\n const renderer =\n config.name === \"*\" && !config.args\n ? defineToolCallRenderer({\n name: \"*\",\n render: config.render as any,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n })\n : defineToolCallRenderer({\n name: config.name,\n args: config.args!,\n render: config.render as any,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n });\n\n // Dedupe by \"agentId:name\" key, same pattern as useFrontendTool\n const keyOf = (rc: ReactToolCallRenderer<any>) =>\n `${rc.agentId ?? \"\"}:${rc.name}`;\n const currentRenderToolCalls =\n copilotkit.renderToolCalls as ReactToolCallRenderer<any>[];\n\n const mergedMap = new Map<string, ReactToolCallRenderer<any>>();\n for (const rc of currentRenderToolCalls) {\n mergedMap.set(keyOf(rc), rc);\n }\n\n mergedMap.set(keyOf(renderer), renderer);\n\n copilotkit.setRenderToolCalls(Array.from(mergedMap.values()));\n\n // No cleanup removal — keeps renderer for chat history, same as useFrontendTool\n }, [config.name, copilotkit, extraDeps.length, ...extraDeps]);\n}\n"],"mappings":";;;;;;AAMA,MAAM,aAAqC,EAAE;AAyD7C,SAAgB,cACd,QACA,MACM;CACN,MAAM,EAAE,eAAeA,0CAAe;CACtC,MAAM,YAAY,QAAQ;AAE1B,4BAAgB;EAEd,MAAM,WACJ,OAAO,SAAS,OAAO,CAAC,OAAO,OAC3BC,sDAAuB;GACrB,MAAM;GACN,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC,GACFA,sDAAuB;GACrB,MAAM,OAAO;GACb,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC;EAGR,MAAM,SAAS,OACb,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG;EAC5B,MAAM,yBACJ,WAAW;EAEb,MAAM,4BAAY,IAAI,KAAyC;AAC/D,OAAK,MAAM,MAAM,uBACf,WAAU,IAAI,MAAM,GAAG,EAAE,GAAG;AAG9B,YAAU,IAAI,MAAM,SAAS,EAAE,SAAS;AAExC,aAAW,mBAAmB,MAAM,KAAK,UAAU,QAAQ,CAAC,CAAC;IAG5D;EAAC,OAAO;EAAM;EAAY,UAAU;EAAQ,GAAG;EAAU,CAAC"}
1
+ {"version":3,"file":"use-render-tool.cjs","names":["useCopilotKit","defineToolCallRenderer"],"sources":["../../src/hooks/use-render-tool.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { z } from \"zod\";\nimport { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { defineToolCallRenderer } from \"../types/defineToolCallRenderer\";\nimport type { ReactToolCallRenderer } from \"../types/react-tool-call-renderer\";\n\nconst EMPTY_DEPS: ReadonlyArray<unknown> = [];\n\nexport interface RenderToolInProgressProps<S extends z.ZodTypeAny> {\n name: string;\n args: Partial<z.infer<S>>;\n status: \"inProgress\";\n result: undefined;\n}\n\nexport interface RenderToolExecutingProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"executing\";\n result: undefined;\n}\n\nexport interface RenderToolCompleteProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"complete\";\n result: string;\n}\n\nexport type RenderToolProps<S extends z.ZodTypeAny> =\n | RenderToolInProgressProps<S>\n | RenderToolExecutingProps<S>\n | RenderToolCompleteProps<S>;\n\ntype RenderToolConfig<S extends z.ZodTypeAny> = {\n name: string;\n args?: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n};\n\n/**\n * Registers a wildcard (`\"*\"`) renderer for tool calls.\n *\n * The wildcard renderer is used as a fallback when no exact name-matched\n * renderer is registered for a tool call.\n *\n * @param config - Wildcard renderer configuration.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"*\",\n * render: ({ name, status }) => (\n * <div>\n * {status === \"complete\" ? \"✓\" : \"⏳\"} {name}\n * </div>\n * ),\n * },\n * [],\n * );\n * ```\n */\nexport function useRenderTool(\n config: {\n name: \"*\";\n render: (props: any) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n/**\n * Registers a name-scoped renderer for tool calls.\n *\n * The provided `args` Zod schema defines the typed shape of `props.args`\n * in `render` for `executing` and `complete` states.\n *\n * @typeParam S - Zod schema type describing tool call args.\n * @param config - Named renderer configuration.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"searchDocs\",\n * args: z.object({ query: z.string() }),\n * render: ({ status, args, result }) => {\n * if (status === \"inProgress\") return <div>Preparing...</div>;\n * if (status === \"executing\") return <div>Searching {args.query}</div>;\n * return <div>{result}</div>;\n * },\n * },\n * [],\n * );\n * ```\n */\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: {\n name: string;\n args: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n/**\n * Registers a renderer entry in CopilotKit's `renderToolCalls` registry.\n *\n * Key behavior:\n * - deduplicates by `agentId:name` (latest registration wins),\n * - keeps renderer entries on cleanup so historical chat tool calls can still render,\n * - refreshes registration when `deps` change.\n *\n * @typeParam S - Zod schema type describing tool call args.\n * @param config - Renderer config for wildcard or named tools.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"searchDocs\",\n * args: z.object({ query: z.string() }),\n * render: ({ status, args, result }) => {\n * if (status === \"executing\") return <div>Searching {args.query}</div>;\n * if (status === \"complete\") return <div>{result}</div>;\n * return <div>Preparing...</div>;\n * },\n * },\n * [],\n * );\n * ```\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"summarize\",\n * args: z.object({ text: z.string() }),\n * agentId: \"research-agent\",\n * render: ({ name, status }) => <div>{name}: {status}</div>,\n * },\n * [selectedAgentId],\n * );\n * ```\n */\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: RenderToolConfig<S>,\n deps?: ReadonlyArray<unknown>,\n): void {\n const { copilotkit } = useCopilotKit();\n const extraDeps = deps ?? EMPTY_DEPS;\n\n useEffect(() => {\n // Build the ReactToolCallRenderer via defineToolCallRenderer\n const renderer =\n config.name === \"*\" && !config.args\n ? defineToolCallRenderer({\n name: \"*\",\n render: config.render,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n })\n : defineToolCallRenderer({\n name: config.name,\n args: config.args!,\n render: config.render,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n });\n\n // Dedupe by \"agentId:name\" key, same pattern as useFrontendTool\n const keyOf = (rc: ReactToolCallRenderer) =>\n `${rc.agentId ?? \"\"}:${rc.name}`;\n const currentRenderToolCalls =\n copilotkit.renderToolCalls as ReactToolCallRenderer[];\n\n const mergedMap = new Map<string, ReactToolCallRenderer>();\n for (const rc of currentRenderToolCalls) {\n mergedMap.set(keyOf(rc), rc);\n }\n\n mergedMap.set(keyOf(renderer), renderer);\n\n copilotkit.setRenderToolCalls(Array.from(mergedMap.values()));\n\n // No cleanup removal — keeps renderer for chat history, same as useFrontendTool\n }, [config.name, copilotkit, extraDeps.length, ...extraDeps]);\n}\n"],"mappings":";;;;;;AAMA,MAAM,aAAqC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiJ7C,SAAgB,cACd,QACA,MACM;CACN,MAAM,EAAE,eAAeA,0CAAe;CACtC,MAAM,YAAY,QAAQ;AAE1B,4BAAgB;EAEd,MAAM,WACJ,OAAO,SAAS,OAAO,CAAC,OAAO,OAC3BC,sDAAuB;GACrB,MAAM;GACN,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC,GACFA,sDAAuB;GACrB,MAAM,OAAO;GACb,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC;EAGR,MAAM,SAAS,OACb,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG;EAC5B,MAAM,yBACJ,WAAW;EAEb,MAAM,4BAAY,IAAI,KAAoC;AAC1D,OAAK,MAAM,MAAM,uBACf,WAAU,IAAI,MAAM,GAAG,EAAE,GAAG;AAG9B,YAAU,IAAI,MAAM,SAAS,EAAE,SAAS;AAExC,aAAW,mBAAmB,MAAM,KAAK,UAAU,QAAQ,CAAC,CAAC;IAG5D;EAAC,OAAO;EAAM;EAAY,UAAU;EAAQ,GAAG;EAAU,CAAC"}
@@ -20,11 +20,61 @@ interface RenderToolCompleteProps<S extends z.ZodTypeAny> {
20
20
  result: string;
21
21
  }
22
22
  type RenderToolProps<S extends z.ZodTypeAny> = RenderToolInProgressProps<S> | RenderToolExecutingProps<S> | RenderToolCompleteProps<S>;
23
+ /**
24
+ * Registers a wildcard (`"*"`) renderer for tool calls.
25
+ *
26
+ * The wildcard renderer is used as a fallback when no exact name-matched
27
+ * renderer is registered for a tool call.
28
+ *
29
+ * @param config - Wildcard renderer configuration.
30
+ * @param deps - Optional dependencies to refresh registration.
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * useRenderTool(
35
+ * {
36
+ * name: "*",
37
+ * render: ({ name, status }) => (
38
+ * <div>
39
+ * {status === "complete" ? "✓" : "⏳"} {name}
40
+ * </div>
41
+ * ),
42
+ * },
43
+ * [],
44
+ * );
45
+ * ```
46
+ */
23
47
  declare function useRenderTool(config: {
24
48
  name: "*";
25
49
  render: (props: any) => React.ReactElement;
26
50
  agentId?: string;
27
51
  }, deps?: ReadonlyArray<unknown>): void;
52
+ /**
53
+ * Registers a name-scoped renderer for tool calls.
54
+ *
55
+ * The provided `args` Zod schema defines the typed shape of `props.args`
56
+ * in `render` for `executing` and `complete` states.
57
+ *
58
+ * @typeParam S - Zod schema type describing tool call args.
59
+ * @param config - Named renderer configuration.
60
+ * @param deps - Optional dependencies to refresh registration.
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * useRenderTool(
65
+ * {
66
+ * name: "searchDocs",
67
+ * args: z.object({ query: z.string() }),
68
+ * render: ({ status, args, result }) => {
69
+ * if (status === "inProgress") return <div>Preparing...</div>;
70
+ * if (status === "executing") return <div>Searching {args.query}</div>;
71
+ * return <div>{result}</div>;
72
+ * },
73
+ * },
74
+ * [],
75
+ * );
76
+ * ```
77
+ */
28
78
  declare function useRenderTool<S extends z.ZodTypeAny>(config: {
29
79
  name: string;
30
80
  args: S;
@@ -1 +1 @@
1
- {"version":3,"file":"use-render-tool.d.cts","names":[],"sources":["../../src/hooks/use-render-tool.tsx"],"mappings":";;;UAQiB,yBAAA,WAAoC,CAAA,CAAE,UAAA;EACrD,IAAA;EACA,IAAA,EAAM,OAAA,CAAQ,CAAA,CAAE,KAAA,CAAM,CAAA;EACtB,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,wBAAA,WAAmC,CAAA,CAAE,UAAA;EACpD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,uBAAA,WAAkC,CAAA,CAAE,UAAA;EACnD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,KAGU,eAAA,WAA0B,CAAA,CAAE,UAAA,IACpC,yBAAA,CAA0B,CAAA,IAC1B,wBAAA,CAAyB,CAAA,IACzB,uBAAA,CAAwB,CAAA;AAAA,iBAUZ,aAAA,CACd,MAAA;EACE,IAAA;EACA,MAAA,GAAS,KAAA,UAAe,KAAA,CAAM,YAAA;EAC9B,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA;AAAA,iBAIO,aAAA,WAAwB,CAAA,CAAE,UAAA,CAAA,CACxC,MAAA;EACE,IAAA;EACA,IAAA,EAAM,CAAA;EACN,MAAA,GAAS,KAAA,EAAO,eAAA,CAAgB,CAAA,MAAO,KAAA,CAAM,YAAA;EAC7C,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA"}
1
+ {"version":3,"file":"use-render-tool.d.cts","names":[],"sources":["../../src/hooks/use-render-tool.tsx"],"mappings":";;;UAQiB,yBAAA,WAAoC,CAAA,CAAE,UAAA;EACrD,IAAA;EACA,IAAA,EAAM,OAAA,CAAQ,CAAA,CAAE,KAAA,CAAM,CAAA;EACtB,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,wBAAA,WAAmC,CAAA,CAAE,UAAA;EACpD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,uBAAA,WAAkC,CAAA,CAAE,UAAA;EACnD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,KAGU,eAAA,WAA0B,CAAA,CAAE,UAAA,IACpC,yBAAA,CAA0B,CAAA,IAC1B,wBAAA,CAAyB,CAAA,IACzB,uBAAA,CAAwB,CAAA;;;;;;AAjB5B;;;;;;;;;;;;;;;;;;;iBAkDgB,aAAA,CACd,MAAA;EACE,IAAA;EACA,MAAA,GAAS,KAAA,UAAe,KAAA,CAAM,YAAA;EAC9B,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA;;;;;;;;;;;;;;;;;AA1CT;;;;;;;;;;iBAuEgB,aAAA,WAAwB,CAAA,CAAE,UAAA,CAAA,CACxC,MAAA;EACE,IAAA;EACA,IAAA,EAAM,CAAA;EACN,MAAA,GAAS,KAAA,EAAO,eAAA,CAAgB,CAAA,MAAO,KAAA,CAAM,YAAA;EAC7C,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA"}
@@ -20,11 +20,61 @@ interface RenderToolCompleteProps<S extends z.ZodTypeAny> {
20
20
  result: string;
21
21
  }
22
22
  type RenderToolProps<S extends z.ZodTypeAny> = RenderToolInProgressProps<S> | RenderToolExecutingProps<S> | RenderToolCompleteProps<S>;
23
+ /**
24
+ * Registers a wildcard (`"*"`) renderer for tool calls.
25
+ *
26
+ * The wildcard renderer is used as a fallback when no exact name-matched
27
+ * renderer is registered for a tool call.
28
+ *
29
+ * @param config - Wildcard renderer configuration.
30
+ * @param deps - Optional dependencies to refresh registration.
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * useRenderTool(
35
+ * {
36
+ * name: "*",
37
+ * render: ({ name, status }) => (
38
+ * <div>
39
+ * {status === "complete" ? "✓" : "⏳"} {name}
40
+ * </div>
41
+ * ),
42
+ * },
43
+ * [],
44
+ * );
45
+ * ```
46
+ */
23
47
  declare function useRenderTool(config: {
24
48
  name: "*";
25
49
  render: (props: any) => React.ReactElement;
26
50
  agentId?: string;
27
51
  }, deps?: ReadonlyArray<unknown>): void;
52
+ /**
53
+ * Registers a name-scoped renderer for tool calls.
54
+ *
55
+ * The provided `args` Zod schema defines the typed shape of `props.args`
56
+ * in `render` for `executing` and `complete` states.
57
+ *
58
+ * @typeParam S - Zod schema type describing tool call args.
59
+ * @param config - Named renderer configuration.
60
+ * @param deps - Optional dependencies to refresh registration.
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * useRenderTool(
65
+ * {
66
+ * name: "searchDocs",
67
+ * args: z.object({ query: z.string() }),
68
+ * render: ({ status, args, result }) => {
69
+ * if (status === "inProgress") return <div>Preparing...</div>;
70
+ * if (status === "executing") return <div>Searching {args.query}</div>;
71
+ * return <div>{result}</div>;
72
+ * },
73
+ * },
74
+ * [],
75
+ * );
76
+ * ```
77
+ */
28
78
  declare function useRenderTool<S extends z.ZodTypeAny>(config: {
29
79
  name: string;
30
80
  args: S;
@@ -1 +1 @@
1
- {"version":3,"file":"use-render-tool.d.mts","names":[],"sources":["../../src/hooks/use-render-tool.tsx"],"mappings":";;;UAQiB,yBAAA,WAAoC,CAAA,CAAE,UAAA;EACrD,IAAA;EACA,IAAA,EAAM,OAAA,CAAQ,CAAA,CAAE,KAAA,CAAM,CAAA;EACtB,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,wBAAA,WAAmC,CAAA,CAAE,UAAA;EACpD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,uBAAA,WAAkC,CAAA,CAAE,UAAA;EACnD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,KAGU,eAAA,WAA0B,CAAA,CAAE,UAAA,IACpC,yBAAA,CAA0B,CAAA,IAC1B,wBAAA,CAAyB,CAAA,IACzB,uBAAA,CAAwB,CAAA;AAAA,iBAUZ,aAAA,CACd,MAAA;EACE,IAAA;EACA,MAAA,GAAS,KAAA,UAAe,KAAA,CAAM,YAAA;EAC9B,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA;AAAA,iBAIO,aAAA,WAAwB,CAAA,CAAE,UAAA,CAAA,CACxC,MAAA;EACE,IAAA;EACA,IAAA,EAAM,CAAA;EACN,MAAA,GAAS,KAAA,EAAO,eAAA,CAAgB,CAAA,MAAO,KAAA,CAAM,YAAA;EAC7C,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA"}
1
+ {"version":3,"file":"use-render-tool.d.mts","names":[],"sources":["../../src/hooks/use-render-tool.tsx"],"mappings":";;;UAQiB,yBAAA,WAAoC,CAAA,CAAE,UAAA;EACrD,IAAA;EACA,IAAA,EAAM,OAAA,CAAQ,CAAA,CAAE,KAAA,CAAM,CAAA;EACtB,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,wBAAA,WAAmC,CAAA,CAAE,UAAA;EACpD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,uBAAA,WAAkC,CAAA,CAAE,UAAA;EACnD,IAAA;EACA,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA;EACd,MAAA;EACA,MAAA;AAAA;AAAA,KAGU,eAAA,WAA0B,CAAA,CAAE,UAAA,IACpC,yBAAA,CAA0B,CAAA,IAC1B,wBAAA,CAAyB,CAAA,IACzB,uBAAA,CAAwB,CAAA;;;;;;AAjB5B;;;;;;;;;;;;;;;;;;;iBAkDgB,aAAA,CACd,MAAA;EACE,IAAA;EACA,MAAA,GAAS,KAAA,UAAe,KAAA,CAAM,YAAA;EAC9B,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA;;;;;;;;;;;;;;;;;AA1CT;;;;;;;;;;iBAuEgB,aAAA,WAAwB,CAAA,CAAE,UAAA,CAAA,CACxC,MAAA;EACE,IAAA;EACA,IAAA,EAAM,CAAA;EACN,MAAA,GAAS,KAAA,EAAO,eAAA,CAAgB,CAAA,MAAO,KAAA,CAAM,YAAA;EAC7C,OAAA;AAAA,GAEF,IAAA,GAAO,aAAA"}
@@ -4,6 +4,47 @@ import { useEffect } from "react";
4
4
 
5
5
  //#region src/hooks/use-render-tool.tsx
6
6
  const EMPTY_DEPS = [];
7
+ /**
8
+ * Registers a renderer entry in CopilotKit's `renderToolCalls` registry.
9
+ *
10
+ * Key behavior:
11
+ * - deduplicates by `agentId:name` (latest registration wins),
12
+ * - keeps renderer entries on cleanup so historical chat tool calls can still render,
13
+ * - refreshes registration when `deps` change.
14
+ *
15
+ * @typeParam S - Zod schema type describing tool call args.
16
+ * @param config - Renderer config for wildcard or named tools.
17
+ * @param deps - Optional dependencies to refresh registration.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * useRenderTool(
22
+ * {
23
+ * name: "searchDocs",
24
+ * args: z.object({ query: z.string() }),
25
+ * render: ({ status, args, result }) => {
26
+ * if (status === "executing") return <div>Searching {args.query}</div>;
27
+ * if (status === "complete") return <div>{result}</div>;
28
+ * return <div>Preparing...</div>;
29
+ * },
30
+ * },
31
+ * [],
32
+ * );
33
+ * ```
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * useRenderTool(
38
+ * {
39
+ * name: "summarize",
40
+ * args: z.object({ text: z.string() }),
41
+ * agentId: "research-agent",
42
+ * render: ({ name, status }) => <div>{name}: {status}</div>,
43
+ * },
44
+ * [selectedAgentId],
45
+ * );
46
+ * ```
47
+ */
7
48
  function useRenderTool(config, deps) {
8
49
  const { copilotkit } = useCopilotKit();
9
50
  const extraDeps = deps ?? EMPTY_DEPS;
@@ -1 +1 @@
1
- {"version":3,"file":"use-render-tool.mjs","names":[],"sources":["../../src/hooks/use-render-tool.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { z } from \"zod\";\nimport { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { defineToolCallRenderer } from \"../types/defineToolCallRenderer\";\nimport type { ReactToolCallRenderer } from \"../types/react-tool-call-renderer\";\n\nconst EMPTY_DEPS: ReadonlyArray<unknown> = [];\n\nexport interface RenderToolInProgressProps<S extends z.ZodTypeAny> {\n name: string;\n args: Partial<z.infer<S>>;\n status: \"inProgress\";\n result: undefined;\n}\n\nexport interface RenderToolExecutingProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"executing\";\n result: undefined;\n}\n\nexport interface RenderToolCompleteProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"complete\";\n result: string;\n}\n\nexport type RenderToolProps<S extends z.ZodTypeAny> =\n | RenderToolInProgressProps<S>\n | RenderToolExecutingProps<S>\n | RenderToolCompleteProps<S>;\n\ntype RenderToolConfig<S extends z.ZodTypeAny> = {\n name: string;\n args?: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n};\n\n// Overload: wildcard without args\nexport function useRenderTool(\n config: {\n name: \"*\";\n render: (props: any) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n// Overload: named tool with args\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: {\n name: string;\n args: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n// Implementation\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: RenderToolConfig<S>,\n deps?: ReadonlyArray<unknown>,\n): void {\n const { copilotkit } = useCopilotKit();\n const extraDeps = deps ?? EMPTY_DEPS;\n\n useEffect(() => {\n // Build the ReactToolCallRenderer via defineToolCallRenderer\n const renderer =\n config.name === \"*\" && !config.args\n ? defineToolCallRenderer({\n name: \"*\",\n render: config.render as any,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n })\n : defineToolCallRenderer({\n name: config.name,\n args: config.args!,\n render: config.render as any,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n });\n\n // Dedupe by \"agentId:name\" key, same pattern as useFrontendTool\n const keyOf = (rc: ReactToolCallRenderer<any>) =>\n `${rc.agentId ?? \"\"}:${rc.name}`;\n const currentRenderToolCalls =\n copilotkit.renderToolCalls as ReactToolCallRenderer<any>[];\n\n const mergedMap = new Map<string, ReactToolCallRenderer<any>>();\n for (const rc of currentRenderToolCalls) {\n mergedMap.set(keyOf(rc), rc);\n }\n\n mergedMap.set(keyOf(renderer), renderer);\n\n copilotkit.setRenderToolCalls(Array.from(mergedMap.values()));\n\n // No cleanup removal — keeps renderer for chat history, same as useFrontendTool\n }, [config.name, copilotkit, extraDeps.length, ...extraDeps]);\n}\n"],"mappings":";;;;;AAMA,MAAM,aAAqC,EAAE;AAyD7C,SAAgB,cACd,QACA,MACM;CACN,MAAM,EAAE,eAAe,eAAe;CACtC,MAAM,YAAY,QAAQ;AAE1B,iBAAgB;EAEd,MAAM,WACJ,OAAO,SAAS,OAAO,CAAC,OAAO,OAC3B,uBAAuB;GACrB,MAAM;GACN,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC,GACF,uBAAuB;GACrB,MAAM,OAAO;GACb,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC;EAGR,MAAM,SAAS,OACb,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG;EAC5B,MAAM,yBACJ,WAAW;EAEb,MAAM,4BAAY,IAAI,KAAyC;AAC/D,OAAK,MAAM,MAAM,uBACf,WAAU,IAAI,MAAM,GAAG,EAAE,GAAG;AAG9B,YAAU,IAAI,MAAM,SAAS,EAAE,SAAS;AAExC,aAAW,mBAAmB,MAAM,KAAK,UAAU,QAAQ,CAAC,CAAC;IAG5D;EAAC,OAAO;EAAM;EAAY,UAAU;EAAQ,GAAG;EAAU,CAAC"}
1
+ {"version":3,"file":"use-render-tool.mjs","names":[],"sources":["../../src/hooks/use-render-tool.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { z } from \"zod\";\nimport { useCopilotKit } from \"../providers/CopilotKitProvider\";\nimport { defineToolCallRenderer } from \"../types/defineToolCallRenderer\";\nimport type { ReactToolCallRenderer } from \"../types/react-tool-call-renderer\";\n\nconst EMPTY_DEPS: ReadonlyArray<unknown> = [];\n\nexport interface RenderToolInProgressProps<S extends z.ZodTypeAny> {\n name: string;\n args: Partial<z.infer<S>>;\n status: \"inProgress\";\n result: undefined;\n}\n\nexport interface RenderToolExecutingProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"executing\";\n result: undefined;\n}\n\nexport interface RenderToolCompleteProps<S extends z.ZodTypeAny> {\n name: string;\n args: z.infer<S>;\n status: \"complete\";\n result: string;\n}\n\nexport type RenderToolProps<S extends z.ZodTypeAny> =\n | RenderToolInProgressProps<S>\n | RenderToolExecutingProps<S>\n | RenderToolCompleteProps<S>;\n\ntype RenderToolConfig<S extends z.ZodTypeAny> = {\n name: string;\n args?: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n};\n\n/**\n * Registers a wildcard (`\"*\"`) renderer for tool calls.\n *\n * The wildcard renderer is used as a fallback when no exact name-matched\n * renderer is registered for a tool call.\n *\n * @param config - Wildcard renderer configuration.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"*\",\n * render: ({ name, status }) => (\n * <div>\n * {status === \"complete\" ? \"✓\" : \"⏳\"} {name}\n * </div>\n * ),\n * },\n * [],\n * );\n * ```\n */\nexport function useRenderTool(\n config: {\n name: \"*\";\n render: (props: any) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n/**\n * Registers a name-scoped renderer for tool calls.\n *\n * The provided `args` Zod schema defines the typed shape of `props.args`\n * in `render` for `executing` and `complete` states.\n *\n * @typeParam S - Zod schema type describing tool call args.\n * @param config - Named renderer configuration.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"searchDocs\",\n * args: z.object({ query: z.string() }),\n * render: ({ status, args, result }) => {\n * if (status === \"inProgress\") return <div>Preparing...</div>;\n * if (status === \"executing\") return <div>Searching {args.query}</div>;\n * return <div>{result}</div>;\n * },\n * },\n * [],\n * );\n * ```\n */\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: {\n name: string;\n args: S;\n render: (props: RenderToolProps<S>) => React.ReactElement;\n agentId?: string;\n },\n deps?: ReadonlyArray<unknown>,\n): void;\n\n/**\n * Registers a renderer entry in CopilotKit's `renderToolCalls` registry.\n *\n * Key behavior:\n * - deduplicates by `agentId:name` (latest registration wins),\n * - keeps renderer entries on cleanup so historical chat tool calls can still render,\n * - refreshes registration when `deps` change.\n *\n * @typeParam S - Zod schema type describing tool call args.\n * @param config - Renderer config for wildcard or named tools.\n * @param deps - Optional dependencies to refresh registration.\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"searchDocs\",\n * args: z.object({ query: z.string() }),\n * render: ({ status, args, result }) => {\n * if (status === \"executing\") return <div>Searching {args.query}</div>;\n * if (status === \"complete\") return <div>{result}</div>;\n * return <div>Preparing...</div>;\n * },\n * },\n * [],\n * );\n * ```\n *\n * @example\n * ```tsx\n * useRenderTool(\n * {\n * name: \"summarize\",\n * args: z.object({ text: z.string() }),\n * agentId: \"research-agent\",\n * render: ({ name, status }) => <div>{name}: {status}</div>,\n * },\n * [selectedAgentId],\n * );\n * ```\n */\nexport function useRenderTool<S extends z.ZodTypeAny>(\n config: RenderToolConfig<S>,\n deps?: ReadonlyArray<unknown>,\n): void {\n const { copilotkit } = useCopilotKit();\n const extraDeps = deps ?? EMPTY_DEPS;\n\n useEffect(() => {\n // Build the ReactToolCallRenderer via defineToolCallRenderer\n const renderer =\n config.name === \"*\" && !config.args\n ? defineToolCallRenderer({\n name: \"*\",\n render: config.render,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n })\n : defineToolCallRenderer({\n name: config.name,\n args: config.args!,\n render: config.render,\n ...(config.agentId ? { agentId: config.agentId } : {}),\n });\n\n // Dedupe by \"agentId:name\" key, same pattern as useFrontendTool\n const keyOf = (rc: ReactToolCallRenderer) =>\n `${rc.agentId ?? \"\"}:${rc.name}`;\n const currentRenderToolCalls =\n copilotkit.renderToolCalls as ReactToolCallRenderer[];\n\n const mergedMap = new Map<string, ReactToolCallRenderer>();\n for (const rc of currentRenderToolCalls) {\n mergedMap.set(keyOf(rc), rc);\n }\n\n mergedMap.set(keyOf(renderer), renderer);\n\n copilotkit.setRenderToolCalls(Array.from(mergedMap.values()));\n\n // No cleanup removal — keeps renderer for chat history, same as useFrontendTool\n }, [config.name, copilotkit, extraDeps.length, ...extraDeps]);\n}\n"],"mappings":";;;;;AAMA,MAAM,aAAqC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiJ7C,SAAgB,cACd,QACA,MACM;CACN,MAAM,EAAE,eAAe,eAAe;CACtC,MAAM,YAAY,QAAQ;AAE1B,iBAAgB;EAEd,MAAM,WACJ,OAAO,SAAS,OAAO,CAAC,OAAO,OAC3B,uBAAuB;GACrB,MAAM;GACN,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC,GACF,uBAAuB;GACrB,MAAM,OAAO;GACb,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,SAAS,GAAG,EAAE;GACtD,CAAC;EAGR,MAAM,SAAS,OACb,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG;EAC5B,MAAM,yBACJ,WAAW;EAEb,MAAM,4BAAY,IAAI,KAAoC;AAC1D,OAAK,MAAM,MAAM,uBACf,WAAU,IAAI,MAAM,GAAG,EAAE,GAAG;AAG9B,YAAU,IAAI,MAAM,SAAS,EAAE,SAAS;AAExC,aAAW,mBAAmB,MAAM,KAAK,UAAU,QAAQ,CAAC,CAAC;IAG5D;EAAC,OAAO;EAAM;EAAY,UAAU;EAAQ,GAAG;EAAU,CAAC"}
package/dist/index.cjs CHANGED
@@ -13,6 +13,7 @@ require('./providers/index.cjs');
13
13
  const require_use_render_custom_messages = require('./hooks/use-render-custom-messages.cjs');
14
14
  const require_use_render_activity_message = require('./hooks/use-render-activity-message.cjs');
15
15
  const require_use_frontend_tool = require('./hooks/use-frontend-tool.cjs');
16
+ const require_use_component = require('./hooks/use-component.cjs');
16
17
  const require_defineToolCallRenderer = require('./types/defineToolCallRenderer.cjs');
17
18
  const require_use_render_tool = require('./hooks/use-render-tool.cjs');
18
19
  const require_use_default_render_tool = require('./hooks/use-default-render-tool.cjs');
@@ -93,6 +94,7 @@ exports.WildcardToolCallRender = require_WildcardToolCallRender.WildcardToolCall
93
94
  exports.defineToolCallRenderer = require_defineToolCallRenderer.defineToolCallRenderer;
94
95
  exports.useAgent = require_use_agent.useAgent;
95
96
  exports.useAgentContext = require_use_agent_context.useAgentContext;
97
+ exports.useComponent = require_use_component.useComponent;
96
98
  exports.useConfigureSuggestions = require_use_configure_suggestions.useConfigureSuggestions;
97
99
  exports.useCopilotChatConfiguration = require_CopilotChatConfigurationProvider.useCopilotChatConfiguration;
98
100
  exports.useCopilotKit = require_CopilotKitProvider.useCopilotKit;
package/dist/index.d.cts CHANGED
@@ -31,6 +31,7 @@ import { defineToolCallRenderer } from "./types/defineToolCallRenderer.cjs";
31
31
  import "./types/index.cjs";
32
32
  import { useRenderActivityMessage } from "./hooks/use-render-activity-message.cjs";
33
33
  import { useFrontendTool } from "./hooks/use-frontend-tool.cjs";
34
+ import { useComponent } from "./hooks/use-component.cjs";
34
35
  import { useRenderTool } from "./hooks/use-render-tool.cjs";
35
36
  import { useDefaultRenderTool } from "./hooks/use-default-render-tool.cjs";
36
37
  import { useHumanInTheLoop } from "./hooks/use-human-in-the-loop.cjs";
@@ -43,4 +44,4 @@ import { CopilotKitCoreReact, CopilotKitCoreReactConfig, CopilotKitCoreReactSubs
43
44
  import { CopilotKitContextValue, CopilotKitProvider, CopilotKitProviderProps, useCopilotKit } from "./providers/CopilotKitProvider.cjs";
44
45
  import "./providers/index.cjs";
45
46
  export * from "@ag-ui/client";
46
- export { AgentContextInput, AudioRecorderError, AudioRecorderState, CopilotChat, CopilotChatAssistantMessage, CopilotChatAssistantMessageProps, CopilotChatAudioRecorder, CopilotChatConfigurationProvider, CopilotChatConfigurationProviderProps, CopilotChatConfigurationValue, CopilotChatInput, CopilotChatInputProps, CopilotChatLabels, CopilotChatMessageView, CopilotChatMessageViewProps, CopilotChatProps, CopilotChatReasoningMessage, CopilotChatReasoningMessageProps, CopilotChatSuggestionPill, CopilotChatSuggestionPillProps, CopilotChatSuggestionView, CopilotChatSuggestionViewProps, CopilotChatToggleButton, DefaultCloseIcon as CopilotChatToggleButtonCloseIcon, DefaultOpenIcon as CopilotChatToggleButtonOpenIcon, CopilotChatToggleButtonProps, CopilotChatToolCallsView, CopilotChatToolCallsViewProps, CopilotChatUserMessage, CopilotChatUserMessageProps, CopilotChatView, CopilotChatViewProps, CopilotKitContextValue, CopilotKitCoreReact, CopilotKitCoreReactConfig, CopilotKitCoreReactSubscriber, CopilotKitInspector, CopilotKitInspectorProps, CopilotKitProvider, CopilotKitProviderProps, CopilotModalHeader, CopilotModalHeaderProps, CopilotPopup, CopilotPopupProps, CopilotPopupView, CopilotPopupViewProps, CopilotSidebar, CopilotSidebarProps, CopilotSidebarView, CopilotSidebarViewProps, JsonSerializable, MCPAppsActivityContent, MCPAppsActivityContentSchema, MCPAppsActivityRenderer, MCPAppsActivityType, ReactActivityMessageRenderer, ReactCustomMessageRenderer, ReactCustomMessageRendererPosition, ReactFrontendTool, ReactHumanInTheLoop, ReactToolCallRenderer, ToolsMenuItem, UseAgentUpdate, WildcardToolCallRender, defineToolCallRenderer, useAgent, useAgentContext, useConfigureSuggestions, useCopilotChatConfiguration, useCopilotKit, useDefaultRenderTool, useFrontendTool, useHumanInTheLoop, useRenderActivityMessage, useRenderCustomMessages, useRenderTool, useRenderToolCall, useSuggestions };
47
+ export { AgentContextInput, AudioRecorderError, AudioRecorderState, CopilotChat, CopilotChatAssistantMessage, CopilotChatAssistantMessageProps, CopilotChatAudioRecorder, CopilotChatConfigurationProvider, CopilotChatConfigurationProviderProps, CopilotChatConfigurationValue, CopilotChatInput, CopilotChatInputProps, CopilotChatLabels, CopilotChatMessageView, CopilotChatMessageViewProps, CopilotChatProps, CopilotChatReasoningMessage, CopilotChatReasoningMessageProps, CopilotChatSuggestionPill, CopilotChatSuggestionPillProps, CopilotChatSuggestionView, CopilotChatSuggestionViewProps, CopilotChatToggleButton, DefaultCloseIcon as CopilotChatToggleButtonCloseIcon, DefaultOpenIcon as CopilotChatToggleButtonOpenIcon, CopilotChatToggleButtonProps, CopilotChatToolCallsView, CopilotChatToolCallsViewProps, CopilotChatUserMessage, CopilotChatUserMessageProps, CopilotChatView, CopilotChatViewProps, CopilotKitContextValue, CopilotKitCoreReact, CopilotKitCoreReactConfig, CopilotKitCoreReactSubscriber, CopilotKitInspector, CopilotKitInspectorProps, CopilotKitProvider, CopilotKitProviderProps, CopilotModalHeader, CopilotModalHeaderProps, CopilotPopup, CopilotPopupProps, CopilotPopupView, CopilotPopupViewProps, CopilotSidebar, CopilotSidebarProps, CopilotSidebarView, CopilotSidebarViewProps, JsonSerializable, MCPAppsActivityContent, MCPAppsActivityContentSchema, MCPAppsActivityRenderer, MCPAppsActivityType, ReactActivityMessageRenderer, ReactCustomMessageRenderer, ReactCustomMessageRendererPosition, ReactFrontendTool, ReactHumanInTheLoop, ReactToolCallRenderer, ToolsMenuItem, UseAgentUpdate, WildcardToolCallRender, defineToolCallRenderer, useAgent, useAgentContext, useComponent, useConfigureSuggestions, useCopilotChatConfiguration, useCopilotKit, useDefaultRenderTool, useFrontendTool, useHumanInTheLoop, useRenderActivityMessage, useRenderCustomMessages, useRenderTool, useRenderToolCall, useSuggestions };
package/dist/index.d.mts CHANGED
@@ -31,6 +31,7 @@ import { defineToolCallRenderer } from "./types/defineToolCallRenderer.mjs";
31
31
  import "./types/index.mjs";
32
32
  import { useRenderActivityMessage } from "./hooks/use-render-activity-message.mjs";
33
33
  import { useFrontendTool } from "./hooks/use-frontend-tool.mjs";
34
+ import { useComponent } from "./hooks/use-component.mjs";
34
35
  import { useRenderTool } from "./hooks/use-render-tool.mjs";
35
36
  import { useDefaultRenderTool } from "./hooks/use-default-render-tool.mjs";
36
37
  import { useHumanInTheLoop } from "./hooks/use-human-in-the-loop.mjs";
@@ -43,4 +44,4 @@ import { CopilotKitCoreReact, CopilotKitCoreReactConfig, CopilotKitCoreReactSubs
43
44
  import { CopilotKitContextValue, CopilotKitProvider, CopilotKitProviderProps, useCopilotKit } from "./providers/CopilotKitProvider.mjs";
44
45
  import "./providers/index.mjs";
45
46
  export * from "@ag-ui/client";
46
- export { AgentContextInput, AudioRecorderError, AudioRecorderState, CopilotChat, CopilotChatAssistantMessage, CopilotChatAssistantMessageProps, CopilotChatAudioRecorder, CopilotChatConfigurationProvider, CopilotChatConfigurationProviderProps, CopilotChatConfigurationValue, CopilotChatInput, CopilotChatInputProps, CopilotChatLabels, CopilotChatMessageView, CopilotChatMessageViewProps, CopilotChatProps, CopilotChatReasoningMessage, CopilotChatReasoningMessageProps, CopilotChatSuggestionPill, CopilotChatSuggestionPillProps, CopilotChatSuggestionView, CopilotChatSuggestionViewProps, CopilotChatToggleButton, DefaultCloseIcon as CopilotChatToggleButtonCloseIcon, DefaultOpenIcon as CopilotChatToggleButtonOpenIcon, CopilotChatToggleButtonProps, CopilotChatToolCallsView, CopilotChatToolCallsViewProps, CopilotChatUserMessage, CopilotChatUserMessageProps, CopilotChatView, CopilotChatViewProps, CopilotKitContextValue, CopilotKitCoreReact, CopilotKitCoreReactConfig, CopilotKitCoreReactSubscriber, CopilotKitInspector, CopilotKitInspectorProps, CopilotKitProvider, CopilotKitProviderProps, CopilotModalHeader, CopilotModalHeaderProps, CopilotPopup, CopilotPopupProps, CopilotPopupView, CopilotPopupViewProps, CopilotSidebar, CopilotSidebarProps, CopilotSidebarView, CopilotSidebarViewProps, JsonSerializable, MCPAppsActivityContent, MCPAppsActivityContentSchema, MCPAppsActivityRenderer, MCPAppsActivityType, ReactActivityMessageRenderer, ReactCustomMessageRenderer, ReactCustomMessageRendererPosition, ReactFrontendTool, ReactHumanInTheLoop, ReactToolCallRenderer, ToolsMenuItem, UseAgentUpdate, WildcardToolCallRender, defineToolCallRenderer, useAgent, useAgentContext, useConfigureSuggestions, useCopilotChatConfiguration, useCopilotKit, useDefaultRenderTool, useFrontendTool, useHumanInTheLoop, useRenderActivityMessage, useRenderCustomMessages, useRenderTool, useRenderToolCall, useSuggestions };
47
+ export { AgentContextInput, AudioRecorderError, AudioRecorderState, CopilotChat, CopilotChatAssistantMessage, CopilotChatAssistantMessageProps, CopilotChatAudioRecorder, CopilotChatConfigurationProvider, CopilotChatConfigurationProviderProps, CopilotChatConfigurationValue, CopilotChatInput, CopilotChatInputProps, CopilotChatLabels, CopilotChatMessageView, CopilotChatMessageViewProps, CopilotChatProps, CopilotChatReasoningMessage, CopilotChatReasoningMessageProps, CopilotChatSuggestionPill, CopilotChatSuggestionPillProps, CopilotChatSuggestionView, CopilotChatSuggestionViewProps, CopilotChatToggleButton, DefaultCloseIcon as CopilotChatToggleButtonCloseIcon, DefaultOpenIcon as CopilotChatToggleButtonOpenIcon, CopilotChatToggleButtonProps, CopilotChatToolCallsView, CopilotChatToolCallsViewProps, CopilotChatUserMessage, CopilotChatUserMessageProps, CopilotChatView, CopilotChatViewProps, CopilotKitContextValue, CopilotKitCoreReact, CopilotKitCoreReactConfig, CopilotKitCoreReactSubscriber, CopilotKitInspector, CopilotKitInspectorProps, CopilotKitProvider, CopilotKitProviderProps, CopilotModalHeader, CopilotModalHeaderProps, CopilotPopup, CopilotPopupProps, CopilotPopupView, CopilotPopupViewProps, CopilotSidebar, CopilotSidebarProps, CopilotSidebarView, CopilotSidebarViewProps, JsonSerializable, MCPAppsActivityContent, MCPAppsActivityContentSchema, MCPAppsActivityRenderer, MCPAppsActivityType, ReactActivityMessageRenderer, ReactCustomMessageRenderer, ReactCustomMessageRendererPosition, ReactFrontendTool, ReactHumanInTheLoop, ReactToolCallRenderer, ToolsMenuItem, UseAgentUpdate, WildcardToolCallRender, defineToolCallRenderer, useAgent, useAgentContext, useComponent, useConfigureSuggestions, useCopilotChatConfiguration, useCopilotKit, useDefaultRenderTool, useFrontendTool, useHumanInTheLoop, useRenderActivityMessage, useRenderCustomMessages, useRenderTool, useRenderToolCall, useSuggestions };
package/dist/index.mjs CHANGED
@@ -12,6 +12,7 @@ import "./providers/index.mjs";
12
12
  import { useRenderCustomMessages } from "./hooks/use-render-custom-messages.mjs";
13
13
  import { useRenderActivityMessage } from "./hooks/use-render-activity-message.mjs";
14
14
  import { useFrontendTool } from "./hooks/use-frontend-tool.mjs";
15
+ import { useComponent } from "./hooks/use-component.mjs";
15
16
  import { defineToolCallRenderer } from "./types/defineToolCallRenderer.mjs";
16
17
  import { useRenderTool } from "./hooks/use-render-tool.mjs";
17
18
  import { useDefaultRenderTool } from "./hooks/use-default-render-tool.mjs";
@@ -42,4 +43,4 @@ import "./types/index.mjs";
42
43
 
43
44
  export * from "@ag-ui/client"
44
45
 
45
- export { AudioRecorderError, CopilotChat, CopilotChatAssistantMessage_default as CopilotChatAssistantMessage, CopilotChatAudioRecorder, CopilotChatConfigurationProvider, CopilotChatInput_default as CopilotChatInput, CopilotChatMessageView, CopilotChatReasoningMessage_default as CopilotChatReasoningMessage, CopilotChatSuggestionPill, CopilotChatSuggestionView, CopilotChatToggleButton, DefaultCloseIcon as CopilotChatToggleButtonCloseIcon, DefaultOpenIcon as CopilotChatToggleButtonOpenIcon, CopilotChatToolCallsView, CopilotChatUserMessage_default as CopilotChatUserMessage, CopilotChatView_default as CopilotChatView, CopilotKitCoreReact, CopilotKitInspector, CopilotKitProvider, CopilotModalHeader, CopilotPopup, CopilotPopupView, CopilotSidebar, CopilotSidebarView, MCPAppsActivityContentSchema, MCPAppsActivityRenderer, MCPAppsActivityType, UseAgentUpdate, WildcardToolCallRender, defineToolCallRenderer, useAgent, useAgentContext, useConfigureSuggestions, useCopilotChatConfiguration, useCopilotKit, useDefaultRenderTool, useFrontendTool, useHumanInTheLoop, useRenderActivityMessage, useRenderCustomMessages, useRenderTool, useRenderToolCall, useSuggestions };
46
+ export { AudioRecorderError, CopilotChat, CopilotChatAssistantMessage_default as CopilotChatAssistantMessage, CopilotChatAudioRecorder, CopilotChatConfigurationProvider, CopilotChatInput_default as CopilotChatInput, CopilotChatMessageView, CopilotChatReasoningMessage_default as CopilotChatReasoningMessage, CopilotChatSuggestionPill, CopilotChatSuggestionView, CopilotChatToggleButton, DefaultCloseIcon as CopilotChatToggleButtonCloseIcon, DefaultOpenIcon as CopilotChatToggleButtonOpenIcon, CopilotChatToolCallsView, CopilotChatUserMessage_default as CopilotChatUserMessage, CopilotChatView_default as CopilotChatView, CopilotKitCoreReact, CopilotKitInspector, CopilotKitProvider, CopilotModalHeader, CopilotPopup, CopilotPopupView, CopilotSidebar, CopilotSidebarView, MCPAppsActivityContentSchema, MCPAppsActivityRenderer, MCPAppsActivityType, UseAgentUpdate, WildcardToolCallRender, defineToolCallRenderer, useAgent, useAgentContext, useComponent, useConfigureSuggestions, useCopilotChatConfiguration, useCopilotKit, useDefaultRenderTool, useFrontendTool, useHumanInTheLoop, useRenderActivityMessage, useRenderCustomMessages, useRenderTool, useRenderToolCall, useSuggestions };
package/dist/index.umd.js CHANGED
@@ -2229,6 +2229,60 @@ window.parent.postMessage({jsonrpc:"2.0",method:"ui/notifications/sandbox-proxy-
2229
2229
  ]);
2230
2230
  }
2231
2231
 
2232
+ //#endregion
2233
+ //#region src/hooks/use-component.tsx
2234
+ /**
2235
+ * Registers a React component as a frontend tool renderer in chat.
2236
+ *
2237
+ * This hook is a convenience wrapper around `useFrontendTool` that:
2238
+ * - builds a model-facing tool description,
2239
+ * - forwards optional Zod parameters,
2240
+ * - renders your component with tool call args.
2241
+ *
2242
+ * Use this when you want to display a typed visual component for a tool call
2243
+ * without manually wiring a full frontend tool object.
2244
+ *
2245
+ * @typeParam T - Shape of tool args expected by the component.
2246
+ * @param config - Tool registration config.
2247
+ * @param deps - Optional dependencies to refresh registration (same semantics as `useEffect`).
2248
+ *
2249
+ * @example
2250
+ * ```tsx
2251
+ * useComponent({
2252
+ * name: "showWeatherCard",
2253
+ * parameters: z.object({ city: z.string() }),
2254
+ * component: ({ city }: { city: string }) => <div>{city}</div>,
2255
+ * });
2256
+ * ```
2257
+ *
2258
+ * @example
2259
+ * ```tsx
2260
+ * useComponent(
2261
+ * {
2262
+ * name: "renderProfile",
2263
+ * parameters: z.object({ userId: z.string() }),
2264
+ * component: ProfileCard,
2265
+ * agentId: "support-agent",
2266
+ * },
2267
+ * [selectedAgentId],
2268
+ * );
2269
+ * ```
2270
+ */
2271
+ function useComponent(config, deps) {
2272
+ const prefix = `Use this tool to display the "${config.name}" component in the chat. This tool renders a visual UI component for the user.`;
2273
+ const fullDescription = config.description ? `${prefix}\n\n${config.description}` : prefix;
2274
+ useFrontendTool({
2275
+ name: config.name,
2276
+ description: fullDescription,
2277
+ parameters: config.parameters,
2278
+ render: ({ args }) => {
2279
+ const Component = config.component;
2280
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Component, { ...args });
2281
+ },
2282
+ agentId: config.agentId
2283
+ }, deps);
2284
+ }
2285
+
2232
2286
  //#endregion
2233
2287
  //#region src/types/defineToolCallRenderer.ts
2234
2288
  function defineToolCallRenderer(def) {
@@ -2244,6 +2298,47 @@ window.parent.postMessage({jsonrpc:"2.0",method:"ui/notifications/sandbox-proxy-
2244
2298
  //#endregion
2245
2299
  //#region src/hooks/use-render-tool.tsx
2246
2300
  const EMPTY_DEPS = [];
2301
+ /**
2302
+ * Registers a renderer entry in CopilotKit's `renderToolCalls` registry.
2303
+ *
2304
+ * Key behavior:
2305
+ * - deduplicates by `agentId:name` (latest registration wins),
2306
+ * - keeps renderer entries on cleanup so historical chat tool calls can still render,
2307
+ * - refreshes registration when `deps` change.
2308
+ *
2309
+ * @typeParam S - Zod schema type describing tool call args.
2310
+ * @param config - Renderer config for wildcard or named tools.
2311
+ * @param deps - Optional dependencies to refresh registration.
2312
+ *
2313
+ * @example
2314
+ * ```tsx
2315
+ * useRenderTool(
2316
+ * {
2317
+ * name: "searchDocs",
2318
+ * args: z.object({ query: z.string() }),
2319
+ * render: ({ status, args, result }) => {
2320
+ * if (status === "executing") return <div>Searching {args.query}</div>;
2321
+ * if (status === "complete") return <div>{result}</div>;
2322
+ * return <div>Preparing...</div>;
2323
+ * },
2324
+ * },
2325
+ * [],
2326
+ * );
2327
+ * ```
2328
+ *
2329
+ * @example
2330
+ * ```tsx
2331
+ * useRenderTool(
2332
+ * {
2333
+ * name: "summarize",
2334
+ * args: z.object({ text: z.string() }),
2335
+ * agentId: "research-agent",
2336
+ * render: ({ name, status }) => <div>{name}: {status}</div>,
2337
+ * },
2338
+ * [selectedAgentId],
2339
+ * );
2340
+ * ```
2341
+ */
2247
2342
  function useRenderTool(config, deps) {
2248
2343
  const { copilotkit } = useCopilotKit();
2249
2344
  const extraDeps = deps !== null && deps !== void 0 ? deps : EMPTY_DEPS;
@@ -2278,10 +2373,40 @@ window.parent.postMessage({jsonrpc:"2.0",method:"ui/notifications/sandbox-proxy-
2278
2373
  //#endregion
2279
2374
  //#region src/hooks/use-default-render-tool.tsx
2280
2375
  /**
2281
- * Registers a wildcard ("*") tool-call renderer via `useRenderTool`.
2376
+ * Registers a wildcard (`"*"`) tool-call renderer via `useRenderTool`.
2377
+ *
2378
+ * - Call with no config to use CopilotKit's built-in default tool-call card.
2379
+ * - Pass `config.render` to replace the default UI with your own fallback renderer.
2282
2380
  *
2283
- * - Call with no arguments to get a sensible default UI.
2284
- * - Pass a `render` function to fully replace the default UI.
2381
+ * This is useful when you want a generic renderer for tools that do not have a
2382
+ * dedicated `useRenderTool({ name: "..." })` registration.
2383
+ *
2384
+ * @param config - Optional custom wildcard render function.
2385
+ * @param deps - Optional dependencies to refresh registration.
2386
+ *
2387
+ * @example
2388
+ * ```tsx
2389
+ * useDefaultRenderTool();
2390
+ * ```
2391
+ *
2392
+ * @example
2393
+ * ```tsx
2394
+ * useDefaultRenderTool({
2395
+ * render: ({ name, status }) => <div>{name}: {status}</div>,
2396
+ * });
2397
+ * ```
2398
+ *
2399
+ * @example
2400
+ * ```tsx
2401
+ * useDefaultRenderTool(
2402
+ * {
2403
+ * render: ({ name, result }) => (
2404
+ * <ToolEventRow title={name} payload={result} compact={compactMode} />
2405
+ * ),
2406
+ * },
2407
+ * [compactMode],
2408
+ * );
2409
+ * ```
2285
2410
  */
2286
2411
  function useDefaultRenderTool(config, deps) {
2287
2412
  var _config$render;
@@ -4730,6 +4855,7 @@ exports.WildcardToolCallRender = WildcardToolCallRender;
4730
4855
  exports.defineToolCallRenderer = defineToolCallRenderer;
4731
4856
  exports.useAgent = useAgent;
4732
4857
  exports.useAgentContext = useAgentContext;
4858
+ exports.useComponent = useComponent;
4733
4859
  exports.useConfigureSuggestions = useConfigureSuggestions;
4734
4860
  exports.useCopilotChatConfiguration = useCopilotChatConfiguration;
4735
4861
  exports.useCopilotKit = useCopilotKit;