@copilotkit/react-ui 1.3.7-fix-chat-interactions-rerenders.0 → 1.3.8-fix-memoize-chat-ui-context.0

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 (114) hide show
  1. package/CHANGELOG.md +15 -5
  2. package/dist/{chunk-LGS6B47Q.mjs → chunk-3KBQXU44.mjs} +10 -10
  3. package/dist/{chunk-XSUSSWDS.mjs → chunk-3XAXY2Z3.mjs} +2 -2
  4. package/dist/{chunk-FUCEBN2P.mjs → chunk-47OPG5FM.mjs} +9 -9
  5. package/dist/{chunk-CTPEKUNX.mjs → chunk-4FIGRRFS.mjs} +5 -7
  6. package/dist/chunk-4FIGRRFS.mjs.map +1 -0
  7. package/dist/{chunk-YH2STM73.mjs → chunk-6BL5C56L.mjs} +4 -4
  8. package/dist/chunk-6BL5C56L.mjs.map +1 -0
  9. package/dist/{chunk-GOTHQ665.mjs → chunk-6INMITFA.mjs} +3 -4
  10. package/dist/chunk-6INMITFA.mjs.map +1 -0
  11. package/dist/{chunk-BJPGMY3I.mjs → chunk-CBBFRI3Q.mjs} +19 -8
  12. package/dist/{chunk-BJPGMY3I.mjs.map → chunk-CBBFRI3Q.mjs.map} +1 -1
  13. package/dist/{chunk-GDNJRSD4.mjs → chunk-CPMIEVKK.mjs} +9 -11
  14. package/dist/chunk-CPMIEVKK.mjs.map +1 -0
  15. package/dist/{chunk-HBZPOT37.mjs → chunk-JTINVYPK.mjs} +3 -3
  16. package/dist/{chunk-CPWFYV3U.mjs → chunk-KCAVDFB6.mjs} +2 -2
  17. package/dist/{chunk-YOH25I6N.mjs → chunk-RQNJNK2W.mjs} +2 -2
  18. package/dist/{chunk-QI3OM75G.mjs → chunk-RS6UPR5N.mjs} +2 -2
  19. package/dist/{chunk-5DT3MDBZ.mjs → chunk-S5MBUNGN.mjs} +2 -3
  20. package/dist/{chunk-5DT3MDBZ.mjs.map → chunk-S5MBUNGN.mjs.map} +1 -1
  21. package/dist/{chunk-PJNNEX4L.mjs → chunk-SWADR6EH.mjs} +2 -2
  22. package/dist/{chunk-FLV3J3VX.mjs → chunk-VEC45H6Q.mjs} +2 -2
  23. package/dist/{chunk-MA5B5ELM.mjs → chunk-WYMTXCQU.mjs} +3 -4
  24. package/dist/chunk-WYMTXCQU.mjs.map +1 -0
  25. package/dist/{chunk-FO7Z5LAL.mjs → chunk-YAGE7RCE.mjs} +2 -2
  26. package/dist/{chunk-RF3KLUPD.mjs → chunk-ZABXREBH.mjs} +3 -4
  27. package/dist/chunk-ZABXREBH.mjs.map +1 -0
  28. package/dist/components/chat/Button.js.map +1 -1
  29. package/dist/components/chat/Button.mjs +2 -2
  30. package/dist/components/chat/Chat.js +39 -36
  31. package/dist/components/chat/Chat.js.map +1 -1
  32. package/dist/components/chat/Chat.mjs +12 -12
  33. package/dist/components/chat/ChatContext.js +17 -6
  34. package/dist/components/chat/ChatContext.js.map +1 -1
  35. package/dist/components/chat/ChatContext.mjs +1 -1
  36. package/dist/components/chat/Header.js.map +1 -1
  37. package/dist/components/chat/Header.mjs +2 -2
  38. package/dist/components/chat/Input.js +1 -2
  39. package/dist/components/chat/Input.js.map +1 -1
  40. package/dist/components/chat/Input.mjs +3 -3
  41. package/dist/components/chat/Messages.js +6 -6
  42. package/dist/components/chat/Messages.js.map +1 -1
  43. package/dist/components/chat/Messages.mjs +2 -2
  44. package/dist/components/chat/Modal.js +39 -36
  45. package/dist/components/chat/Modal.js.map +1 -1
  46. package/dist/components/chat/Modal.mjs +16 -16
  47. package/dist/components/chat/Popup.js +39 -36
  48. package/dist/components/chat/Popup.js.map +1 -1
  49. package/dist/components/chat/Popup.mjs +17 -17
  50. package/dist/components/chat/Response.js.map +1 -1
  51. package/dist/components/chat/Response.mjs +2 -2
  52. package/dist/components/chat/Sidebar.js +39 -36
  53. package/dist/components/chat/Sidebar.js.map +1 -1
  54. package/dist/components/chat/Sidebar.mjs +17 -17
  55. package/dist/components/chat/Window.js.map +1 -1
  56. package/dist/components/chat/Window.mjs +2 -2
  57. package/dist/components/chat/index.js +39 -36
  58. package/dist/components/chat/index.js.map +1 -1
  59. package/dist/components/chat/index.mjs +18 -18
  60. package/dist/components/chat/messages/RenderActionExecutionMessage.js +1 -1
  61. package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +1 -1
  62. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +2 -2
  63. package/dist/components/chat/messages/RenderAgentStateMessage.js +1 -2
  64. package/dist/components/chat/messages/RenderAgentStateMessage.js.map +1 -1
  65. package/dist/components/chat/messages/RenderAgentStateMessage.mjs +2 -2
  66. package/dist/components/chat/messages/RenderResultMessage.js +1 -2
  67. package/dist/components/chat/messages/RenderResultMessage.js.map +1 -1
  68. package/dist/components/chat/messages/RenderResultMessage.mjs +2 -2
  69. package/dist/components/chat/messages/RenderTextMessage.js +1 -2
  70. package/dist/components/chat/messages/RenderTextMessage.js.map +1 -1
  71. package/dist/components/chat/messages/RenderTextMessage.mjs +2 -2
  72. package/dist/components/dev-console/console.js +4 -6
  73. package/dist/components/dev-console/console.js.map +1 -1
  74. package/dist/components/dev-console/console.mjs +2 -2
  75. package/dist/components/dev-console/index.js +4 -6
  76. package/dist/components/dev-console/index.js.map +1 -1
  77. package/dist/components/dev-console/index.mjs +2 -2
  78. package/dist/components/dev-console/utils.js +4 -6
  79. package/dist/components/dev-console/utils.js.map +1 -1
  80. package/dist/components/dev-console/utils.mjs +1 -1
  81. package/dist/components/index.js +39 -36
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/components/index.mjs +18 -18
  84. package/dist/hooks/use-push-to-talk.js +1 -2
  85. package/dist/hooks/use-push-to-talk.js.map +1 -1
  86. package/dist/hooks/use-push-to-talk.mjs +1 -1
  87. package/dist/index.js +39 -36
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +18 -18
  90. package/package.json +8 -8
  91. package/src/components/chat/ChatContext.tsx +21 -8
  92. package/src/components/chat/Messages.tsx +6 -6
  93. package/src/components/chat/messages/RenderActionExecutionMessage.tsx +1 -1
  94. package/src/components/chat/messages/RenderAgentStateMessage.tsx +1 -1
  95. package/src/components/chat/messages/RenderResultMessage.tsx +1 -1
  96. package/src/components/chat/messages/RenderTextMessage.tsx +1 -1
  97. package/src/components/dev-console/utils.ts +4 -4
  98. package/src/hooks/use-push-to-talk.tsx +1 -1
  99. package/dist/chunk-CTPEKUNX.mjs.map +0 -1
  100. package/dist/chunk-GDNJRSD4.mjs.map +0 -1
  101. package/dist/chunk-GOTHQ665.mjs.map +0 -1
  102. package/dist/chunk-MA5B5ELM.mjs.map +0 -1
  103. package/dist/chunk-RF3KLUPD.mjs.map +0 -1
  104. package/dist/chunk-YH2STM73.mjs.map +0 -1
  105. /package/dist/{chunk-LGS6B47Q.mjs.map → chunk-3KBQXU44.mjs.map} +0 -0
  106. /package/dist/{chunk-XSUSSWDS.mjs.map → chunk-3XAXY2Z3.mjs.map} +0 -0
  107. /package/dist/{chunk-FUCEBN2P.mjs.map → chunk-47OPG5FM.mjs.map} +0 -0
  108. /package/dist/{chunk-HBZPOT37.mjs.map → chunk-JTINVYPK.mjs.map} +0 -0
  109. /package/dist/{chunk-CPWFYV3U.mjs.map → chunk-KCAVDFB6.mjs.map} +0 -0
  110. /package/dist/{chunk-YOH25I6N.mjs.map → chunk-RQNJNK2W.mjs.map} +0 -0
  111. /package/dist/{chunk-QI3OM75G.mjs.map → chunk-RS6UPR5N.mjs.map} +0 -0
  112. /package/dist/{chunk-PJNNEX4L.mjs.map → chunk-SWADR6EH.mjs.map} +0 -0
  113. /package/dist/{chunk-FLV3J3VX.mjs.map → chunk-VEC45H6Q.mjs.map} +0 -0
  114. /package/dist/{chunk-FO7Z5LAL.mjs.map → chunk-YAGE7RCE.mjs.map} +0 -0
