@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.
- package/CHANGELOG.md +15 -5
- package/dist/{chunk-LGS6B47Q.mjs → chunk-3KBQXU44.mjs} +10 -10
- package/dist/{chunk-XSUSSWDS.mjs → chunk-3XAXY2Z3.mjs} +2 -2
- package/dist/{chunk-FUCEBN2P.mjs → chunk-47OPG5FM.mjs} +9 -9
- package/dist/{chunk-CTPEKUNX.mjs → chunk-4FIGRRFS.mjs} +5 -7
- package/dist/chunk-4FIGRRFS.mjs.map +1 -0
- package/dist/{chunk-YH2STM73.mjs → chunk-6BL5C56L.mjs} +4 -4
- package/dist/chunk-6BL5C56L.mjs.map +1 -0
- package/dist/{chunk-GOTHQ665.mjs → chunk-6INMITFA.mjs} +3 -4
- package/dist/chunk-6INMITFA.mjs.map +1 -0
- package/dist/{chunk-BJPGMY3I.mjs → chunk-CBBFRI3Q.mjs} +19 -8
- package/dist/{chunk-BJPGMY3I.mjs.map → chunk-CBBFRI3Q.mjs.map} +1 -1
- package/dist/{chunk-GDNJRSD4.mjs → chunk-CPMIEVKK.mjs} +9 -11
- package/dist/chunk-CPMIEVKK.mjs.map +1 -0
- package/dist/{chunk-HBZPOT37.mjs → chunk-JTINVYPK.mjs} +3 -3
- package/dist/{chunk-CPWFYV3U.mjs → chunk-KCAVDFB6.mjs} +2 -2
- package/dist/{chunk-YOH25I6N.mjs → chunk-RQNJNK2W.mjs} +2 -2
- package/dist/{chunk-QI3OM75G.mjs → chunk-RS6UPR5N.mjs} +2 -2
- package/dist/{chunk-5DT3MDBZ.mjs → chunk-S5MBUNGN.mjs} +2 -3
- package/dist/{chunk-5DT3MDBZ.mjs.map → chunk-S5MBUNGN.mjs.map} +1 -1
- package/dist/{chunk-PJNNEX4L.mjs → chunk-SWADR6EH.mjs} +2 -2
- package/dist/{chunk-FLV3J3VX.mjs → chunk-VEC45H6Q.mjs} +2 -2
- package/dist/{chunk-MA5B5ELM.mjs → chunk-WYMTXCQU.mjs} +3 -4
- package/dist/chunk-WYMTXCQU.mjs.map +1 -0
- package/dist/{chunk-FO7Z5LAL.mjs → chunk-YAGE7RCE.mjs} +2 -2
- package/dist/{chunk-RF3KLUPD.mjs → chunk-ZABXREBH.mjs} +3 -4
- package/dist/chunk-ZABXREBH.mjs.map +1 -0
- package/dist/components/chat/Button.js.map +1 -1
- package/dist/components/chat/Button.mjs +2 -2
- package/dist/components/chat/Chat.js +39 -36
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +12 -12
- package/dist/components/chat/ChatContext.js +17 -6
- package/dist/components/chat/ChatContext.js.map +1 -1
- package/dist/components/chat/ChatContext.mjs +1 -1
- package/dist/components/chat/Header.js.map +1 -1
- package/dist/components/chat/Header.mjs +2 -2
- package/dist/components/chat/Input.js +1 -2
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +3 -3
- package/dist/components/chat/Messages.js +6 -6
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +2 -2
- package/dist/components/chat/Modal.js +39 -36
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +16 -16
- package/dist/components/chat/Popup.js +39 -36
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +17 -17
- package/dist/components/chat/Response.js.map +1 -1
- package/dist/components/chat/Response.mjs +2 -2
- package/dist/components/chat/Sidebar.js +39 -36
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +17 -17
- package/dist/components/chat/Window.js.map +1 -1
- package/dist/components/chat/Window.mjs +2 -2
- package/dist/components/chat/index.js +39 -36
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +18 -18
- package/dist/components/chat/messages/RenderActionExecutionMessage.js +1 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +2 -2
- package/dist/components/chat/messages/RenderAgentStateMessage.js +1 -2
- package/dist/components/chat/messages/RenderAgentStateMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderAgentStateMessage.mjs +2 -2
- package/dist/components/chat/messages/RenderResultMessage.js +1 -2
- package/dist/components/chat/messages/RenderResultMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderResultMessage.mjs +2 -2
- package/dist/components/chat/messages/RenderTextMessage.js +1 -2
- package/dist/components/chat/messages/RenderTextMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderTextMessage.mjs +2 -2
- package/dist/components/dev-console/console.js +4 -6
- package/dist/components/dev-console/console.js.map +1 -1
- package/dist/components/dev-console/console.mjs +2 -2
- package/dist/components/dev-console/index.js +4 -6
- package/dist/components/dev-console/index.js.map +1 -1
- package/dist/components/dev-console/index.mjs +2 -2
- package/dist/components/dev-console/utils.js +4 -6
- package/dist/components/dev-console/utils.js.map +1 -1
- package/dist/components/dev-console/utils.mjs +1 -1
- package/dist/components/index.js +39 -36
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +18 -18
- package/dist/hooks/use-push-to-talk.js +1 -2
- package/dist/hooks/use-push-to-talk.js.map +1 -1
- package/dist/hooks/use-push-to-talk.mjs +1 -1
- package/dist/index.js +39 -36
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -18
- package/package.json +8 -8
- package/src/components/chat/ChatContext.tsx +21 -8
- package/src/components/chat/Messages.tsx +6 -6
- package/src/components/chat/messages/RenderActionExecutionMessage.tsx +1 -1
- package/src/components/chat/messages/RenderAgentStateMessage.tsx +1 -1
- package/src/components/chat/messages/RenderResultMessage.tsx +1 -1
- package/src/components/chat/messages/RenderTextMessage.tsx +1 -1
- package/src/components/dev-console/utils.ts +4 -4
- package/src/hooks/use-push-to-talk.tsx +1 -1
- package/dist/chunk-CTPEKUNX.mjs.map +0 -1
- package/dist/chunk-GDNJRSD4.mjs.map +0 -1
- package/dist/chunk-GOTHQ665.mjs.map +0 -1
- package/dist/chunk-MA5B5ELM.mjs.map +0 -1
- package/dist/chunk-RF3KLUPD.mjs.map +0 -1
- package/dist/chunk-YH2STM73.mjs.map +0 -1
- /package/dist/{chunk-LGS6B47Q.mjs.map → chunk-3KBQXU44.mjs.map} +0 -0
- /package/dist/{chunk-XSUSSWDS.mjs.map → chunk-3XAXY2Z3.mjs.map} +0 -0
- /package/dist/{chunk-FUCEBN2P.mjs.map → chunk-47OPG5FM.mjs.map} +0 -0
- /package/dist/{chunk-HBZPOT37.mjs.map → chunk-JTINVYPK.mjs.map} +0 -0
- /package/dist/{chunk-CPWFYV3U.mjs.map → chunk-KCAVDFB6.mjs.map} +0 -0
- /package/dist/{chunk-YOH25I6N.mjs.map → chunk-RQNJNK2W.mjs.map} +0 -0
- /package/dist/{chunk-QI3OM75G.mjs.map → chunk-RS6UPR5N.mjs.map} +0 -0
- /package/dist/{chunk-PJNNEX4L.mjs.map → chunk-SWADR6EH.mjs.map} +0 -0
- /package/dist/{chunk-FLV3J3VX.mjs.map → chunk-VEC45H6Q.mjs.map} +0 -0
- /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-
|
|
5
|
+
} from "../chunk-KCAVDFB6.mjs";
|
|
6
6
|
import "../chunk-WB3YULQ4.mjs";
|
|
7
7
|
import {
|
|
8
8
|
CopilotPopup
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
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-
|
|
16
|
+
} from "../chunk-3KBQXU44.mjs";
|
|
17
17
|
import "../chunk-V7W6IM2V.mjs";
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-
|
|
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-
|
|
24
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-RS6UPR5N.mjs";
|
|
24
|
+
import "../chunk-4FIGRRFS.mjs";
|
|
25
25
|
import "../chunk-OTPAZXVR.mjs";
|
|
26
|
-
import "../chunk-
|
|
26
|
+
import "../chunk-JTINVYPK.mjs";
|
|
27
27
|
import "../chunk-YQFVRDNC.mjs";
|
|
28
28
|
import "../chunk-YQ3D5IQV.mjs";
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
29
|
+
import "../chunk-CPMIEVKK.mjs";
|
|
30
|
+
import "../chunk-3XAXY2Z3.mjs";
|
|
31
31
|
import {
|
|
32
32
|
useChatContext
|
|
33
|
-
} from "../chunk-
|
|
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-
|
|
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
|
|
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
|
|
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":[]}
|
package/dist/index.js
CHANGED
|
@@ -356,8 +356,8 @@ var ChatContextProvider = ({
|
|
|
356
356
|
open,
|
|
357
357
|
setOpen
|
|
358
358
|
}) => {
|
|
359
|
-
const
|
|
360
|
-
|
|
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
|
-
|
|
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
|
-
|
|
380
|
-
|
|
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]
|
|
554
|
+
if (messages[i].isActionExecutionMessage()) {
|
|
544
555
|
const id = messages[i].id;
|
|
545
556
|
const resultMessage = messages.find(
|
|
546
|
-
(message) => message
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 !==
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
2143
|
+
const message = new import_runtime_client_gql4.TextMessage({
|
|
2141
2144
|
content: messageContent,
|
|
2142
|
-
role:
|
|
2145
|
+
role: import_runtime_client_gql4.Role.User
|
|
2143
2146
|
});
|
|
2144
2147
|
if (onSubmitMessage) {
|
|
2145
2148
|
try {
|