@copilotkit/react-ui 1.10.0-next.1 → 1.10.0-next.11

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 (108) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/dist/{chunk-O7KTFUAN.mjs → chunk-226ZMOE3.mjs} +2 -2
  3. package/dist/{chunk-WHDNKXMP.mjs → chunk-BJHJBS5M.mjs} +46 -6
  4. package/dist/chunk-BJHJBS5M.mjs.map +1 -0
  5. package/dist/{chunk-FOSKS7AI.mjs → chunk-FFJHOZX6.mjs} +5 -5
  6. package/dist/{chunk-QELAC6XJ.mjs → chunk-GBP47ONN.mjs} +2 -2
  7. package/dist/chunk-GBP47ONN.mjs.map +1 -0
  8. package/dist/{chunk-7CAK2CNK.mjs → chunk-GDSZGYCE.mjs} +2 -2
  9. package/dist/{chunk-O7PYQO73.mjs → chunk-GJ4SX4JE.mjs} +153 -37
  10. package/dist/chunk-GJ4SX4JE.mjs.map +1 -0
  11. package/dist/{chunk-TCIZDWPC.mjs → chunk-J5ZZR6YB.mjs} +2 -2
  12. package/dist/chunk-J5ZZR6YB.mjs.map +1 -0
  13. package/dist/{chunk-QN7T3GWI.mjs → chunk-JY2CSDKN.mjs} +4 -6
  14. package/dist/chunk-JY2CSDKN.mjs.map +1 -0
  15. package/dist/chunk-MIVUCSGO.mjs +126 -0
  16. package/dist/chunk-MIVUCSGO.mjs.map +1 -0
  17. package/dist/{chunk-OQM7D3Z3.mjs → chunk-T5QU6KSB.mjs} +8 -4
  18. package/dist/chunk-T5QU6KSB.mjs.map +1 -0
  19. package/dist/{chunk-Q2467VHZ.mjs → chunk-W26XFBEG.mjs} +2 -2
  20. package/dist/chunk-W26XFBEG.mjs.map +1 -0
  21. package/dist/chunk-Y44VLEUH.mjs +222 -0
  22. package/dist/chunk-Y44VLEUH.mjs.map +1 -0
  23. package/dist/components/chat/Chat.d.ts +52 -15
  24. package/dist/components/chat/Chat.js +1136 -869
  25. package/dist/components/chat/Chat.js.map +1 -1
  26. package/dist/components/chat/Chat.mjs +9 -8
  27. package/dist/components/chat/Header.js +6 -8
  28. package/dist/components/chat/Header.js.map +1 -1
  29. package/dist/components/chat/Header.mjs +4 -4
  30. package/dist/components/chat/Messages.d.ts +1 -1
  31. package/dist/components/chat/Messages.js +984 -23
  32. package/dist/components/chat/Messages.js.map +1 -1
  33. package/dist/components/chat/Messages.mjs +9 -1
  34. package/dist/components/chat/Modal.d.ts +2 -2
  35. package/dist/components/chat/Modal.js +1267 -931
  36. package/dist/components/chat/Modal.js.map +1 -1
  37. package/dist/components/chat/Modal.mjs +14 -13
  38. package/dist/components/chat/Popup.d.ts +1 -1
  39. package/dist/components/chat/Popup.js +1269 -933
  40. package/dist/components/chat/Popup.js.map +1 -1
  41. package/dist/components/chat/Popup.mjs +15 -14
  42. package/dist/components/chat/Sidebar.d.ts +1 -1
  43. package/dist/components/chat/Sidebar.js +1269 -933
  44. package/dist/components/chat/Sidebar.js.map +1 -1
  45. package/dist/components/chat/Sidebar.mjs +15 -14
  46. package/dist/components/chat/Suggestion.js +1 -1
  47. package/dist/components/chat/Suggestion.js.map +1 -1
  48. package/dist/components/chat/Suggestion.mjs +1 -1
  49. package/dist/components/chat/Suggestions.js +1 -1
  50. package/dist/components/chat/Suggestions.js.map +1 -1
  51. package/dist/components/chat/Suggestions.mjs +2 -2
  52. package/dist/components/chat/index.d.ts +2 -2
  53. package/dist/components/chat/index.js +1271 -935
  54. package/dist/components/chat/index.js.map +1 -1
  55. package/dist/components/chat/index.mjs +22 -21
  56. package/dist/components/chat/messages/LegacyRenderMessage.d.ts +28 -0
  57. package/dist/components/chat/messages/LegacyRenderMessage.js +980 -0
  58. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -0
  59. package/dist/components/chat/messages/LegacyRenderMessage.mjs +17 -0
  60. package/dist/components/chat/messages/LegacyRenderMessage.mjs.map +1 -0
  61. package/dist/components/chat/messages/RenderMessage.js +4 -0
  62. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  63. package/dist/components/chat/messages/RenderMessage.mjs +2 -2
  64. package/dist/components/chat/props.d.ts +94 -2
  65. package/dist/components/chat/props.js.map +1 -1
  66. package/dist/components/dev-console/console.d.ts +1 -0
  67. package/dist/components/dev-console/console.js +6 -8
  68. package/dist/components/dev-console/console.js.map +1 -1
  69. package/dist/components/dev-console/console.mjs +3 -3
  70. package/dist/components/dev-console/index.d.ts +1 -3
  71. package/dist/components/dev-console/index.js +7 -9
  72. package/dist/components/dev-console/index.js.map +1 -1
  73. package/dist/components/dev-console/index.mjs +5 -5
  74. package/dist/components/dev-console/utils.d.ts +2 -2
  75. package/dist/components/dev-console/utils.js +2 -4
  76. package/dist/components/dev-console/utils.js.map +1 -1
  77. package/dist/components/dev-console/utils.mjs +1 -1
  78. package/dist/components/index.d.ts +3 -5
  79. package/dist/components/index.js +1272 -936
  80. package/dist/components/index.js.map +1 -1
  81. package/dist/components/index.mjs +24 -23
  82. package/dist/index.d.ts +3 -5
  83. package/dist/index.js +1303 -967
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +24 -23
  86. package/package.json +6 -6
  87. package/src/components/chat/Chat.tsx +241 -23
  88. package/src/components/chat/Messages.tsx +58 -5
  89. package/src/components/chat/Modal.tsx +128 -41
  90. package/src/components/chat/Popup.tsx +20 -0
  91. package/src/components/chat/Sidebar.tsx +22 -0
  92. package/src/components/chat/Suggestion.tsx +1 -1
  93. package/src/components/chat/messages/LegacyRenderMessage.tsx +143 -0
  94. package/src/components/chat/messages/RenderMessage.tsx +3 -0
  95. package/src/components/chat/props.ts +110 -1
  96. package/src/components/dev-console/utils.ts +1 -6
  97. package/dist/chunk-7RNOT3GM.mjs +0 -144
  98. package/dist/chunk-7RNOT3GM.mjs.map +0 -1
  99. package/dist/chunk-O7PYQO73.mjs.map +0 -1
  100. package/dist/chunk-OQM7D3Z3.mjs.map +0 -1
  101. package/dist/chunk-Q2467VHZ.mjs.map +0 -1
  102. package/dist/chunk-QELAC6XJ.mjs.map +0 -1
  103. package/dist/chunk-QN7T3GWI.mjs.map +0 -1
  104. package/dist/chunk-TCIZDWPC.mjs.map +0 -1
  105. package/dist/chunk-WHDNKXMP.mjs.map +0 -1
  106. /package/dist/{chunk-O7KTFUAN.mjs.map → chunk-226ZMOE3.mjs.map} +0 -0
  107. /package/dist/{chunk-FOSKS7AI.mjs.map → chunk-FFJHOZX6.mjs.map} +0 -0
  108. /package/dist/{chunk-7CAK2CNK.mjs.map → chunk-GDSZGYCE.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
- import React, { useMemo } from "react";
2
- import { ChatContextProvider } from "./ChatContext";
3
- import { ButtonProps, HeaderProps, WindowProps } from "./props";
1
+ import React, { useMemo, useCallback, useEffect, useRef } from "react";
2
+ import { ChatContextProvider, useChatContext } from "./ChatContext";
3
+ import { ButtonProps, HeaderProps, WindowProps, CopilotObservabilityHooks } from "./props";
4
4
  import { Window as DefaultWindow } from "./Window";
5
5
  import { Button as DefaultButton } from "./Button";
6
6
  import { Header as DefaultHeader } from "./Header";
@@ -9,6 +9,14 @@ import { Input as DefaultInput } from "./Input";
9
9
  import { CopilotChat, CopilotChatProps } from "./Chat";
10
10
  import { AssistantMessage as DefaultAssistantMessage } from "./messages/AssistantMessage";
11
11
  import { UserMessage as DefaultUserMessage } from "./messages/UserMessage";
12
+ import { useCopilotContext } from "@copilotkit/react-core";
13
+ import {
14
+ CopilotKitError,
15
+ CopilotKitErrorCode,
16
+ Severity,
17
+ ErrorVisibility,
18
+ styledConsole,
19
+ } from "@copilotkit/shared";
12
20
 
13
21
  export interface CopilotModalProps extends CopilotChatProps {
14
22
  /**
@@ -57,6 +65,92 @@ export interface CopilotModalProps extends CopilotChatProps {
57
65
  Header?: React.ComponentType<HeaderProps>;
58
66
  }
59
67
 
68
+ // Inner component that has access to the Copilot context
69
+ const CopilotModalInner = ({
70
+ observabilityHooks,
71
+ onSetOpen,
72
+ clickOutsideToClose,
73
+ hitEscapeToClose,
74
+ shortcut,
75
+ className,
76
+ children,
77
+ Window,
78
+ Button,
79
+ Header,
80
+ ...chatProps
81
+ }: Omit<CopilotModalProps, "icons" | "labels" | "defaultOpen"> & {
82
+ Window: React.ComponentType<WindowProps>;
83
+ Button: React.ComponentType<ButtonProps>;
84
+ Header: React.ComponentType<HeaderProps>;
85
+ clickOutsideToClose: boolean;
86
+ hitEscapeToClose: boolean;
87
+ shortcut: string;
88
+ }) => {
89
+ const { copilotApiConfig, setBannerError } = useCopilotContext();
90
+
91
+ // Destructure stable values to avoid object reference changes
92
+ const { publicApiKey } = copilotApiConfig;
93
+
94
+ // Helper function to trigger event hooks only if publicApiKey is provided
95
+ const triggerObservabilityHook = useCallback(
96
+ (hookName: keyof CopilotObservabilityHooks, ...args: any[]) => {
97
+ if (publicApiKey && observabilityHooks?.[hookName]) {
98
+ (observabilityHooks[hookName] as any)(...args);
99
+ }
100
+ if (observabilityHooks?.[hookName] && !publicApiKey) {
101
+ setBannerError(
102
+ new CopilotKitError({
103
+ message: "observabilityHooks requires a publicApiKey to function.",
104
+ code: CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
105
+ severity: Severity.CRITICAL,
106
+ visibility: ErrorVisibility.BANNER,
107
+ }),
108
+ );
109
+ styledConsole.publicApiKeyRequired("observabilityHooks");
110
+ }
111
+ },
112
+ [publicApiKey, observabilityHooks, setBannerError],
113
+ );
114
+
115
+ const { open } = useChatContext();
116
+ const prevOpen = useRef(open);
117
+
118
+ // Monitor open state changes and trigger event hooks
119
+ useEffect(() => {
120
+ if (prevOpen.current !== open) {
121
+ onSetOpen?.(open);
122
+
123
+ // Trigger chat minimize/expand events
124
+ if (open) {
125
+ triggerObservabilityHook("onChatExpanded");
126
+ } else {
127
+ triggerObservabilityHook("onChatMinimized");
128
+ }
129
+ prevOpen.current = open;
130
+ }
131
+ }, [open, onSetOpen, triggerObservabilityHook]);
132
+
133
+ const memoizedHeader = useMemo(() => <Header />, [Header]);
134
+ const memoizedChildren = useMemo(() => children, [children]);
135
+
136
+ return (
137
+ <>
138
+ {memoizedChildren}
139
+ <div className={className}>
140
+ <Button></Button>
141
+ <Window
142
+ clickOutsideToClose={clickOutsideToClose}
143
+ shortcut={shortcut}
144
+ hitEscapeToClose={hitEscapeToClose}
145
+ >
146
+ {memoizedHeader}
147
+ <CopilotChat {...chatProps} observabilityHooks={observabilityHooks} />
148
+ </Window>
149
+ </div>
150
+ </>
151
+ );
152
+ };
153
+
60
154
  export const CopilotModal = ({
61
155
  instructions,
62
156
  defaultOpen = false,
@@ -85,49 +179,42 @@ export const CopilotModal = ({
85
179
  markdownTagRenderers,
86
180
  className,
87
181
  children,
182
+ observabilityHooks,
88
183
  ...props
89
184
  }: CopilotModalProps) => {
90
185
  const [openState, setOpenState] = React.useState(defaultOpen);
91
186
 
92
- const setOpen = (open: boolean) => {
93
- onSetOpen?.(open);
94
- setOpenState(open);
95
- };
96
-
97
- const memoizedHeader = useMemo(() => <Header />, [Header]);
98
- const memoizedChildren = useMemo(() => children, [children]);
99
-
100
187
  return (
101
- <ChatContextProvider icons={icons} labels={labels} open={openState} setOpen={setOpen}>
102
- {memoizedChildren}
103
- <div className={className}>
104
- <Button></Button>
105
- <Window
106
- clickOutsideToClose={clickOutsideToClose}
107
- shortcut={shortcut}
108
- hitEscapeToClose={hitEscapeToClose}
109
- >
110
- {memoizedHeader}
111
- <CopilotChat
112
- {...props}
113
- instructions={instructions}
114
- onSubmitMessage={onSubmitMessage}
115
- onStopGeneration={onStopGeneration}
116
- onReloadMessages={onReloadMessages}
117
- makeSystemMessage={makeSystemMessage}
118
- onInProgress={onInProgress}
119
- Messages={Messages}
120
- Input={Input}
121
- AssistantMessage={AssistantMessage}
122
- UserMessage={UserMessage}
123
- onThumbsUp={onThumbsUp}
124
- onThumbsDown={onThumbsDown}
125
- onCopy={onCopy}
126
- onRegenerate={onRegenerate}
127
- markdownTagRenderers={markdownTagRenderers}
128
- />
129
- </Window>
130
- </div>
188
+ <ChatContextProvider icons={icons} labels={labels} open={openState} setOpen={setOpenState}>
189
+ <CopilotModalInner
190
+ observabilityHooks={observabilityHooks}
191
+ onSetOpen={onSetOpen}
192
+ clickOutsideToClose={clickOutsideToClose ?? true}
193
+ hitEscapeToClose={hitEscapeToClose ?? true}
194
+ shortcut={shortcut ?? "/"}
195
+ className={className}
196
+ Window={Window}
197
+ Button={Button}
198
+ Header={Header}
199
+ instructions={instructions}
200
+ onSubmitMessage={onSubmitMessage}
201
+ onStopGeneration={onStopGeneration}
202
+ onReloadMessages={onReloadMessages}
203
+ makeSystemMessage={makeSystemMessage}
204
+ onInProgress={onInProgress}
205
+ Messages={Messages}
206
+ Input={Input}
207
+ AssistantMessage={AssistantMessage}
208
+ UserMessage={UserMessage}
209
+ onThumbsUp={onThumbsUp}
210
+ onThumbsDown={onThumbsDown}
211
+ onCopy={onCopy}
212
+ onRegenerate={onRegenerate}
213
+ markdownTagRenderers={markdownTagRenderers}
214
+ {...props}
215
+ >
216
+ {children}
217
+ </CopilotModalInner>
131
218
  </ChatContextProvider>
132
219
  );
133
220
  };
@@ -28,6 +28,26 @@
28
28
  * />
29
29
  * ```
30
30
  *
31
+ * ### With Observability Hooks
32
+ *
33
+ * To monitor user interactions, provide the `observabilityHooks` prop.
34
+ * **Note:** This requires a `publicApiKey` in the `<CopilotKit>` provider.
35
+ *
36
+ * ```tsx
37
+ * <CopilotKit publicApiKey="YOUR_PUBLIC_API_KEY">
38
+ * <CopilotPopup
39
+ * observabilityHooks={{
40
+ * onChatExpanded: () => {
41
+ * console.log("Popup opened");
42
+ * },
43
+ * onChatMinimized: () => {
44
+ * console.log("Popup closed");
45
+ * },
46
+ * }}
47
+ * />
48
+ * </CopilotKit>
49
+ * ```
50
+ *
31
51
  * ### Look & Feel
32
52
  *
33
53
  * By default, CopilotKit components do not have any styles. You can import CopilotKit's stylesheet at the root of your project:
@@ -30,6 +30,28 @@
30
30
  * </CopilotSidebar>
31
31
  * ```
32
32
  *
33
+ * ### With Observability Hooks
34
+ *
35
+ * To monitor user interactions, provide the `observabilityHooks` prop.
36
+ * **Note:** This requires a `publicApiKey` in the `<CopilotKit>` provider.
37
+ *
38
+ * ```tsx
39
+ * <CopilotKit publicApiKey="YOUR_PUBLIC_API_KEY">
40
+ * <CopilotSidebar
41
+ * observabilityHooks={{
42
+ * onChatExpanded: () => {
43
+ * console.log("Sidebar opened");
44
+ * },
45
+ * onChatMinimized: () => {
46
+ * console.log("Sidebar closed");
47
+ * },
48
+ * }}
49
+ * >
50
+ * <YourApp/>
51
+ * </CopilotSidebar>
52
+ * </CopilotKit>
53
+ * ```
54
+ *
33
55
  * ### Look & Feel
34
56
  *
35
57
  * By default, CopilotKit components do not have any styles. You can import CopilotKit's stylesheet at the root of your project:
@@ -1,4 +1,4 @@
1
- import { useCopilotChat } from "@copilotkit/react-core";
1
+ import { useCopilotChatInternal as useCopilotChat } from "@copilotkit/react-core";
2
2
  import { SmallSpinnerIcon } from "./Icons";
3
3
 
4
4
  interface SuggestionsProps {
@@ -0,0 +1,143 @@
1
+ import React from "react";
2
+ import { RenderMessageProps } from "../props";
3
+ import { RenderMessage as DefaultRenderMessage } from "./RenderMessage";
4
+ import { aguiToGQL } from "@copilotkit/runtime-client-gql";
5
+
6
+ /**
7
+ * Legacy message render props interface for backwards compatibility
8
+ */
9
+ export interface LegacyRenderProps {
10
+ RenderTextMessage?: React.ComponentType<RenderMessageProps>;
11
+ RenderActionExecutionMessage?: React.ComponentType<RenderMessageProps>;
12
+ RenderAgentStateMessage?: React.ComponentType<RenderMessageProps>;
13
+ RenderResultMessage?: React.ComponentType<RenderMessageProps>;
14
+ RenderImageMessage?: React.ComponentType<RenderMessageProps>;
15
+ }
16
+
17
+ /**
18
+ * Props for the LegacyRenderMessage component
19
+ */
20
+ export interface LegacyRenderMessageProps extends RenderMessageProps {
21
+ legacyProps: LegacyRenderProps;
22
+ }
23
+
24
+ /**
25
+ * Legacy message adapter component that maps old render props to new message types.
26
+ * This component provides backwards compatibility for the deprecated render props.
27
+ */
28
+ export const LegacyRenderMessage: React.FC<LegacyRenderMessageProps> = ({
29
+ message,
30
+ inProgress,
31
+ index,
32
+ isCurrentMessage,
33
+ actionResult,
34
+ AssistantMessage,
35
+ UserMessage,
36
+ ImageRenderer,
37
+ onRegenerate,
38
+ onCopy,
39
+ onThumbsUp,
40
+ onThumbsDown,
41
+ markdownTagRenderers,
42
+ legacyProps,
43
+ }) => {
44
+ const {
45
+ RenderTextMessage,
46
+ RenderActionExecutionMessage,
47
+ RenderAgentStateMessage,
48
+ RenderResultMessage,
49
+ RenderImageMessage,
50
+ } = legacyProps;
51
+
52
+ const deprecatedMessage = aguiToGQL(message)[0] ?? undefined;
53
+
54
+ // Route to appropriate legacy renderer based on message type
55
+ if (deprecatedMessage.isTextMessage() && RenderTextMessage) {
56
+ return (
57
+ <RenderTextMessage
58
+ message={message}
59
+ inProgress={inProgress}
60
+ index={index}
61
+ isCurrentMessage={isCurrentMessage}
62
+ AssistantMessage={AssistantMessage}
63
+ UserMessage={UserMessage}
64
+ onRegenerate={onRegenerate}
65
+ onCopy={onCopy}
66
+ onThumbsUp={onThumbsUp}
67
+ onThumbsDown={onThumbsDown}
68
+ markdownTagRenderers={markdownTagRenderers}
69
+ />
70
+ );
71
+ }
72
+
73
+ if (deprecatedMessage.isActionExecutionMessage() && RenderActionExecutionMessage) {
74
+ return (
75
+ <RenderActionExecutionMessage
76
+ message={message}
77
+ inProgress={inProgress}
78
+ index={index}
79
+ isCurrentMessage={isCurrentMessage}
80
+ actionResult={actionResult}
81
+ AssistantMessage={AssistantMessage}
82
+ UserMessage={UserMessage}
83
+ />
84
+ );
85
+ }
86
+
87
+ if (deprecatedMessage.isAgentStateMessage() && RenderAgentStateMessage) {
88
+ return (
89
+ <RenderAgentStateMessage
90
+ message={message}
91
+ inProgress={inProgress}
92
+ index={index}
93
+ isCurrentMessage={isCurrentMessage}
94
+ AssistantMessage={AssistantMessage}
95
+ UserMessage={UserMessage}
96
+ />
97
+ );
98
+ }
99
+
100
+ if (deprecatedMessage.isResultMessage() && RenderResultMessage) {
101
+ return (
102
+ <RenderResultMessage
103
+ message={message}
104
+ inProgress={inProgress}
105
+ index={index}
106
+ isCurrentMessage={isCurrentMessage}
107
+ AssistantMessage={AssistantMessage}
108
+ UserMessage={UserMessage}
109
+ />
110
+ );
111
+ }
112
+
113
+ if (deprecatedMessage.isImageMessage() && RenderImageMessage) {
114
+ return (
115
+ <RenderImageMessage
116
+ message={message}
117
+ inProgress={inProgress}
118
+ index={index}
119
+ isCurrentMessage={isCurrentMessage}
120
+ AssistantMessage={AssistantMessage}
121
+ UserMessage={UserMessage}
122
+ />
123
+ );
124
+ }
125
+
126
+ // Fallback to default RenderMessage for any unhandled cases
127
+ return (
128
+ <DefaultRenderMessage
129
+ message={message}
130
+ inProgress={inProgress}
131
+ index={index}
132
+ isCurrentMessage={isCurrentMessage}
133
+ AssistantMessage={AssistantMessage}
134
+ UserMessage={UserMessage}
135
+ ImageRenderer={ImageRenderer}
136
+ onRegenerate={onRegenerate}
137
+ onCopy={onCopy}
138
+ onThumbsUp={onThumbsUp}
139
+ onThumbsDown={onThumbsDown}
140
+ markdownTagRenderers={markdownTagRenderers}
141
+ />
142
+ );
143
+ };
@@ -26,6 +26,7 @@ export function RenderMessage({
26
26
  return (
27
27
  <UserMessage
28
28
  key={index}
29
+ rawData={message}
29
30
  data-message-role="user"
30
31
  message={message}
31
32
  ImageRenderer={ImageRenderer}
@@ -36,6 +37,8 @@ export function RenderMessage({
36
37
  <AssistantMessage
37
38
  key={index}
38
39
  data-message-role="assistant"
40
+ subComponent={message.generativeUI?.()}
41
+ rawData={message}
39
42
  message={message}
40
43
  isLoading={inProgress && isCurrentMessage && !message.content}
41
44
  isGenerating={inProgress && isCurrentMessage && !!message.content}
@@ -1,8 +1,60 @@
1
- import { AIMessage, Message, UserMessage } from "@copilotkit/shared";
1
+ import { AIMessage, Message, UserMessage, CopilotErrorEvent } from "@copilotkit/shared";
2
2
  import { CopilotChatSuggestion } from "../../types/suggestions";
3
3
  import { ReactNode } from "react";
4
4
  import { ImageData } from "@copilotkit/shared";
5
5
 
6
+ /**
7
+ * Event hooks for CopilotKit chat events.
8
+ * These hooks only work when publicApiKey is provided.
9
+ */
10
+ export interface CopilotObservabilityHooks {
11
+ /**
12
+ * Called when a message is sent by the user
13
+ */
14
+ onMessageSent?: (message: string) => void;
15
+
16
+ /**
17
+ * Called when the chat is minimized/closed
18
+ */
19
+ onChatMinimized?: () => void;
20
+
21
+ /**
22
+ * Called when the chat is expanded/opened
23
+ */
24
+ onChatExpanded?: () => void;
25
+
26
+ /**
27
+ * Called when a message is regenerated
28
+ */
29
+ onMessageRegenerated?: (messageId: string) => void;
30
+
31
+ /**
32
+ * Called when a message is copied
33
+ */
34
+ onMessageCopied?: (content: string) => void;
35
+
36
+ /**
37
+ * Called when feedback is given (thumbs up/down)
38
+ */
39
+ onFeedbackGiven?: (messageId: string, type: "thumbsUp" | "thumbsDown") => void;
40
+
41
+ /**
42
+ * Called when chat generation starts
43
+ */
44
+ onChatStarted?: () => void;
45
+
46
+ /**
47
+ * Called when chat generation stops
48
+ */
49
+ onChatStopped?: () => void;
50
+
51
+ /**
52
+ * Called when an error occurs in the chat
53
+ * This enables chat-specific error handling UX while preserving system-wide error monitoring
54
+ */
55
+ onError?: (errorEvent: CopilotErrorEvent) => void;
56
+ }
57
+
6
58
  export interface ButtonProps {}
7
59
 
8
60
  export interface WindowProps {
@@ -60,6 +112,31 @@ export interface MessagesProps {
60
112
  * Useful when you want to render custom elements in the message (e.g a reference tag element)
61
113
  */
62
114
  markdownTagRenderers?: ComponentsMap;
115
+
116
+ /**
117
+ * @deprecated Use RenderMessage instead
118
+ */
119
+ RenderTextMessage?: React.ComponentType<RenderMessageProps>;
120
+
121
+ /**
122
+ * @deprecated Use RenderMessage instead
123
+ */
124
+ RenderActionExecutionMessage?: React.ComponentType<RenderMessageProps>;
125
+
126
+ /**
127
+ * @deprecated Use RenderMessage instead
128
+ */
129
+ RenderAgentStateMessage?: React.ComponentType<RenderMessageProps>;
130
+
131
+ /**
132
+ * @deprecated Use RenderMessage instead
133
+ */
134
+ RenderResultMessage?: React.ComponentType<RenderMessageProps>;
135
+
136
+ /**
137
+ * @deprecated Use RenderMessage instead
138
+ */
139
+ RenderImageMessage?: React.ComponentType<RenderMessageProps>;
63
140
  }
64
141
 
65
142
  export interface Renderer {
@@ -69,6 +146,13 @@ export interface Renderer {
69
146
  export interface UserMessageProps {
70
147
  message?: UserMessage;
71
148
  ImageRenderer: React.ComponentType<ImageRendererProps>;
149
+
150
+ /**
151
+ * @deprecated use message instead
152
+ *
153
+ * The raw data from the assistant's response
154
+ */
155
+ rawData: any;
72
156
  }
73
157
 
74
158
  export interface AssistantMessageProps {
@@ -123,6 +207,31 @@ export interface AssistantMessageProps {
123
207
  * A custom image rendering component to use instead of the default.
124
208
  */
125
209
  ImageRenderer?: React.ComponentType<ImageRendererProps>;
210
+
211
+ /**
212
+ * @deprecated use message instead
213
+ *
214
+ * The raw data from the assistant's response
215
+ */
216
+ rawData: any;
217
+
218
+ /**
219
+ *
220
+ * @deprecated
221
+ *
222
+ * use `message.generativeUI()` instead.
223
+ *
224
+ * For example:
225
+ *
226
+ * ```tsx
227
+ * const CustomAssistantMessage = ({ message }: AssistantMessageProps) => {
228
+ * const subComponent = message?.generativeUI?.();
229
+ * return <div>{subComponent}</div>;
230
+ * };
231
+ *
232
+ * ```
233
+ */
234
+ subComponent?: React.JSX.Element;
126
235
  }
127
236
 
128
237
  export interface RenderMessageProps {
@@ -4,12 +4,7 @@ import {
4
4
  defaultCopilotContextCategories,
5
5
  } from "@copilotkit/react-core";
6
6
  import { CopilotKitVersion } from "./types";
7
- import { ActionExecutionMessage, ResultMessage, TextMessage } from "@copilotkit/runtime-client-gql";
8
- import { AgentStateMessage } from "@copilotkit/runtime-client-gql";
9
-
10
- export function shouldShowDevConsole(showDevConsole: boolean): boolean {
11
- return showDevConsole;
12
- }
7
+ export { shouldShowDevConsole } from "@copilotkit/react-core";
13
8
 
14
9
  export async function getPublishedCopilotKitVersion(
15
10
  current: string,