@@ -2,39 +2,39 @@ import "../chunk-JD7BAH7U.mjs";
2
2
  import "../chunk-MRFF7GSQ.mjs";
3
3
  import {
4
4
  CopilotSidebar
5
- } from "../chunk-CPWFYV3U.mjs";
5
+ } from "../chunk-KCAVDFB6.mjs";
6
6
  import "../chunk-WB3YULQ4.mjs";
7
7
  import {
8
8
  CopilotPopup
9
- } from "../chunk-PJNNEX4L.mjs";
10
- import "../chunk-FUCEBN2P.mjs";
11
- import "../chunk-FO7Z5LAL.mjs";
12
- import "../chunk-FLV3J3VX.mjs";
13
- import "../chunk-YOH25I6N.mjs";
9
+ } from "../chunk-SWADR6EH.mjs";
10
+ import "../chunk-47OPG5FM.mjs";
11
+ import "../chunk-YAGE7RCE.mjs";
12
+ import "../chunk-VEC45H6Q.mjs";
13
+ import "../chunk-RQNJNK2W.mjs";
14
14
  import {
15
15
  CopilotChat
16
- } from "../chunk-LGS6B47Q.mjs";
16
+ } from "../chunk-3KBQXU44.mjs";
17
17
  import "../chunk-V7W6IM2V.mjs";
18
- import "../chunk-YH2STM73.mjs";
19
- import "../chunk-RF3KLUPD.mjs";
20
- import "../chunk-GOTHQ665.mjs";
21
- import "../chunk-MA5B5ELM.mjs";
18
+ import "../chunk-6BL5C56L.mjs";
19
+ import "../chunk-ZABXREBH.mjs";
20
+ import "../chunk-6INMITFA.mjs";
21
+ import "../chunk-WYMTXCQU.mjs";
22
22
  import "../chunk-KFQYJ5R5.mjs";
23
- import "../chunk-QI3OM75G.mjs";
24
- import "../chunk-CTPEKUNX.mjs";
23
+ import "../chunk-RS6UPR5N.mjs";
24
+ import "../chunk-4FIGRRFS.mjs";
25
25
  import "../chunk-OTPAZXVR.mjs";
26
- import "../chunk-HBZPOT37.mjs";
26
+ import "../chunk-JTINVYPK.mjs";
27
27
  import "../chunk-YQFVRDNC.mjs";
28
28
  import "../chunk-YQ3D5IQV.mjs";
29
- import "../chunk-GDNJRSD4.mjs";
30
- import "../chunk-XSUSSWDS.mjs";
29
+ import "../chunk-CPMIEVKK.mjs";
30
+ import "../chunk-3XAXY2Z3.mjs";
31
31
  import {
32
32
  useChatContext
33
- } from "../chunk-BJPGMY3I.mjs";
33
+ } from "../chunk-CBBFRI3Q.mjs";
34
34
  import "../chunk-UPTB2MVO.mjs";
35
35
  import "../chunk-FZC7X5PK.mjs";
36
36
  import "../chunk-54JAUBUJ.mjs";
37
- import "../chunk-5DT3MDBZ.mjs";
37
+ import "../chunk-S5MBUNGN.mjs";
38
38
  import "../chunk-MRXNTQOX.mjs";
39
39
  export {
40
40
  CopilotChat,
@@ -60,7 +60,6 @@ __export(use_push_to_talk_exports, {
60
60
  });
61
61
  module.exports = __toCommonJS(use_push_to_talk_exports);
62
62
  var import_react_core = require("@copilotkit/react-core");
63
- var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
64
63
  var import_react = require("react");
65
64
  var checkMicrophonePermission = () => __async(void 0, null, function* () {
66
65
  try {
@@ -178,7 +177,7 @@ var usePushToTalk = ({
178
177
  (message) => message.id === startReadingFromMessageId
179
178
  );
180
179
  const messagesAfterLast = context.messages.slice(lastMessageIndex + 1).filter(
181
- (message) => message instanceof import_runtime_client_gql.TextMessage && message.role === "assistant"
180
+ (message) => message.isTextMessage() && message.role === "assistant"
182
181
  );
183
182
  const text = messagesAfterLast.map((message) => message.content).join("\n");
184
183
  playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/use-push-to-talk.tsx"],"sourcesContent":["import { useCopilotContext, useCopilotMessagesContext } from \"@copilotkit/react-core\";\nimport { Message, TextMessage } from \"@copilotkit/runtime-client-gql\";\nimport { MutableRefObject, useEffect, useRef, useState } from \"react\";\n\nexport const checkMicrophonePermission = async () => {\n try {\n const permissionStatus = await navigator.permissions.query({\n name: \"microphone\" as PermissionName,\n });\n if (permissionStatus.state === \"granted\") {\n return true;\n } else {\n return false;\n }\n } catch (err) {\n console.error(\"Error checking microphone permission\", err);\n }\n};\n\nexport const requestMicAndPlaybackPermission = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const audioContext = new window.AudioContext();\n await audioContext.resume();\n return { stream, audioContext };\n } catch (err) {\n console.error(\"Error requesting microphone and playback permissions\", err);\n return null;\n }\n};\n\nconst startRecording = async (\n mediaStreamRef: MutableRefObject<MediaStream | null>,\n mediaRecorderRef: MutableRefObject<MediaRecorder | null>,\n audioContextRef: MutableRefObject<AudioContext | null>,\n recordedChunks: Blob[],\n onStop: () => void,\n) => {\n if (!mediaStreamRef.current || !audioContextRef.current) {\n mediaStreamRef.current = await navigator.mediaDevices.getUserMedia({ audio: true });\n audioContextRef.current = new window.AudioContext();\n await audioContextRef.current.resume();\n }\n\n mediaRecorderRef.current = new MediaRecorder(mediaStreamRef.current!);\n mediaRecorderRef.current.start(1000);\n mediaRecorderRef.current.ondataavailable = (event) => {\n recordedChunks.push(event.data);\n };\n mediaRecorderRef.current.onstop = onStop;\n};\n\nconst stopRecording = (mediaRecorderRef: MutableRefObject<MediaRecorder | null>) => {\n if (mediaRecorderRef.current && mediaRecorderRef.current.state !== \"inactive\") {\n mediaRecorderRef.current.stop();\n }\n};\n\nconst transcribeAudio = async (recordedChunks: Blob[], transcribeAudioUrl: string) => {\n const completeBlob = new Blob(recordedChunks, { type: \"audio/mp4\" });\n const formData = new FormData();\n formData.append(\"file\", completeBlob, \"recording.mp4\");\n\n const response = await fetch(transcribeAudioUrl, {\n method: \"POST\",\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Error: ${response.statusText}`);\n }\n\n const transcription = await response.json();\n return transcription.text;\n};\n\nconst playAudioResponse = (text: string, textToSpeechUrl: string, audioContext: AudioContext) => {\n const encodedText = encodeURIComponent(text);\n const url = `${textToSpeechUrl}?text=${encodedText}`;\n\n fetch(url)\n .then((response) => response.arrayBuffer())\n .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer))\n .then((audioBuffer) => {\n const source = audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(audioContext.destination);\n source.start(0);\n })\n .catch((error) => {\n console.error(\"Error with decoding audio data\", error);\n });\n};\n\nexport type PushToTalkState = \"idle\" | \"recording\" | \"transcribing\";\n\nexport type SendFunction = (text: string) => Promise<Message>;\n\nexport const usePushToTalk = ({\n sendFunction,\n inProgress,\n}: {\n sendFunction: SendFunction;\n inProgress: boolean;\n}) => {\n const [pushToTalkState, setPushToTalkState] = useState<PushToTalkState>(\"idle\");\n const mediaStreamRef = useRef<MediaStream | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const recordedChunks = useRef<Blob[]>([]);\n const generalContext = useCopilotContext();\n const messagesContext = useCopilotMessagesContext();\n const context = { ...generalContext, ...messagesContext };\n const [startReadingFromMessageId, setStartReadingFromMessageId] = useState<string | null>(null);\n\n useEffect(() => {\n if (pushToTalkState === \"recording\") {\n startRecording(\n mediaStreamRef,\n mediaRecorderRef,\n audioContextRef,\n recordedChunks.current,\n () => {\n setPushToTalkState(\"transcribing\");\n },\n );\n } else {\n stopRecording(mediaRecorderRef);\n if (pushToTalkState === \"transcribing\") {\n transcribeAudio(recordedChunks.current, context.copilotApiConfig.transcribeAudioUrl!).then(\n async (transcription) => {\n recordedChunks.current = [];\n setPushToTalkState(\"idle\");\n const message = await sendFunction(transcription);\n setStartReadingFromMessageId(message.id);\n },\n );\n }\n }\n\n return () => {\n stopRecording(mediaRecorderRef);\n };\n }, [pushToTalkState]);\n\n useEffect(() => {\n if (inProgress === false && startReadingFromMessageId) {\n const lastMessageIndex = context.messages.findIndex(\n (message) => message.id === startReadingFromMessageId,\n );\n\n const messagesAfterLast = context.messages\n .slice(lastMessageIndex + 1)\n .filter(\n (message) => message instanceof TextMessage && message.role === \"assistant\",\n ) as TextMessage[];\n\n const text = messagesAfterLast.map((message) => message.content).join(\"\\n\");\n playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl!, audioContextRef.current!);\n\n setStartReadingFromMessageId(null);\n }\n }, [startReadingFromMessageId, inProgress]);\n\n return { pushToTalkState, setPushToTalkState };\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/hooks/use-push-to-talk.tsx"],"sourcesContent":["import { useCopilotContext, useCopilotMessagesContext } from \"@copilotkit/react-core\";\nimport { Message, TextMessage } from \"@copilotkit/runtime-client-gql\";\nimport { MutableRefObject, useEffect, useRef, useState } from \"react\";\n\nexport const checkMicrophonePermission = async () => {\n try {\n const permissionStatus = await navigator.permissions.query({\n name: \"microphone\" as PermissionName,\n });\n if (permissionStatus.state === \"granted\") {\n return true;\n } else {\n return false;\n }\n } catch (err) {\n console.error(\"Error checking microphone permission\", err);\n }\n};\n\nexport const requestMicAndPlaybackPermission = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const audioContext = new window.AudioContext();\n await audioContext.resume();\n return { stream, audioContext };\n } catch (err) {\n console.error(\"Error requesting microphone and playback permissions\", err);\n return null;\n }\n};\n\nconst startRecording = async (\n mediaStreamRef: MutableRefObject<MediaStream | null>,\n mediaRecorderRef: MutableRefObject<MediaRecorder | null>,\n audioContextRef: MutableRefObject<AudioContext | null>,\n recordedChunks: Blob[],\n onStop: () => void,\n) => {\n if (!mediaStreamRef.current || !audioContextRef.current) {\n mediaStreamRef.current = await navigator.mediaDevices.getUserMedia({ audio: true });\n audioContextRef.current = new window.AudioContext();\n await audioContextRef.current.resume();\n }\n\n mediaRecorderRef.current = new MediaRecorder(mediaStreamRef.current!);\n mediaRecorderRef.current.start(1000);\n mediaRecorderRef.current.ondataavailable = (event) => {\n recordedChunks.push(event.data);\n };\n mediaRecorderRef.current.onstop = onStop;\n};\n\nconst stopRecording = (mediaRecorderRef: MutableRefObject<MediaRecorder | null>) => {\n if (mediaRecorderRef.current && mediaRecorderRef.current.state !== \"inactive\") {\n mediaRecorderRef.current.stop();\n }\n};\n\nconst transcribeAudio = async (recordedChunks: Blob[], transcribeAudioUrl: string) => {\n const completeBlob = new Blob(recordedChunks, { type: \"audio/mp4\" });\n const formData = new FormData();\n formData.append(\"file\", completeBlob, \"recording.mp4\");\n\n const response = await fetch(transcribeAudioUrl, {\n method: \"POST\",\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Error: ${response.statusText}`);\n }\n\n const transcription = await response.json();\n return transcription.text;\n};\n\nconst playAudioResponse = (text: string, textToSpeechUrl: string, audioContext: AudioContext) => {\n const encodedText = encodeURIComponent(text);\n const url = `${textToSpeechUrl}?text=${encodedText}`;\n\n fetch(url)\n .then((response) => response.arrayBuffer())\n .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer))\n .then((audioBuffer) => {\n const source = audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(audioContext.destination);\n source.start(0);\n })\n .catch((error) => {\n console.error(\"Error with decoding audio data\", error);\n });\n};\n\nexport type PushToTalkState = \"idle\" | \"recording\" | \"transcribing\";\n\nexport type SendFunction = (text: string) => Promise<Message>;\n\nexport const usePushToTalk = ({\n sendFunction,\n inProgress,\n}: {\n sendFunction: SendFunction;\n inProgress: boolean;\n}) => {\n const [pushToTalkState, setPushToTalkState] = useState<PushToTalkState>(\"idle\");\n const mediaStreamRef = useRef<MediaStream | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const recordedChunks = useRef<Blob[]>([]);\n const generalContext = useCopilotContext();\n const messagesContext = useCopilotMessagesContext();\n const context = { ...generalContext, ...messagesContext };\n const [startReadingFromMessageId, setStartReadingFromMessageId] = useState<string | null>(null);\n\n useEffect(() => {\n if (pushToTalkState === \"recording\") {\n startRecording(\n mediaStreamRef,\n mediaRecorderRef,\n audioContextRef,\n recordedChunks.current,\n () => {\n setPushToTalkState(\"transcribing\");\n },\n );\n } else {\n stopRecording(mediaRecorderRef);\n if (pushToTalkState === \"transcribing\") {\n transcribeAudio(recordedChunks.current, context.copilotApiConfig.transcribeAudioUrl!).then(\n async (transcription) => {\n recordedChunks.current = [];\n setPushToTalkState(\"idle\");\n const message = await sendFunction(transcription);\n setStartReadingFromMessageId(message.id);\n },\n );\n }\n }\n\n return () => {\n stopRecording(mediaRecorderRef);\n };\n }, [pushToTalkState]);\n\n useEffect(() => {\n if (inProgress === false && startReadingFromMessageId) {\n const lastMessageIndex = context.messages.findIndex(\n (message) => message.id === startReadingFromMessageId,\n );\n\n const messagesAfterLast = context.messages\n .slice(lastMessageIndex + 1)\n .filter(\n (message) => message.isTextMessage() && message.role === \"assistant\",\n ) as TextMessage[];\n\n const text = messagesAfterLast.map((message) => message.content).join(\"\\n\");\n playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl!, audioContextRef.current!);\n\n setStartReadingFromMessageId(null);\n }\n }, [startReadingFromMessageId, inProgress]);\n\n return { pushToTalkState, setPushToTalkState };\n};\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  checkMicrophonePermission,
3
3
  requestMicAndPlaybackPermission,
4
4
  usePushToTalk
5
- } from "../chunk-5DT3MDBZ.mjs";
5
+ } from "../chunk-S5MBUNGN.mjs";
6
6
  import "../chunk-MRXNTQOX.mjs";
7
7
  export {
8
8
  checkMicrophonePermission,
package/dist/index.js CHANGED
@@ -356,8 +356,8 @@ var ChatContextProvider = ({
356
356
  open,
357
357
  setOpen
358
358
  }) => {
359
- const context = {
360
- labels: __spreadValues(__spreadValues({}, {
359
+ const memoizedLabels = (0, import_react.useMemo)(
360
+ () => __spreadValues(__spreadValues({}, {
361
361
  initial: "",
362
362
  title: "CopilotKit",
363
363
  placeholder: "Type a message...",
@@ -365,7 +365,10 @@ var ChatContextProvider = ({
365
365
  stopGenerating: "Stop generating",
366
366
  regenerateResponse: "Regenerate response"
367
367
  }), labels),
368
- icons: __spreadValues(__spreadValues({}, {
368
+ [labels]
369
+ );
370
+ const memoizedIcons = (0, import_react.useMemo)(
371
+ () => __spreadValues(__spreadValues({}, {
369
372
  openIcon: OpenIcon,
370
373
  closeIcon: CloseIcon,
371
374
  headerCloseIcon: HeaderCloseIcon,
@@ -376,9 +379,17 @@ var ChatContextProvider = ({
376
379
  regenerateIcon: RegenerateIcon,
377
380
  pushToTalkIcon: PushToTalkIcon
378
381
  }), icons),
379
- open,
380
- setOpen
381
- };
382
+ [icons]
383
+ );
384
+ const context = (0, import_react.useMemo)(
385
+ () => ({
386
+ labels: memoizedLabels,
387
+ icons: memoizedIcons,
388
+ open,
389
+ setOpen
390
+ }),
391
+ [memoizedLabels, memoizedIcons, open, setOpen]
392
+ );
382
393
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ChatContext.Provider, { value: context, children });
383
394
  };
384
395
 
@@ -540,10 +551,10 @@ var Messages = ({
540
551
  messages = [...initialMessages, ...messages];
541
552
  const actionResults = {};
542
553
  for (let i = 0; i < messages.length; i++) {
543
- if (messages[i] instanceof import_runtime_client_gql.ActionExecutionMessage) {
554
+ if (messages[i].isActionExecutionMessage()) {
544
555
  const id = messages[i].id;
545
556
  const resultMessage = messages.find(
546
- (message) => message instanceof import_runtime_client_gql.ResultMessage && message.actionExecutionId === id
557
+ (message) => message.isResultMessage() && message.actionExecutionId === id
547
558
  );
548
559
  if (resultMessage) {
549
560
  actionResults[id] = import_runtime_client_gql.ResultMessage.decodeResult(resultMessage.result || "");
@@ -564,7 +575,7 @@ var Messages = ({
564
575
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "copilotKitMessages", children: [
565
576
  messages.map((message, index) => {
566
577
  const isCurrentMessage = index === messages.length - 1;
567
- if (message instanceof import_runtime_client_gql.TextMessage) {
578
+ if (message.isTextMessage()) {
568
579
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
569
580
  RenderTextMessage2,
570
581
  {
@@ -575,7 +586,7 @@ var Messages = ({
575
586
  },
576
587
  index
577
588
  );
578
- } else if (message instanceof import_runtime_client_gql.ActionExecutionMessage) {
589
+ } else if (message.isActionExecutionMessage()) {
579
590
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
580
591
  RenderActionExecutionMessage2,
581
592
  {
@@ -587,7 +598,7 @@ var Messages = ({
587
598
  },
588
599
  index
589
600
  );
590
- } else if (message instanceof import_runtime_client_gql.AgentStateMessage) {
601
+ } else if (message.isAgentStateMessage()) {
591
602
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
592
603
  RenderAgentStateMessage2,
593
604
  {
@@ -598,7 +609,7 @@ var Messages = ({
598
609
  },
599
610
  index
600
611
  );
601
- } else if (message instanceof import_runtime_client_gql.ResultMessage) {
612
+ } else if (message.isResultMessage()) {
602
613
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
603
614
  RenderResultMessage2,
604
615
  {
@@ -685,7 +696,6 @@ var Textarea_default = AutoResizingTextarea;
685
696
 
686
697
  // src/hooks/use-push-to-talk.tsx
687
698
  var import_react_core = require("@copilotkit/react-core");
688
- var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
689
699
  var import_react5 = require("react");
690
700
  var startRecording = (mediaStreamRef, mediaRecorderRef, audioContextRef, recordedChunks, onStop) => __async(void 0, null, function* () {
691
701
  if (!mediaStreamRef.current || !audioContextRef.current) {
@@ -778,7 +788,7 @@ var usePushToTalk = ({
778
788
  (message) => message.id === startReadingFromMessageId
779
789
  );
780
790
  const messagesAfterLast = context.messages.slice(lastMessageIndex + 1).filter(
781
- (message) => message instanceof import_runtime_client_gql2.TextMessage && message.role === "assistant"
791
+ (message) => message.isTextMessage() && message.role === "assistant"
782
792
  );
783
793
  const text = messagesAfterLast.map((message) => message.content).join("\n");
784
794
  playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
@@ -866,9 +876,6 @@ var ResponseButton = ({ onClick, inProgress }) => {
866
876
  ] });
867
877
  };
868
878
 
869
- // src/components/chat/messages/RenderTextMessage.tsx
870
- var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
871
-
872
879
  // src/components/chat/Markdown.tsx
873
880
  var import_react8 = require("react");
874
881
  var import_react_markdown = __toESM(require("react-markdown"));
@@ -1342,7 +1349,7 @@ var import_jsx_runtime12 = require("react/jsx-runtime");
1342
1349
  function RenderTextMessage(props) {
1343
1350
  const { message, inProgress, index, isCurrentMessage } = props;
1344
1351
  const { icons } = useChatContext();
1345
- if (message instanceof import_runtime_client_gql3.TextMessage) {
1352
+ if (message.isTextMessage()) {
1346
1353
  if (message.role === "user") {
1347
1354
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message.content }, index);
1348
1355
  } else if (message.role == "assistant") {
@@ -1352,14 +1359,14 @@ function RenderTextMessage(props) {
1352
1359
  }
1353
1360
 
1354
1361
  // src/components/chat/messages/RenderActionExecutionMessage.tsx
1355
- var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1362
+ var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
1356
1363
  var import_react_core3 = require("@copilotkit/react-core");
1357
1364
  var import_jsx_runtime13 = require("react/jsx-runtime");
1358
1365
  function RenderActionExecutionMessage(props) {
1359
1366
  const { message, inProgress, index, isCurrentMessage, actionResult } = props;
1360
1367
  const { chatComponentsCache } = (0, import_react_core3.useCopilotContext)();
1361
1368
  const { icons } = useChatContext();
1362
- if (message instanceof import_runtime_client_gql4.ActionExecutionMessage) {
1369
+ if (message.isActionExecutionMessage()) {
1363
1370
  if (chatComponentsCache.current !== null && chatComponentsCache.current.actions[message.name]) {
1364
1371
  const render = chatComponentsCache.current.actions[message.name];
1365
1372
  if (typeof render === "string") {
@@ -1377,7 +1384,7 @@ function RenderActionExecutionMessage(props) {
1377
1384
  let status = "inProgress";
1378
1385
  if (actionResult !== void 0) {
1379
1386
  status = "complete";
1380
- } else if (message.status.code !== import_runtime_client_gql4.MessageStatusCode.Pending) {
1387
+ } else if (message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending) {
1381
1388
  status = "executing";
1382
1389
  }
1383
1390
  try {
@@ -1420,25 +1427,23 @@ function RenderActionExecutionMessage(props) {
1420
1427
  }
1421
1428
 
1422
1429
  // src/components/chat/messages/RenderResultMessage.tsx
1423
- var import_runtime_client_gql5 = require("@copilotkit/runtime-client-gql");
1424
1430
  var import_jsx_runtime14 = require("react/jsx-runtime");
1425
1431
  function RenderResultMessage(props) {
1426
1432
  const { message, inProgress, index, isCurrentMessage } = props;
1427
1433
  const { icons } = useChatContext();
1428
- if (message instanceof import_runtime_client_gql5.ResultMessage && inProgress && isCurrentMessage) {
1434
+ if (message.isResultMessage() && inProgress && isCurrentMessage) {
1429
1435
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: icons.spinnerIcon }, index);
1430
1436
  }
1431
1437
  }
1432
1438
 
1433
1439
  // src/components/chat/messages/RenderAgentStateMessage.tsx
1434
- var import_runtime_client_gql6 = require("@copilotkit/runtime-client-gql");
1435
1440
  var import_react_core4 = require("@copilotkit/react-core");
1436
1441
  var import_jsx_runtime15 = require("react/jsx-runtime");
1437
1442
  function RenderAgentStateMessage(props) {
1438
1443
  const { message, inProgress, index, isCurrentMessage } = props;
1439
1444
  const { chatComponentsCache } = (0, import_react_core4.useCopilotContext)();
1440
1445
  const { icons } = useChatContext();
1441
- if (message instanceof import_runtime_client_gql6.AgentStateMessage) {
1446
+ if (message.isAgentStateMessage()) {
1442
1447
  let render;
1443
1448
  if (chatComponentsCache.current !== null) {
1444
1449
  render = chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-global`];
@@ -1491,7 +1496,7 @@ function RenderAgentStateMessage(props) {
1491
1496
  // src/components/chat/Suggestion.tsx
1492
1497
  var import_react_core5 = require("@copilotkit/react-core");
1493
1498
  var import_shared = require("@copilotkit/shared");
1494
- var import_runtime_client_gql7 = require("@copilotkit/runtime-client-gql");
1499
+ var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
1495
1500
  var import_jsx_runtime16 = require("react/jsx-runtime");
1496
1501
  function Suggestion({ title, message, onClick, partial, className }) {
1497
1502
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
@@ -1527,7 +1532,7 @@ var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggest
1527
1532
  context,
1528
1533
  instructions: "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. " + config.instructions + "\n\n" + numOfSuggestionsInstructions,
1529
1534
  data: "Available tools: " + tools + "\n\n",
1530
- requestType: import_runtime_client_gql7.CopilotRequestType.Task,
1535
+ requestType: import_runtime_client_gql3.CopilotRequestType.Task,
1531
1536
  parameters: [
1532
1537
  {
1533
1538
  name: "suggestions",
@@ -1583,13 +1588,11 @@ var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggest
1583
1588
  // src/components/chat/Chat.tsx
1584
1589
  var import_react11 = __toESM(require("react"));
1585
1590
  var import_react_core8 = require("@copilotkit/react-core");
1586
- var import_runtime_client_gql10 = require("@copilotkit/runtime-client-gql");
1591
+ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1587
1592
  var import_shared3 = require("@copilotkit/shared");
1588
1593
 
1589
1594
  // src/components/dev-console/utils.ts
1590
1595
  var import_react_core6 = require("@copilotkit/react-core");
1591
- var import_runtime_client_gql8 = require("@copilotkit/runtime-client-gql");
1592
- var import_runtime_client_gql9 = require("@copilotkit/runtime-client-gql");
1593
1596
  function shouldShowDevConsole(showDevConsole) {
1594
1597
  if (typeof showDevConsole === "boolean") {
1595
1598
  return showDevConsole;
@@ -1679,7 +1682,7 @@ function logMessages(context) {
1679
1682
  return;
1680
1683
  }
1681
1684
  const tableData = context.messages.map((message) => {
1682
- if (message instanceof import_runtime_client_gql8.TextMessage) {
1685
+ if (message.isTextMessage()) {
1683
1686
  return {
1684
1687
  id: message.id,
1685
1688
  type: "TextMessage",
@@ -1688,7 +1691,7 @@ function logMessages(context) {
1688
1691
  scope: void 0,
1689
1692
  content: message.content
1690
1693
  };
1691
- } else if (message instanceof import_runtime_client_gql8.ActionExecutionMessage) {
1694
+ } else if (message.isActionExecutionMessage()) {
1692
1695
  return {
1693
1696
  id: message.id,
1694
1697
  type: "ActionExecutionMessage",
@@ -1697,7 +1700,7 @@ function logMessages(context) {
1697
1700
  scope: message.scope,
1698
1701
  content: message.arguments
1699
1702
  };
1700
- } else if (message instanceof import_runtime_client_gql8.ResultMessage) {
1703
+ } else if (message.isResultMessage()) {
1701
1704
  return {
1702
1705
  id: message.id,
1703
1706
  type: "ResultMessage",
@@ -1706,7 +1709,7 @@ function logMessages(context) {
1706
1709
  scope: message.actionExecutionId,
1707
1710
  content: message.result
1708
1711
  };
1709
- } else if (message instanceof import_runtime_client_gql9.AgentStateMessage) {
1712
+ } else if (message.isAgentStateMessage()) {
1710
1713
  return {
1711
1714
  id: message.id,
1712
1715
  type: `AgentStateMessage (running: ${message.running})`,
@@ -2137,9 +2140,9 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage) =>
2137
2140
  const sendMessage = (messageContent) => __async(void 0, null, function* () {
2138
2141
  abortSuggestions();
2139
2142
  setCurrentSuggestions([]);
2140
- const message = new import_runtime_client_gql10.TextMessage({
2143
+ const message = new import_runtime_client_gql4.TextMessage({
2141
2144
  content: messageContent,
2142
- role: import_runtime_client_gql10.Role.User
2145
+ role: import_runtime_client_gql4.Role.User
2143
2146
  });
2144
2147
  if (onSubmitMessage) {
2145
2148
  try {