@copilotkit/react-ui 1.9.3 → 1.10.0-next.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 +30 -0
- package/dist/{chunk-KENCH7RN.mjs → chunk-B5IFB5YJ.mjs} +1 -1
- package/dist/chunk-B5IFB5YJ.mjs.map +1 -0
- package/dist/chunk-DBKRAOH7.mjs +34 -0
- package/dist/chunk-DBKRAOH7.mjs.map +1 -0
- package/dist/{chunk-4HUXYD3B.mjs → chunk-DTRPPNSA.mjs} +2 -2
- package/dist/{chunk-YTXEWDNC.mjs → chunk-E6MQUIZW.mjs} +15 -4
- package/dist/chunk-E6MQUIZW.mjs.map +1 -0
- package/dist/{chunk-L3GZ7TXC.mjs → chunk-GCKKSSBU.mjs} +21 -24
- package/dist/chunk-GCKKSSBU.mjs.map +1 -0
- package/dist/{chunk-KN2GCKBE.mjs → chunk-GJ3MFNBX.mjs} +6 -6
- package/dist/{chunk-32MUWKL3.mjs → chunk-JHUTTP5C.mjs} +21 -17
- package/dist/chunk-JHUTTP5C.mjs.map +1 -0
- package/dist/{chunk-HKTWKCPS.mjs → chunk-LXCD3K7B.mjs} +127 -92
- package/dist/chunk-LXCD3K7B.mjs.map +1 -0
- package/dist/{chunk-S5MBUNGN.mjs → chunk-O72ZB5V3.mjs} +4 -4
- package/dist/chunk-O72ZB5V3.mjs.map +1 -0
- package/dist/{chunk-QGSPTXOV.mjs → chunk-O7KTFUAN.mjs} +2 -2
- package/dist/chunk-O7KTFUAN.mjs.map +1 -0
- package/dist/chunk-Q2467VHZ.mjs +30 -0
- package/dist/chunk-Q2467VHZ.mjs.map +1 -0
- package/dist/{chunk-H3EM63WS.mjs → chunk-VLNT34X3.mjs} +2 -2
- package/dist/chunk-VVL6JFCJ.mjs +16 -0
- package/dist/chunk-VVL6JFCJ.mjs.map +1 -0
- package/dist/chunk-WHDNKXMP.mjs +135 -0
- package/dist/chunk-WHDNKXMP.mjs.map +1 -0
- package/dist/{chunk-ALIBUJML.mjs → chunk-WPVTPQ7X.mjs} +2 -2
- package/dist/components/chat/Button.d.ts +1 -1
- package/dist/components/chat/Chat.d.ts +119 -28
- package/dist/components/chat/Chat.js +298 -658
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +12 -15
- package/dist/components/chat/CodeBlock.js.map +1 -1
- package/dist/components/chat/CodeBlock.mjs +1 -1
- package/dist/components/chat/Header.d.ts +1 -1
- package/dist/components/chat/Input.d.ts +1 -1
- package/dist/components/chat/Input.js +3 -3
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +2 -2
- package/dist/components/chat/Markdown.js +13 -2
- package/dist/components/chat/Markdown.js.map +1 -1
- package/dist/components/chat/Markdown.mjs +2 -2
- package/dist/components/chat/Messages.d.ts +3 -3
- package/dist/components/chat/Messages.js +40 -116
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +1 -1
- package/dist/components/chat/Modal.d.ts +7 -2
- package/dist/components/chat/Modal.js +308 -668
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +13 -16
- package/dist/components/chat/Popup.d.ts +7 -2
- package/dist/components/chat/Popup.js +310 -670
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +14 -17
- package/dist/components/chat/Sidebar.d.ts +7 -2
- package/dist/components/chat/Sidebar.js +312 -672
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +14 -17
- package/dist/components/chat/Suggestion.d.ts +2 -9
- package/dist/components/chat/Suggestion.js +6 -96
- package/dist/components/chat/Suggestion.js.map +1 -1
- package/dist/components/chat/Suggestion.mjs +3 -5
- package/dist/components/chat/Suggestions.d.ts +1 -1
- package/dist/components/chat/Suggestions.js +4 -3
- package/dist/components/chat/Suggestions.js.map +1 -1
- package/dist/components/chat/Suggestions.mjs +2 -2
- package/dist/components/chat/Window.d.ts +1 -1
- package/dist/components/chat/index.d.ts +8 -3
- package/dist/components/chat/index.js +316 -676
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +18 -21
- package/dist/components/chat/messages/AssistantMessage.d.ts +1 -1
- package/dist/components/chat/messages/AssistantMessage.js +32 -24
- package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
- package/dist/components/chat/messages/AssistantMessage.mjs +3 -3
- package/dist/components/chat/messages/ImageRenderer.d.ts +12 -0
- package/dist/components/chat/messages/ImageRenderer.js +58 -0
- package/dist/components/chat/messages/ImageRenderer.js.map +1 -0
- package/dist/components/chat/messages/ImageRenderer.mjs +8 -0
- package/dist/components/chat/messages/RenderMessage.d.ts +9 -0
- package/dist/components/chat/messages/{RenderTextMessage.js → RenderMessage.js} +92 -47
- package/dist/components/chat/messages/RenderMessage.js.map +1 -0
- package/dist/components/chat/messages/RenderMessage.mjs +16 -0
- package/dist/components/chat/messages/UserMessage.d.ts +1 -1
- package/dist/components/chat/messages/UserMessage.js +7 -1
- package/dist/components/chat/messages/UserMessage.js.map +1 -1
- package/dist/components/chat/messages/UserMessage.mjs +1 -1
- package/dist/components/chat/props.d.ts +32 -27
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/index.d.ts +8 -3
- package/dist/components/index.js +316 -676
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +18 -21
- package/dist/hooks/use-push-to-talk.d.ts +1 -1
- package/dist/hooks/use-push-to-talk.js +3 -3
- package/dist/hooks/use-push-to-talk.js.map +1 -1
- package/dist/hooks/use-push-to-talk.mjs +1 -1
- package/dist/index.css +59 -3
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.js +322 -682
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -21
- package/dist/types/css.d.ts +3 -0
- package/dist/types/css.js.map +1 -1
- package/package.json +4 -4
- package/src/components/chat/Chat.tsx +193 -105
- package/src/components/chat/CodeBlock.tsx +1 -1
- package/src/components/chat/Markdown.tsx +12 -2
- package/src/components/chat/Messages.tsx +43 -122
- package/src/components/chat/Suggestion.tsx +5 -108
- package/src/components/chat/Suggestions.tsx +0 -1
- package/src/components/chat/index.tsx +1 -1
- package/src/components/chat/messages/AssistantMessage.tsx +15 -23
- package/src/components/chat/messages/ImageRenderer.tsx +37 -0
- package/src/components/chat/messages/{RenderTextMessage.tsx → RenderMessage.tsx} +10 -9
- package/src/components/chat/messages/UserMessage.tsx +16 -5
- package/src/components/chat/props.ts +36 -28
- package/src/css/colors.css +10 -0
- package/src/css/markdown.css +8 -0
- package/src/css/messages.css +54 -5
- package/src/css/suggestions.css +1 -1
- package/src/hooks/use-push-to-talk.tsx +6 -5
- package/src/styles.css +1 -1
- package/src/types/css.ts +3 -0
- package/dist/chunk-2II3Q27P.mjs +0 -112
- package/dist/chunk-2II3Q27P.mjs.map +0 -1
- package/dist/chunk-32MUWKL3.mjs.map +0 -1
- package/dist/chunk-53CVDVS5.mjs +0 -127
- package/dist/chunk-53CVDVS5.mjs.map +0 -1
- package/dist/chunk-B3D7U7TJ.mjs +0 -211
- package/dist/chunk-B3D7U7TJ.mjs.map +0 -1
- package/dist/chunk-C7OB63U5.mjs +0 -36
- package/dist/chunk-C7OB63U5.mjs.map +0 -1
- package/dist/chunk-HKTWKCPS.mjs.map +0 -1
- package/dist/chunk-HWMFMBJC.mjs +0 -10
- package/dist/chunk-HWMFMBJC.mjs.map +0 -1
- package/dist/chunk-IMBPSLL4.mjs +0 -104
- package/dist/chunk-IMBPSLL4.mjs.map +0 -1
- package/dist/chunk-KENCH7RN.mjs.map +0 -1
- package/dist/chunk-L3GZ7TXC.mjs.map +0 -1
- package/dist/chunk-QGSPTXOV.mjs.map +0 -1
- package/dist/chunk-S5MBUNGN.mjs.map +0 -1
- package/dist/chunk-ULDQXCED.mjs +0 -78
- package/dist/chunk-ULDQXCED.mjs.map +0 -1
- package/dist/chunk-YTXEWDNC.mjs.map +0 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderActionExecutionMessage.js +0 -869
- package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +0 -14
- package/dist/components/chat/messages/RenderAgentStateMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderAgentStateMessage.js +0 -854
- package/dist/components/chat/messages/RenderAgentStateMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderAgentStateMessage.mjs +0 -14
- package/dist/components/chat/messages/RenderImageMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderImageMessage.js +0 -823
- package/dist/components/chat/messages/RenderImageMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderImageMessage.mjs +0 -15
- package/dist/components/chat/messages/RenderImageMessage.mjs.map +0 -1
- package/dist/components/chat/messages/RenderResultMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderResultMessage.js +0 -778
- package/dist/components/chat/messages/RenderResultMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderResultMessage.mjs +0 -14
- package/dist/components/chat/messages/RenderResultMessage.mjs.map +0 -1
- package/dist/components/chat/messages/RenderTextMessage.d.ts +0 -9
- package/dist/components/chat/messages/RenderTextMessage.js.map +0 -1
- package/dist/components/chat/messages/RenderTextMessage.mjs +0 -15
- package/dist/components/chat/messages/RenderTextMessage.mjs.map +0 -1
- package/src/components/chat/messages/RenderActionExecutionMessage.tsx +0 -127
- package/src/components/chat/messages/RenderAgentStateMessage.tsx +0 -116
- package/src/components/chat/messages/RenderImageMessage.tsx +0 -64
- package/src/components/chat/messages/RenderResultMessage.tsx +0 -26
- /package/dist/{chunk-4HUXYD3B.mjs.map → chunk-DTRPPNSA.mjs.map} +0 -0
- /package/dist/{chunk-KN2GCKBE.mjs.map → chunk-GJ3MFNBX.mjs.map} +0 -0
- /package/dist/{chunk-H3EM63WS.mjs.map → chunk-VLNT34X3.mjs.map} +0 -0
- /package/dist/{chunk-ALIBUJML.mjs.map → chunk-WPVTPQ7X.mjs.map} +0 -0
- /package/dist/components/chat/messages/{RenderActionExecutionMessage.mjs.map → ImageRenderer.mjs.map} +0 -0
- /package/dist/components/chat/messages/{RenderAgentStateMessage.mjs.map → RenderMessage.mjs.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -85,8 +85,8 @@ __export(src_exports, {
|
|
|
85
85
|
CopilotDevConsole: () => CopilotDevConsole,
|
|
86
86
|
CopilotPopup: () => CopilotPopup,
|
|
87
87
|
CopilotSidebar: () => CopilotSidebar,
|
|
88
|
+
ImageRenderer: () => ImageRenderer,
|
|
88
89
|
Markdown: () => Markdown,
|
|
89
|
-
RenderImageMessage: () => RenderImageMessage,
|
|
90
90
|
RenderSuggestion: () => Suggestion,
|
|
91
91
|
RenderSuggestionsList: () => Suggestions,
|
|
92
92
|
UserMessage: () => UserMessage,
|
|
@@ -97,7 +97,7 @@ __export(src_exports, {
|
|
|
97
97
|
module.exports = __toCommonJS(src_exports);
|
|
98
98
|
|
|
99
99
|
// src/components/chat/Modal.tsx
|
|
100
|
-
var
|
|
100
|
+
var import_react15 = __toESM(require("react"));
|
|
101
101
|
|
|
102
102
|
// src/components/chat/ChatContext.tsx
|
|
103
103
|
var import_react = __toESM(require("react"));
|
|
@@ -1041,18 +1041,12 @@ var Header = ({}) => {
|
|
|
1041
1041
|
|
|
1042
1042
|
// src/components/chat/Messages.tsx
|
|
1043
1043
|
var import_react6 = require("react");
|
|
1044
|
-
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
1045
1044
|
var import_react_core4 = require("@copilotkit/react-core");
|
|
1046
1045
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1047
1046
|
var Messages = ({
|
|
1048
|
-
messages,
|
|
1049
1047
|
inProgress,
|
|
1050
1048
|
children,
|
|
1051
|
-
|
|
1052
|
-
RenderActionExecutionMessage: RenderActionExecutionMessage2,
|
|
1053
|
-
RenderAgentStateMessage: RenderAgentStateMessage2,
|
|
1054
|
-
RenderResultMessage: RenderResultMessage2,
|
|
1055
|
-
RenderImageMessage: RenderImageMessage2,
|
|
1049
|
+
RenderMessage: RenderMessage2,
|
|
1056
1050
|
AssistantMessage: AssistantMessage2,
|
|
1057
1051
|
UserMessage: UserMessage2,
|
|
1058
1052
|
onRegenerate,
|
|
@@ -1061,106 +1055,32 @@ var Messages = ({
|
|
|
1061
1055
|
onThumbsDown,
|
|
1062
1056
|
markdownTagRenderers
|
|
1063
1057
|
}) => {
|
|
1064
|
-
const
|
|
1065
|
-
const
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
);
|
|
1069
|
-
messages = [...initialMessages, ...messages];
|
|
1070
|
-
const actionResults = {};
|
|
1071
|
-
for (let i = 0; i < messages.length; i++) {
|
|
1072
|
-
if (messages[i].isActionExecutionMessage()) {
|
|
1073
|
-
const id = messages[i].id;
|
|
1074
|
-
const resultMessage = messages.find(
|
|
1075
|
-
(message) => message.isResultMessage() && message.actionExecutionId === id
|
|
1076
|
-
);
|
|
1077
|
-
if (resultMessage) {
|
|
1078
|
-
actionResults[id] = import_runtime_client_gql.ResultMessage.decodeResult(resultMessage.result || "");
|
|
1079
|
-
}
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1058
|
+
const { labels } = useChatContext();
|
|
1059
|
+
const { visibleMessages, interrupt } = (0, import_react_core4.useCopilotChat)();
|
|
1060
|
+
const initialMessages = (0, import_react6.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
|
|
1061
|
+
const messages = [...initialMessages, ...visibleMessages];
|
|
1082
1062
|
const { messagesContainerRef, messagesEndRef } = useScrollToBottom(messages);
|
|
1083
|
-
const interrupt = (0, import_react_core4.useLangGraphInterruptRender)();
|
|
1084
1063
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
|
|
1085
1064
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
|
|
1086
1065
|
messages.map((message, index) => {
|
|
1087
1066
|
const isCurrentMessage = index === messages.length - 1;
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
);
|
|
1106
|
-
} else if (message.isActionExecutionMessage()) {
|
|
1107
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1108
|
-
RenderActionExecutionMessage2,
|
|
1109
|
-
{
|
|
1110
|
-
message,
|
|
1111
|
-
inProgress,
|
|
1112
|
-
index,
|
|
1113
|
-
isCurrentMessage,
|
|
1114
|
-
actionResult: actionResults[message.id],
|
|
1115
|
-
AssistantMessage: AssistantMessage2,
|
|
1116
|
-
UserMessage: UserMessage2
|
|
1117
|
-
},
|
|
1118
|
-
index
|
|
1119
|
-
);
|
|
1120
|
-
} else if (message.isAgentStateMessage()) {
|
|
1121
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1122
|
-
RenderAgentStateMessage2,
|
|
1123
|
-
{
|
|
1124
|
-
message,
|
|
1125
|
-
inProgress,
|
|
1126
|
-
index,
|
|
1127
|
-
isCurrentMessage,
|
|
1128
|
-
AssistantMessage: AssistantMessage2,
|
|
1129
|
-
UserMessage: UserMessage2
|
|
1130
|
-
},
|
|
1131
|
-
index
|
|
1132
|
-
);
|
|
1133
|
-
} else if (message.isResultMessage()) {
|
|
1134
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1135
|
-
RenderResultMessage2,
|
|
1136
|
-
{
|
|
1137
|
-
message,
|
|
1138
|
-
inProgress,
|
|
1139
|
-
index,
|
|
1140
|
-
isCurrentMessage,
|
|
1141
|
-
AssistantMessage: AssistantMessage2,
|
|
1142
|
-
UserMessage: UserMessage2
|
|
1143
|
-
},
|
|
1144
|
-
index
|
|
1145
|
-
);
|
|
1146
|
-
} else if (message.isImageMessage && message.isImageMessage()) {
|
|
1147
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1148
|
-
RenderImageMessage2,
|
|
1149
|
-
{
|
|
1150
|
-
message,
|
|
1151
|
-
inProgress,
|
|
1152
|
-
index,
|
|
1153
|
-
isCurrentMessage,
|
|
1154
|
-
AssistantMessage: AssistantMessage2,
|
|
1155
|
-
UserMessage: UserMessage2,
|
|
1156
|
-
onRegenerate,
|
|
1157
|
-
onCopy,
|
|
1158
|
-
onThumbsUp,
|
|
1159
|
-
onThumbsDown
|
|
1160
|
-
},
|
|
1161
|
-
index
|
|
1162
|
-
);
|
|
1163
|
-
}
|
|
1067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1068
|
+
RenderMessage2,
|
|
1069
|
+
{
|
|
1070
|
+
message,
|
|
1071
|
+
inProgress,
|
|
1072
|
+
index,
|
|
1073
|
+
isCurrentMessage,
|
|
1074
|
+
AssistantMessage: AssistantMessage2,
|
|
1075
|
+
UserMessage: UserMessage2,
|
|
1076
|
+
onRegenerate,
|
|
1077
|
+
onCopy,
|
|
1078
|
+
onThumbsUp,
|
|
1079
|
+
onThumbsDown,
|
|
1080
|
+
markdownTagRenderers
|
|
1081
|
+
},
|
|
1082
|
+
index
|
|
1083
|
+
);
|
|
1164
1084
|
}),
|
|
1165
1085
|
interrupt
|
|
1166
1086
|
] }),
|
|
@@ -1168,20 +1088,24 @@ var Messages = ({
|
|
|
1168
1088
|
] });
|
|
1169
1089
|
};
|
|
1170
1090
|
function makeInitialMessages(initial) {
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1091
|
+
if (!initial)
|
|
1092
|
+
return [];
|
|
1093
|
+
if (Array.isArray(initial)) {
|
|
1094
|
+
return initial.map((message) => {
|
|
1095
|
+
return {
|
|
1096
|
+
id: message,
|
|
1097
|
+
role: "assistant",
|
|
1098
|
+
content: message
|
|
1099
|
+
};
|
|
1100
|
+
});
|
|
1178
1101
|
}
|
|
1179
|
-
return
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1102
|
+
return [
|
|
1103
|
+
{
|
|
1104
|
+
id: initial,
|
|
1105
|
+
role: "system",
|
|
1106
|
+
content: initial
|
|
1107
|
+
}
|
|
1108
|
+
];
|
|
1185
1109
|
}
|
|
1186
1110
|
function useScrollToBottom(messages) {
|
|
1187
1111
|
const messagesEndRef = (0, import_react6.useRef)(null);
|
|
@@ -1237,7 +1161,7 @@ function useScrollToBottom(messages) {
|
|
|
1237
1161
|
(0, import_react6.useEffect)(() => {
|
|
1238
1162
|
isUserScrollUpRef.current = false;
|
|
1239
1163
|
scrollToBottom();
|
|
1240
|
-
}, [messages.filter((m) => m.
|
|
1164
|
+
}, [messages.filter((m) => m.role === "user").length]);
|
|
1241
1165
|
return { messagesEndRef, messagesContainerRef };
|
|
1242
1166
|
}
|
|
1243
1167
|
|
|
@@ -1306,6 +1230,7 @@ var Textarea_default = AutoResizingTextarea;
|
|
|
1306
1230
|
|
|
1307
1231
|
// src/hooks/use-push-to-talk.tsx
|
|
1308
1232
|
var import_react_core5 = require("@copilotkit/react-core");
|
|
1233
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
1309
1234
|
var import_react8 = require("react");
|
|
1310
1235
|
var startRecording = (mediaStreamRef, mediaRecorderRef, audioContextRef, recordedChunks, onStop) => __async(void 0, null, function* () {
|
|
1311
1236
|
if (!mediaStreamRef.current || !audioContextRef.current) {
|
|
@@ -1397,9 +1322,8 @@ var usePushToTalk = ({
|
|
|
1397
1322
|
const lastMessageIndex = context.messages.findIndex(
|
|
1398
1323
|
(message) => message.id === startReadingFromMessageId
|
|
1399
1324
|
);
|
|
1400
|
-
const
|
|
1401
|
-
|
|
1402
|
-
);
|
|
1325
|
+
const aguiMessages = (0, import_runtime_client_gql.gqlToAGUI)(context.messages);
|
|
1326
|
+
const messagesAfterLast = aguiMessages.slice(lastMessageIndex + 1).filter((message) => message.role === "assistant");
|
|
1403
1327
|
const text = messagesAfterLast.map((message) => message.content).join("\n");
|
|
1404
1328
|
playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
|
|
1405
1329
|
setStartReadingFromMessageId(null);
|
|
@@ -1544,7 +1468,13 @@ var Input = ({
|
|
|
1544
1468
|
// src/components/chat/messages/UserMessage.tsx
|
|
1545
1469
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1546
1470
|
var UserMessage = (props) => {
|
|
1547
|
-
|
|
1471
|
+
const { message, ImageRenderer: ImageRenderer2 } = props;
|
|
1472
|
+
const isImageMessage = message && "image" in message && message.image;
|
|
1473
|
+
if (isImageMessage) {
|
|
1474
|
+
const imageMessage = message;
|
|
1475
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
|
|
1476
|
+
}
|
|
1477
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
|
|
1548
1478
|
};
|
|
1549
1479
|
|
|
1550
1480
|
// src/components/chat/Markdown.tsx
|
|
@@ -1978,8 +1908,19 @@ var defaultComponents = {
|
|
|
1978
1908
|
children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
|
|
1979
1909
|
}
|
|
1980
1910
|
const match = /language-(\w+)/.exec(className || "");
|
|
1981
|
-
|
|
1982
|
-
|
|
1911
|
+
const hasLanguage = match && match[1];
|
|
1912
|
+
const content = String(children);
|
|
1913
|
+
const hasNewlines = content.includes("\n");
|
|
1914
|
+
const isInline = !hasLanguage && !hasNewlines;
|
|
1915
|
+
if (isInline) {
|
|
1916
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1917
|
+
"code",
|
|
1918
|
+
__spreadProps(__spreadValues({
|
|
1919
|
+
className: `copilotKitMarkdownElement copilotKitInlineCode ${className || ""}`
|
|
1920
|
+
}, props), {
|
|
1921
|
+
children
|
|
1922
|
+
})
|
|
1923
|
+
);
|
|
1983
1924
|
}
|
|
1984
1925
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1985
1926
|
CodeBlock,
|
|
@@ -2055,55 +1996,51 @@ var Markdown = ({ content, components }) => {
|
|
|
2055
1996
|
var import_react12 = require("react");
|
|
2056
1997
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
2057
1998
|
var AssistantMessage = (props) => {
|
|
1999
|
+
var _a;
|
|
2058
2000
|
const { icons, labels } = useChatContext();
|
|
2059
2001
|
const {
|
|
2060
2002
|
message,
|
|
2061
2003
|
isLoading,
|
|
2062
|
-
subComponent,
|
|
2063
2004
|
onRegenerate,
|
|
2064
2005
|
onCopy,
|
|
2065
2006
|
onThumbsUp,
|
|
2066
2007
|
onThumbsDown,
|
|
2067
2008
|
isCurrentMessage,
|
|
2068
|
-
rawData,
|
|
2069
2009
|
markdownTagRenderers
|
|
2070
2010
|
} = props;
|
|
2071
2011
|
const [copied, setCopied] = (0, import_react12.useState)(false);
|
|
2072
2012
|
const handleCopy = () => {
|
|
2073
|
-
|
|
2074
|
-
|
|
2013
|
+
const content2 = (message == null ? void 0 : message.content) || "";
|
|
2014
|
+
if (content2 && onCopy) {
|
|
2015
|
+
navigator.clipboard.writeText(content2);
|
|
2075
2016
|
setCopied(true);
|
|
2076
|
-
onCopy(
|
|
2017
|
+
onCopy(content2);
|
|
2077
2018
|
setTimeout(() => setCopied(false), 2e3);
|
|
2078
|
-
} else if (
|
|
2079
|
-
navigator.clipboard.writeText(
|
|
2019
|
+
} else if (content2) {
|
|
2020
|
+
navigator.clipboard.writeText(content2);
|
|
2080
2021
|
setCopied(true);
|
|
2081
2022
|
setTimeout(() => setCopied(false), 2e3);
|
|
2082
2023
|
}
|
|
2083
2024
|
};
|
|
2084
2025
|
const handleRegenerate = () => {
|
|
2085
|
-
if (onRegenerate)
|
|
2026
|
+
if (onRegenerate)
|
|
2086
2027
|
onRegenerate();
|
|
2087
|
-
}
|
|
2088
2028
|
};
|
|
2089
2029
|
const handleThumbsUp = () => {
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
onThumbsUp(fullMessage);
|
|
2093
|
-
}
|
|
2030
|
+
if (onThumbsUp && message)
|
|
2031
|
+
onThumbsUp(message);
|
|
2094
2032
|
};
|
|
2095
2033
|
const handleThumbsDown = () => {
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
onThumbsDown(fullMessage);
|
|
2099
|
-
}
|
|
2034
|
+
if (onThumbsDown && message)
|
|
2035
|
+
onThumbsDown(message);
|
|
2100
2036
|
};
|
|
2101
2037
|
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
|
|
2038
|
+
const content = (message == null ? void 0 : message.content) || "";
|
|
2039
|
+
const subComponent = (_a = message == null ? void 0 : message.generativeUI) == null ? void 0 : _a.call(message);
|
|
2102
2040
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.
|
|
2106
|
-
message && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
2041
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
|
|
2042
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Markdown, { content, components: markdownTagRenderers }),
|
|
2043
|
+
content && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
2107
2044
|
"div",
|
|
2108
2045
|
{
|
|
2109
2046
|
className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
|
|
@@ -2152,19 +2089,52 @@ var AssistantMessage = (props) => {
|
|
|
2152
2089
|
}
|
|
2153
2090
|
)
|
|
2154
2091
|
] }),
|
|
2155
|
-
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent })
|
|
2092
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent }),
|
|
2093
|
+
isLoading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {})
|
|
2156
2094
|
] });
|
|
2157
2095
|
};
|
|
2158
2096
|
|
|
2159
|
-
// src/components/chat/messages/
|
|
2097
|
+
// src/components/chat/messages/ImageRenderer.tsx
|
|
2098
|
+
var import_react13 = require("react");
|
|
2160
2099
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
2161
|
-
|
|
2100
|
+
var ImageRenderer = ({ image, content, className = "" }) => {
|
|
2101
|
+
const [imageError, setImageError] = (0, import_react13.useState)(false);
|
|
2102
|
+
const imageSrc = `data:image/${image.format};base64,${image.bytes}`;
|
|
2103
|
+
const altText = content || "User uploaded image";
|
|
2104
|
+
const handleImageError = () => {
|
|
2105
|
+
setImageError(true);
|
|
2106
|
+
};
|
|
2107
|
+
if (imageError) {
|
|
2108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: `copilotKitImageRendering copilotKitImageRenderingError ${className}`, children: [
|
|
2109
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitImageRenderingErrorMessage", children: "Failed to load image" }),
|
|
2110
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
|
|
2111
|
+
] });
|
|
2112
|
+
}
|
|
2113
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: `copilotKitImageRendering ${className}`, children: [
|
|
2114
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2115
|
+
"img",
|
|
2116
|
+
{
|
|
2117
|
+
src: imageSrc,
|
|
2118
|
+
alt: altText,
|
|
2119
|
+
className: "copilotKitImageRenderingImage",
|
|
2120
|
+
onError: handleImageError
|
|
2121
|
+
}
|
|
2122
|
+
),
|
|
2123
|
+
content && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
|
|
2124
|
+
] });
|
|
2125
|
+
};
|
|
2126
|
+
|
|
2127
|
+
// src/components/chat/messages/RenderMessage.tsx
|
|
2128
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
2129
|
+
function RenderMessage(_a) {
|
|
2162
2130
|
var _b = _a, {
|
|
2163
2131
|
UserMessage: UserMessage2 = UserMessage,
|
|
2164
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
2132
|
+
AssistantMessage: AssistantMessage2 = AssistantMessage,
|
|
2133
|
+
ImageRenderer: ImageRenderer2 = ImageRenderer
|
|
2165
2134
|
} = _b, props = __objRest(_b, [
|
|
2166
2135
|
"UserMessage",
|
|
2167
|
-
"AssistantMessage"
|
|
2136
|
+
"AssistantMessage",
|
|
2137
|
+
"ImageRenderer"
|
|
2168
2138
|
]);
|
|
2169
2139
|
const {
|
|
2170
2140
|
message,
|
|
@@ -2177,24 +2147,23 @@ function RenderTextMessage(_a) {
|
|
|
2177
2147
|
onThumbsDown,
|
|
2178
2148
|
markdownTagRenderers
|
|
2179
2149
|
} = props;
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
return /* @__PURE__ */ (0,
|
|
2150
|
+
switch (message.role) {
|
|
2151
|
+
case "user":
|
|
2152
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2183
2153
|
UserMessage2,
|
|
2184
2154
|
{
|
|
2185
2155
|
"data-message-role": "user",
|
|
2186
|
-
message
|
|
2187
|
-
|
|
2156
|
+
message,
|
|
2157
|
+
ImageRenderer: ImageRenderer2
|
|
2188
2158
|
},
|
|
2189
2159
|
index
|
|
2190
2160
|
);
|
|
2191
|
-
|
|
2192
|
-
return /* @__PURE__ */ (0,
|
|
2161
|
+
case "assistant":
|
|
2162
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2193
2163
|
AssistantMessage2,
|
|
2194
2164
|
{
|
|
2195
2165
|
"data-message-role": "assistant",
|
|
2196
|
-
message
|
|
2197
|
-
rawData: message,
|
|
2166
|
+
message,
|
|
2198
2167
|
isLoading: inProgress && isCurrentMessage && !message.content,
|
|
2199
2168
|
isGenerating: inProgress && isCurrentMessage && !!message.content,
|
|
2200
2169
|
isCurrentMessage,
|
|
@@ -2202,421 +2171,22 @@ function RenderTextMessage(_a) {
|
|
|
2202
2171
|
onCopy,
|
|
2203
2172
|
onThumbsUp,
|
|
2204
2173
|
onThumbsDown,
|
|
2205
|
-
markdownTagRenderers
|
|
2206
|
-
|
|
2207
|
-
index
|
|
2208
|
-
);
|
|
2209
|
-
}
|
|
2210
|
-
}
|
|
2211
|
-
}
|
|
2212
|
-
|
|
2213
|
-
// src/components/chat/messages/RenderActionExecutionMessage.tsx
|
|
2214
|
-
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
2215
|
-
var import_react_core7 = require("@copilotkit/react-core");
|
|
2216
|
-
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
2217
|
-
function RenderActionExecutionMessage(_a) {
|
|
2218
|
-
var _b = _a, {
|
|
2219
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
2220
|
-
} = _b, props = __objRest(_b, [
|
|
2221
|
-
"AssistantMessage"
|
|
2222
|
-
]);
|
|
2223
|
-
const { chatComponentsCache } = (0, import_react_core7.useCopilotContext)();
|
|
2224
|
-
const { message, inProgress, index, isCurrentMessage, actionResult } = props;
|
|
2225
|
-
if (message.isActionExecutionMessage()) {
|
|
2226
|
-
if (chatComponentsCache.current !== null && (chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"])) {
|
|
2227
|
-
const render = chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"];
|
|
2228
|
-
if (typeof render === "string") {
|
|
2229
|
-
if (isCurrentMessage && inProgress) {
|
|
2230
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2231
|
-
AssistantMessage2,
|
|
2232
|
-
{
|
|
2233
|
-
rawData: message,
|
|
2234
|
-
"data-message-role": "assistant",
|
|
2235
|
-
isLoading: false,
|
|
2236
|
-
isGenerating: true,
|
|
2237
|
-
message: render
|
|
2238
|
-
},
|
|
2239
|
-
index
|
|
2240
|
-
);
|
|
2241
|
-
} else {
|
|
2242
|
-
return null;
|
|
2243
|
-
}
|
|
2244
|
-
} else {
|
|
2245
|
-
const args = message.arguments;
|
|
2246
|
-
let status = "inProgress";
|
|
2247
|
-
if (actionResult !== void 0) {
|
|
2248
|
-
status = "complete";
|
|
2249
|
-
} else if (message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending) {
|
|
2250
|
-
status = "executing";
|
|
2251
|
-
}
|
|
2252
|
-
try {
|
|
2253
|
-
const toRender = render({
|
|
2254
|
-
status,
|
|
2255
|
-
// Cast to any as RenderFunctionStatus is a union that can be complex to narrow here
|
|
2256
|
-
args,
|
|
2257
|
-
result: actionResult,
|
|
2258
|
-
name: message.name,
|
|
2259
|
-
messageId: message.id
|
|
2260
|
-
// Pass messageId for HITL action correlation
|
|
2261
|
-
});
|
|
2262
|
-
if (!toRender && status === "complete") {
|
|
2263
|
-
return null;
|
|
2264
|
-
}
|
|
2265
|
-
if (typeof toRender === "string") {
|
|
2266
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2267
|
-
AssistantMessage2,
|
|
2268
|
-
{
|
|
2269
|
-
rawData: message,
|
|
2270
|
-
"data-message-role": "assistant",
|
|
2271
|
-
isLoading: false,
|
|
2272
|
-
isGenerating: false,
|
|
2273
|
-
message: toRender
|
|
2274
|
-
},
|
|
2275
|
-
index
|
|
2276
|
-
);
|
|
2277
|
-
} else {
|
|
2278
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2279
|
-
AssistantMessage2,
|
|
2280
|
-
{
|
|
2281
|
-
rawData: message,
|
|
2282
|
-
"data-message-role": "action-render",
|
|
2283
|
-
isLoading: false,
|
|
2284
|
-
isGenerating: false,
|
|
2285
|
-
subComponent: toRender
|
|
2286
|
-
},
|
|
2287
|
-
index
|
|
2288
|
-
);
|
|
2289
|
-
}
|
|
2290
|
-
} catch (e) {
|
|
2291
|
-
console.error(`Error executing render function for action ${message.name}: ${e}`);
|
|
2292
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2293
|
-
AssistantMessage2,
|
|
2294
|
-
{
|
|
2295
|
-
rawData: message,
|
|
2296
|
-
"data-message-role": "assistant",
|
|
2297
|
-
isLoading: false,
|
|
2298
|
-
isGenerating: false,
|
|
2299
|
-
subComponent: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
|
|
2300
|
-
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("b", { children: [
|
|
2301
|
-
"\u274C Error executing render function for action ",
|
|
2302
|
-
message.name,
|
|
2303
|
-
":"
|
|
2304
|
-
] }),
|
|
2305
|
-
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("pre", { children: e instanceof Error ? e.message : String(e) })
|
|
2306
|
-
] })
|
|
2307
|
-
},
|
|
2308
|
-
index
|
|
2309
|
-
);
|
|
2310
|
-
}
|
|
2311
|
-
}
|
|
2312
|
-
} else if (!inProgress || !isCurrentMessage) {
|
|
2313
|
-
return null;
|
|
2314
|
-
} else {
|
|
2315
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2316
|
-
AssistantMessage2,
|
|
2317
|
-
{
|
|
2318
|
-
rawData: message,
|
|
2319
|
-
"data-message-role": "assistant",
|
|
2320
|
-
isLoading: true,
|
|
2321
|
-
isGenerating: true
|
|
2322
|
-
},
|
|
2323
|
-
index
|
|
2324
|
-
);
|
|
2325
|
-
}
|
|
2326
|
-
}
|
|
2327
|
-
}
|
|
2328
|
-
|
|
2329
|
-
// src/components/chat/messages/RenderResultMessage.tsx
|
|
2330
|
-
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
2331
|
-
function RenderResultMessage(_a) {
|
|
2332
|
-
var _b = _a, {
|
|
2333
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
2334
|
-
} = _b, props = __objRest(_b, [
|
|
2335
|
-
"AssistantMessage"
|
|
2336
|
-
]);
|
|
2337
|
-
const { message, inProgress, index, isCurrentMessage } = props;
|
|
2338
|
-
if (message.isResultMessage() && inProgress && isCurrentMessage) {
|
|
2339
|
-
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2340
|
-
AssistantMessage2,
|
|
2341
|
-
{
|
|
2342
|
-
"data-message-role": "assistant",
|
|
2343
|
-
rawData: message,
|
|
2344
|
-
isLoading: true,
|
|
2345
|
-
isGenerating: true
|
|
2346
|
-
},
|
|
2347
|
-
index
|
|
2348
|
-
);
|
|
2349
|
-
} else {
|
|
2350
|
-
return null;
|
|
2351
|
-
}
|
|
2352
|
-
}
|
|
2353
|
-
|
|
2354
|
-
// src/components/chat/messages/RenderAgentStateMessage.tsx
|
|
2355
|
-
var import_react_core8 = require("@copilotkit/react-core");
|
|
2356
|
-
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
2357
|
-
function RenderAgentStateMessage(_a) {
|
|
2358
|
-
var _b = _a, {
|
|
2359
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
2360
|
-
} = _b, props = __objRest(_b, [
|
|
2361
|
-
"AssistantMessage"
|
|
2362
|
-
]);
|
|
2363
|
-
const { chatComponentsCache } = (0, import_react_core8.useCopilotContext)();
|
|
2364
|
-
const { message, inProgress, index, isCurrentMessage } = props;
|
|
2365
|
-
if (message.isAgentStateMessage()) {
|
|
2366
|
-
let render;
|
|
2367
|
-
if (chatComponentsCache.current !== null) {
|
|
2368
|
-
render = chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-global`];
|
|
2369
|
-
}
|
|
2370
|
-
if (render) {
|
|
2371
|
-
if (typeof render === "string") {
|
|
2372
|
-
if (isCurrentMessage && inProgress) {
|
|
2373
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2374
|
-
AssistantMessage2,
|
|
2375
|
-
{
|
|
2376
|
-
rawData: message,
|
|
2377
|
-
message: render,
|
|
2378
|
-
"data-message-role": "assistant",
|
|
2379
|
-
isLoading: true,
|
|
2380
|
-
isGenerating: true
|
|
2381
|
-
},
|
|
2382
|
-
index
|
|
2383
|
-
);
|
|
2384
|
-
} else {
|
|
2385
|
-
return null;
|
|
2386
|
-
}
|
|
2387
|
-
} else {
|
|
2388
|
-
const state = message.state;
|
|
2389
|
-
let status = message.active ? "inProgress" : "complete";
|
|
2390
|
-
const toRender = render({
|
|
2391
|
-
status,
|
|
2392
|
-
state,
|
|
2393
|
-
nodeName: message.nodeName
|
|
2394
|
-
});
|
|
2395
|
-
if (!toRender && status === "complete") {
|
|
2396
|
-
return null;
|
|
2397
|
-
}
|
|
2398
|
-
if (!toRender && isCurrentMessage && inProgress) {
|
|
2399
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2400
|
-
AssistantMessage2,
|
|
2401
|
-
{
|
|
2402
|
-
"data-message-role": "assistant",
|
|
2403
|
-
rawData: message,
|
|
2404
|
-
isLoading: true,
|
|
2405
|
-
isGenerating: true
|
|
2406
|
-
},
|
|
2407
|
-
index
|
|
2408
|
-
);
|
|
2409
|
-
} else if (!toRender) {
|
|
2410
|
-
return null;
|
|
2411
|
-
}
|
|
2412
|
-
if (typeof toRender === "string") {
|
|
2413
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2414
|
-
AssistantMessage2,
|
|
2415
|
-
{
|
|
2416
|
-
rawData: message,
|
|
2417
|
-
message: toRender,
|
|
2418
|
-
isLoading: true,
|
|
2419
|
-
isGenerating: true,
|
|
2420
|
-
"data-message-role": "assistant"
|
|
2421
|
-
},
|
|
2422
|
-
index
|
|
2423
|
-
);
|
|
2424
|
-
} else {
|
|
2425
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2426
|
-
AssistantMessage2,
|
|
2427
|
-
{
|
|
2428
|
-
rawData: message,
|
|
2429
|
-
"data-message-role": "agent-state-render",
|
|
2430
|
-
isLoading: false,
|
|
2431
|
-
isGenerating: false,
|
|
2432
|
-
subComponent: toRender
|
|
2433
|
-
},
|
|
2434
|
-
index
|
|
2435
|
-
);
|
|
2436
|
-
}
|
|
2437
|
-
}
|
|
2438
|
-
} else if (!inProgress || !isCurrentMessage) {
|
|
2439
|
-
return null;
|
|
2440
|
-
} else {
|
|
2441
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2442
|
-
AssistantMessage2,
|
|
2443
|
-
{
|
|
2444
|
-
rawData: message,
|
|
2445
|
-
isLoading: true,
|
|
2446
|
-
isGenerating: true,
|
|
2447
|
-
"data-message-role": "assistant"
|
|
2174
|
+
markdownTagRenderers,
|
|
2175
|
+
ImageRenderer: ImageRenderer2
|
|
2448
2176
|
},
|
|
2449
2177
|
index
|
|
2450
2178
|
);
|
|
2451
|
-
}
|
|
2452
2179
|
}
|
|
2453
2180
|
}
|
|
2454
2181
|
|
|
2455
|
-
// src/components/chat/messages/RenderImageMessage.tsx
|
|
2456
|
-
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2457
|
-
function RenderImageMessage(_a) {
|
|
2458
|
-
var _b = _a, {
|
|
2459
|
-
UserMessage: UserMessage2 = UserMessage,
|
|
2460
|
-
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
2461
|
-
} = _b, props = __objRest(_b, [
|
|
2462
|
-
"UserMessage",
|
|
2463
|
-
"AssistantMessage"
|
|
2464
|
-
]);
|
|
2465
|
-
const {
|
|
2466
|
-
message,
|
|
2467
|
-
inProgress,
|
|
2468
|
-
index,
|
|
2469
|
-
isCurrentMessage,
|
|
2470
|
-
onRegenerate,
|
|
2471
|
-
onCopy,
|
|
2472
|
-
onThumbsUp,
|
|
2473
|
-
onThumbsDown
|
|
2474
|
-
} = props;
|
|
2475
|
-
if (message.isImageMessage()) {
|
|
2476
|
-
const imageData = `data:${message.format};base64,${message.bytes}`;
|
|
2477
|
-
const imageComponent = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "copilotKitImage", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2478
|
-
"img",
|
|
2479
|
-
{
|
|
2480
|
-
src: imageData,
|
|
2481
|
-
alt: "User uploaded image",
|
|
2482
|
-
style: { maxWidth: "100%", maxHeight: "300px", borderRadius: "8px" }
|
|
2483
|
-
}
|
|
2484
|
-
) });
|
|
2485
|
-
if (message.role === "user") {
|
|
2486
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2487
|
-
UserMessage2,
|
|
2488
|
-
{
|
|
2489
|
-
"data-message-role": "user",
|
|
2490
|
-
message: "",
|
|
2491
|
-
rawData: message,
|
|
2492
|
-
subComponent: imageComponent
|
|
2493
|
-
},
|
|
2494
|
-
index
|
|
2495
|
-
);
|
|
2496
|
-
} else if (message.role === "assistant") {
|
|
2497
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2498
|
-
AssistantMessage2,
|
|
2499
|
-
{
|
|
2500
|
-
"data-message-role": "assistant",
|
|
2501
|
-
message: "",
|
|
2502
|
-
rawData: message,
|
|
2503
|
-
subComponent: imageComponent,
|
|
2504
|
-
isLoading: inProgress && isCurrentMessage && !message.bytes,
|
|
2505
|
-
isGenerating: inProgress && isCurrentMessage && !!message.bytes,
|
|
2506
|
-
isCurrentMessage,
|
|
2507
|
-
onRegenerate: () => onRegenerate == null ? void 0 : onRegenerate(message.id),
|
|
2508
|
-
onCopy,
|
|
2509
|
-
onThumbsUp,
|
|
2510
|
-
onThumbsDown
|
|
2511
|
-
},
|
|
2512
|
-
index
|
|
2513
|
-
);
|
|
2514
|
-
}
|
|
2515
|
-
}
|
|
2516
|
-
return null;
|
|
2517
|
-
}
|
|
2518
|
-
|
|
2519
2182
|
// src/components/chat/Chat.tsx
|
|
2520
|
-
var
|
|
2521
|
-
var
|
|
2522
|
-
|
|
2523
|
-
// src/components/chat/Suggestion.tsx
|
|
2524
|
-
var import_react_core9 = require("@copilotkit/react-core");
|
|
2183
|
+
var import_react14 = __toESM(require("react"));
|
|
2184
|
+
var import_react_core8 = require("@copilotkit/react-core");
|
|
2525
2185
|
var import_shared3 = require("@copilotkit/shared");
|
|
2526
|
-
var
|
|
2527
|
-
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2528
|
-
function Suggestion({ title, onClick, partial, className }) {
|
|
2529
|
-
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2530
|
-
"button",
|
|
2531
|
-
{
|
|
2532
|
-
disabled: partial,
|
|
2533
|
-
onClick: (e) => {
|
|
2534
|
-
e.preventDefault();
|
|
2535
|
-
onClick();
|
|
2536
|
-
},
|
|
2537
|
-
className: className || (partial ? "suggestion loading" : "suggestion"),
|
|
2538
|
-
"data-test-id": "suggestion",
|
|
2539
|
-
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: title })
|
|
2540
|
-
}
|
|
2541
|
-
);
|
|
2542
|
-
}
|
|
2543
|
-
var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggestions, abortControllerRef) => __async(void 0, null, function* () {
|
|
2544
|
-
const abortController = abortControllerRef.current;
|
|
2545
|
-
const tools = JSON.stringify(
|
|
2546
|
-
Object.values(context.actions).map((action) => ({
|
|
2547
|
-
name: action.name,
|
|
2548
|
-
description: action.description,
|
|
2549
|
-
jsonSchema: JSON.stringify((0, import_shared3.actionParametersToJsonSchema)(action.parameters))
|
|
2550
|
-
}))
|
|
2551
|
-
);
|
|
2552
|
-
const allSuggestions = [];
|
|
2553
|
-
for (const config of Object.values(chatSuggestionConfiguration)) {
|
|
2554
|
-
try {
|
|
2555
|
-
const numOfSuggestionsInstructions = config.minSuggestions === 0 ? `Produce up to ${config.maxSuggestions} suggestions. If there are no highly relevant suggestions you can think of, provide an empty array.` : `Produce between ${config.minSuggestions} and ${config.maxSuggestions} suggestions.`;
|
|
2556
|
-
const result = yield (0, import_react_core9.extract)({
|
|
2557
|
-
context,
|
|
2558
|
-
instructions: "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. ",
|
|
2559
|
-
data: config.instructions + "\n\n" + numOfSuggestionsInstructions + "\n\nAvailable tools: " + tools + "\n\n",
|
|
2560
|
-
requestType: import_runtime_client_gql3.CopilotRequestType.Task,
|
|
2561
|
-
parameters: [
|
|
2562
|
-
{
|
|
2563
|
-
name: "suggestions",
|
|
2564
|
-
type: "object[]",
|
|
2565
|
-
attributes: [
|
|
2566
|
-
{
|
|
2567
|
-
name: "title",
|
|
2568
|
-
description: "The title of the suggestion. This is shown as a button and should be short.",
|
|
2569
|
-
type: "string"
|
|
2570
|
-
},
|
|
2571
|
-
{
|
|
2572
|
-
name: "message",
|
|
2573
|
-
description: "The message to send when the suggestion is clicked. This should be a clear, complete sentence and will be sent as an instruction to the AI.",
|
|
2574
|
-
type: "string"
|
|
2575
|
-
}
|
|
2576
|
-
]
|
|
2577
|
-
}
|
|
2578
|
-
],
|
|
2579
|
-
include: {
|
|
2580
|
-
messages: true,
|
|
2581
|
-
readable: true
|
|
2582
|
-
},
|
|
2583
|
-
abortSignal: abortController == null ? void 0 : abortController.signal,
|
|
2584
|
-
stream: ({ status, args }) => {
|
|
2585
|
-
const suggestions = args.suggestions || [];
|
|
2586
|
-
const newSuggestions = [];
|
|
2587
|
-
for (let i = 0; i < suggestions.length; i++) {
|
|
2588
|
-
if (config.maxSuggestions !== void 0 && i >= config.maxSuggestions) {
|
|
2589
|
-
break;
|
|
2590
|
-
}
|
|
2591
|
-
const { title, message } = suggestions[i];
|
|
2592
|
-
const partial = i == suggestions.length - 1 && status !== "complete";
|
|
2593
|
-
newSuggestions.push({
|
|
2594
|
-
title,
|
|
2595
|
-
message,
|
|
2596
|
-
partial,
|
|
2597
|
-
className: config.className
|
|
2598
|
-
});
|
|
2599
|
-
}
|
|
2600
|
-
setCurrentSuggestions([...allSuggestions, ...newSuggestions]);
|
|
2601
|
-
}
|
|
2602
|
-
});
|
|
2603
|
-
allSuggestions.push(...result.suggestions);
|
|
2604
|
-
} catch (error) {
|
|
2605
|
-
console.error("Error loading suggestions", error);
|
|
2606
|
-
}
|
|
2607
|
-
}
|
|
2608
|
-
if (abortControllerRef.current === abortController) {
|
|
2609
|
-
abortControllerRef.current = null;
|
|
2610
|
-
}
|
|
2611
|
-
});
|
|
2612
|
-
|
|
2613
|
-
// src/components/chat/Chat.tsx
|
|
2614
|
-
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
2615
|
-
var import_shared4 = require("@copilotkit/shared");
|
|
2616
|
-
var import_react_core11 = require("@copilotkit/react-core");
|
|
2186
|
+
var import_react_core9 = require("@copilotkit/react-core");
|
|
2617
2187
|
|
|
2618
2188
|
// src/components/chat/ImageUploadQueue.tsx
|
|
2619
|
-
var
|
|
2189
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
2620
2190
|
var ImageUploadQueue = ({
|
|
2621
2191
|
images,
|
|
2622
2192
|
onRemoveImage,
|
|
@@ -2624,7 +2194,7 @@ var ImageUploadQueue = ({
|
|
|
2624
2194
|
}) => {
|
|
2625
2195
|
if (images.length === 0)
|
|
2626
2196
|
return null;
|
|
2627
|
-
return /* @__PURE__ */ (0,
|
|
2197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2628
2198
|
"div",
|
|
2629
2199
|
{
|
|
2630
2200
|
className: `copilotKitImageUploadQueue ${className}`,
|
|
@@ -2635,7 +2205,7 @@ var ImageUploadQueue = ({
|
|
|
2635
2205
|
margin: "8px",
|
|
2636
2206
|
padding: "8px"
|
|
2637
2207
|
},
|
|
2638
|
-
children: images.map((image, index) => /* @__PURE__ */ (0,
|
|
2208
|
+
children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
2639
2209
|
"div",
|
|
2640
2210
|
{
|
|
2641
2211
|
className: "copilotKitImageUploadQueueItem",
|
|
@@ -2648,7 +2218,7 @@ var ImageUploadQueue = ({
|
|
|
2648
2218
|
overflow: "hidden"
|
|
2649
2219
|
},
|
|
2650
2220
|
children: [
|
|
2651
|
-
/* @__PURE__ */ (0,
|
|
2221
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2652
2222
|
"img",
|
|
2653
2223
|
{
|
|
2654
2224
|
src: `data:${image.contentType};base64,${image.bytes}`,
|
|
@@ -2660,7 +2230,7 @@ var ImageUploadQueue = ({
|
|
|
2660
2230
|
}
|
|
2661
2231
|
}
|
|
2662
2232
|
),
|
|
2663
|
-
/* @__PURE__ */ (0,
|
|
2233
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2664
2234
|
"button",
|
|
2665
2235
|
{
|
|
2666
2236
|
onClick: () => onRemoveImage(index),
|
|
@@ -2693,10 +2263,32 @@ var ImageUploadQueue = ({
|
|
|
2693
2263
|
);
|
|
2694
2264
|
};
|
|
2695
2265
|
|
|
2266
|
+
// src/components/chat/Suggestion.tsx
|
|
2267
|
+
var import_react_core7 = require("@copilotkit/react-core");
|
|
2268
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
2269
|
+
function Suggestion({ title, onClick, partial, className }) {
|
|
2270
|
+
if (!title)
|
|
2271
|
+
return null;
|
|
2272
|
+
const { isLoading } = (0, import_react_core7.useCopilotChat)();
|
|
2273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2274
|
+
"button",
|
|
2275
|
+
{
|
|
2276
|
+
disabled: partial || isLoading,
|
|
2277
|
+
onClick: (e) => {
|
|
2278
|
+
e.preventDefault();
|
|
2279
|
+
onClick();
|
|
2280
|
+
},
|
|
2281
|
+
className: className || (partial ? "suggestion loading" : "suggestion"),
|
|
2282
|
+
"data-test-id": "suggestion",
|
|
2283
|
+
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: title })
|
|
2284
|
+
}
|
|
2285
|
+
);
|
|
2286
|
+
}
|
|
2287
|
+
|
|
2696
2288
|
// src/components/chat/Suggestions.tsx
|
|
2697
|
-
var
|
|
2289
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2698
2290
|
function Suggestions({ suggestions, onSuggestionClick }) {
|
|
2699
|
-
return /* @__PURE__ */ (0,
|
|
2291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2700
2292
|
Suggestion,
|
|
2701
2293
|
{
|
|
2702
2294
|
title: suggestion.title,
|
|
@@ -2710,9 +2302,10 @@ function Suggestions({ suggestions, onSuggestionClick }) {
|
|
|
2710
2302
|
}
|
|
2711
2303
|
|
|
2712
2304
|
// src/components/chat/Chat.tsx
|
|
2713
|
-
var
|
|
2305
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2714
2306
|
function CopilotChat({
|
|
2715
2307
|
instructions,
|
|
2308
|
+
suggestions = "auto",
|
|
2716
2309
|
onSubmitMessage,
|
|
2717
2310
|
makeSystemMessage,
|
|
2718
2311
|
onInProgress,
|
|
@@ -2724,11 +2317,7 @@ function CopilotChat({
|
|
|
2724
2317
|
onThumbsDown,
|
|
2725
2318
|
markdownTagRenderers,
|
|
2726
2319
|
Messages: Messages2 = Messages,
|
|
2727
|
-
|
|
2728
|
-
RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
|
|
2729
|
-
RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
|
|
2730
|
-
RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
|
|
2731
|
-
RenderImageMessage: RenderImageMessage2 = RenderImageMessage,
|
|
2320
|
+
RenderMessage: RenderMessage2 = RenderMessage,
|
|
2732
2321
|
RenderSuggestionsList = Suggestions,
|
|
2733
2322
|
Input: Input2 = Input,
|
|
2734
2323
|
className,
|
|
@@ -2736,14 +2325,15 @@ function CopilotChat({
|
|
|
2736
2325
|
labels,
|
|
2737
2326
|
AssistantMessage: AssistantMessage2 = AssistantMessage,
|
|
2738
2327
|
UserMessage: UserMessage2 = UserMessage,
|
|
2328
|
+
ImageRenderer: ImageRenderer2 = ImageRenderer,
|
|
2739
2329
|
imageUploadsEnabled,
|
|
2740
2330
|
inputFileAccept = "image/*",
|
|
2741
2331
|
hideStopButton
|
|
2742
2332
|
}) {
|
|
2743
|
-
const { additionalInstructions, setChatInstructions } = (0,
|
|
2744
|
-
const [selectedImages, setSelectedImages] = (0,
|
|
2745
|
-
const fileInputRef = (0,
|
|
2746
|
-
(0,
|
|
2333
|
+
const { additionalInstructions, setChatInstructions } = (0, import_react_core8.useCopilotContext)();
|
|
2334
|
+
const [selectedImages, setSelectedImages] = (0, import_react14.useState)([]);
|
|
2335
|
+
const fileInputRef = (0, import_react14.useRef)(null);
|
|
2336
|
+
(0, import_react14.useEffect)(() => {
|
|
2747
2337
|
if (!imageUploadsEnabled)
|
|
2748
2338
|
return;
|
|
2749
2339
|
const handlePaste = (e) => __async(this, null, function* () {
|
|
@@ -2788,7 +2378,7 @@ function CopilotChat({
|
|
|
2788
2378
|
document.addEventListener("paste", handlePaste);
|
|
2789
2379
|
return () => document.removeEventListener("paste", handlePaste);
|
|
2790
2380
|
}, [imageUploadsEnabled]);
|
|
2791
|
-
(0,
|
|
2381
|
+
(0, import_react14.useEffect)(() => {
|
|
2792
2382
|
if (!(additionalInstructions == null ? void 0 : additionalInstructions.length)) {
|
|
2793
2383
|
setChatInstructions(instructions || "");
|
|
2794
2384
|
return;
|
|
@@ -2798,17 +2388,17 @@ function CopilotChat({
|
|
|
2798
2388
|
"Additionally, follow these instructions:",
|
|
2799
2389
|
...additionalInstructions.map((instruction) => `- ${instruction}`)
|
|
2800
2390
|
];
|
|
2801
|
-
console.log("combinedAdditionalInstructions", combinedAdditionalInstructions);
|
|
2802
2391
|
setChatInstructions(combinedAdditionalInstructions.join("\n") || "");
|
|
2803
2392
|
}, [instructions, additionalInstructions]);
|
|
2804
2393
|
const {
|
|
2805
2394
|
visibleMessages,
|
|
2806
2395
|
isLoading,
|
|
2807
|
-
currentSuggestions,
|
|
2808
2396
|
sendMessage,
|
|
2809
2397
|
stopGeneration,
|
|
2810
|
-
reloadMessages
|
|
2398
|
+
reloadMessages,
|
|
2399
|
+
suggestions: currentSuggestions
|
|
2811
2400
|
} = useCopilotChatLogic(
|
|
2401
|
+
suggestions,
|
|
2812
2402
|
makeSystemMessage,
|
|
2813
2403
|
onInProgress,
|
|
2814
2404
|
onSubmitMessage,
|
|
@@ -2823,7 +2413,7 @@ function CopilotChat({
|
|
|
2823
2413
|
}
|
|
2824
2414
|
return sendMessage(text, images);
|
|
2825
2415
|
};
|
|
2826
|
-
const chatContext =
|
|
2416
|
+
const chatContext = import_react14.default.useContext(ChatContext);
|
|
2827
2417
|
const isVisible = chatContext ? chatContext.open : true;
|
|
2828
2418
|
const handleRegenerate = (messageId) => {
|
|
2829
2419
|
if (onRegenerate) {
|
|
@@ -2870,17 +2460,13 @@ function CopilotChat({
|
|
|
2870
2460
|
const removeSelectedImage = (index) => {
|
|
2871
2461
|
setSelectedImages((prev) => prev.filter((_, i) => i !== index));
|
|
2872
2462
|
};
|
|
2873
|
-
return /* @__PURE__ */ (0,
|
|
2874
|
-
/* @__PURE__ */ (0,
|
|
2463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
|
|
2464
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2875
2465
|
Messages2,
|
|
2876
2466
|
{
|
|
2877
2467
|
AssistantMessage: AssistantMessage2,
|
|
2878
2468
|
UserMessage: UserMessage2,
|
|
2879
|
-
|
|
2880
|
-
RenderActionExecutionMessage: RenderActionExecutionMessage2,
|
|
2881
|
-
RenderAgentStateMessage: RenderAgentStateMessage2,
|
|
2882
|
-
RenderResultMessage: RenderResultMessage2,
|
|
2883
|
-
RenderImageMessage: RenderImageMessage2,
|
|
2469
|
+
RenderMessage: RenderMessage2,
|
|
2884
2470
|
messages: visibleMessages,
|
|
2885
2471
|
inProgress: isLoading,
|
|
2886
2472
|
onRegenerate: handleRegenerate,
|
|
@@ -2888,7 +2474,8 @@ function CopilotChat({
|
|
|
2888
2474
|
onThumbsUp,
|
|
2889
2475
|
onThumbsDown,
|
|
2890
2476
|
markdownTagRenderers,
|
|
2891
|
-
|
|
2477
|
+
ImageRenderer: ImageRenderer2,
|
|
2478
|
+
children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2892
2479
|
RenderSuggestionsList,
|
|
2893
2480
|
{
|
|
2894
2481
|
onSuggestionClick: handleSendMessage,
|
|
@@ -2897,9 +2484,9 @@ function CopilotChat({
|
|
|
2897
2484
|
)
|
|
2898
2485
|
}
|
|
2899
2486
|
),
|
|
2900
|
-
imageUploadsEnabled && /* @__PURE__ */ (0,
|
|
2901
|
-
/* @__PURE__ */ (0,
|
|
2902
|
-
/* @__PURE__ */ (0,
|
|
2487
|
+
imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2488
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
|
|
2489
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2903
2490
|
"input",
|
|
2904
2491
|
{
|
|
2905
2492
|
type: "file",
|
|
@@ -2911,7 +2498,7 @@ function CopilotChat({
|
|
|
2911
2498
|
}
|
|
2912
2499
|
)
|
|
2913
2500
|
] }),
|
|
2914
|
-
/* @__PURE__ */ (0,
|
|
2501
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2915
2502
|
Input2,
|
|
2916
2503
|
{
|
|
2917
2504
|
inProgress: isLoading,
|
|
@@ -2933,75 +2520,118 @@ function WrappedCopilotChat({
|
|
|
2933
2520
|
labels,
|
|
2934
2521
|
className
|
|
2935
2522
|
}) {
|
|
2936
|
-
const chatContext =
|
|
2523
|
+
const chatContext = import_react14.default.useContext(ChatContext);
|
|
2937
2524
|
if (!chatContext) {
|
|
2938
|
-
return /* @__PURE__ */ (0,
|
|
2939
|
-
}, children: /* @__PURE__ */ (0,
|
|
2525
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
|
|
2526
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
|
|
2940
2527
|
}
|
|
2941
|
-
return /* @__PURE__ */ (0,
|
|
2528
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, { children });
|
|
2942
2529
|
}
|
|
2943
|
-
var
|
|
2944
|
-
var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
2530
|
+
var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
2945
2531
|
var _a;
|
|
2946
2532
|
const {
|
|
2947
2533
|
visibleMessages,
|
|
2948
2534
|
appendMessage,
|
|
2535
|
+
setMessages,
|
|
2949
2536
|
reloadMessages: defaultReloadMessages,
|
|
2950
2537
|
stopGeneration: defaultStopGeneration,
|
|
2951
2538
|
runChatCompletion,
|
|
2952
|
-
isLoading
|
|
2953
|
-
|
|
2954
|
-
|
|
2539
|
+
isLoading,
|
|
2540
|
+
suggestions,
|
|
2541
|
+
setSuggestions,
|
|
2542
|
+
generateSuggestions,
|
|
2543
|
+
resetSuggestions: resetSuggestionsFromHook,
|
|
2544
|
+
isLoadingSuggestions
|
|
2545
|
+
} = (0, import_react_core8.useCopilotChat)({
|
|
2955
2546
|
makeSystemMessage
|
|
2956
2547
|
});
|
|
2957
|
-
const
|
|
2958
|
-
const
|
|
2959
|
-
const
|
|
2960
|
-
const
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
(0,
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
()
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2548
|
+
const generalContext = (0, import_react_core8.useCopilotContext)();
|
|
2549
|
+
const messagesContext = (0, import_react_core8.useCopilotMessagesContext)();
|
|
2550
|
+
const { actions } = generalContext;
|
|
2551
|
+
const [suggestionsFailed, setSuggestionsFailed] = (0, import_react14.useState)(false);
|
|
2552
|
+
const hasGeneratedInitialSuggestions = (0, import_react14.useRef)(false);
|
|
2553
|
+
(0, import_react14.useEffect)(() => {
|
|
2554
|
+
if (Array.isArray(chatSuggestions)) {
|
|
2555
|
+
setSuggestions(chatSuggestions);
|
|
2556
|
+
hasGeneratedInitialSuggestions.current = true;
|
|
2557
|
+
}
|
|
2558
|
+
}, [JSON.stringify(chatSuggestions), setSuggestions]);
|
|
2559
|
+
const generateSuggestionsWithErrorHandling = (0, import_react14.useCallback)(
|
|
2560
|
+
(context) => __async(void 0, null, function* () {
|
|
2561
|
+
try {
|
|
2562
|
+
yield generateSuggestions();
|
|
2563
|
+
} catch (error) {
|
|
2564
|
+
console.error("Failed to generate suggestions:", error);
|
|
2565
|
+
setSuggestionsFailed(true);
|
|
2566
|
+
}
|
|
2567
|
+
}),
|
|
2568
|
+
[generateSuggestions]
|
|
2569
|
+
);
|
|
2570
|
+
(0, import_react14.useEffect)(() => {
|
|
2571
|
+
if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
|
|
2572
|
+
return;
|
|
2573
|
+
}
|
|
2574
|
+
if (isLoading) {
|
|
2575
|
+
return;
|
|
2576
|
+
}
|
|
2577
|
+
if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
|
|
2578
|
+
return;
|
|
2579
|
+
}
|
|
2580
|
+
if (visibleMessages.length === 0 && !hasGeneratedInitialSuggestions.current) {
|
|
2581
|
+
hasGeneratedInitialSuggestions.current = true;
|
|
2582
|
+
generateSuggestionsWithErrorHandling("initial");
|
|
2583
|
+
return;
|
|
2584
|
+
}
|
|
2585
|
+
if (visibleMessages.length > 0 && suggestions.length === 0) {
|
|
2586
|
+
generateSuggestionsWithErrorHandling("post-message");
|
|
2587
|
+
return;
|
|
2588
|
+
}
|
|
2988
2589
|
}, [
|
|
2590
|
+
chatSuggestions,
|
|
2591
|
+
isLoadingSuggestions,
|
|
2592
|
+
suggestionsFailed,
|
|
2593
|
+
visibleMessages.length,
|
|
2989
2594
|
isLoading,
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
//
|
|
2993
|
-
|
|
2595
|
+
suggestions.length,
|
|
2596
|
+
Object.keys(generalContext.chatSuggestionConfiguration).join(","),
|
|
2597
|
+
// Use stable string instead of object reference
|
|
2598
|
+
generateSuggestionsWithErrorHandling
|
|
2994
2599
|
]);
|
|
2600
|
+
(0, import_react14.useEffect)(() => {
|
|
2601
|
+
if (chatSuggestions !== "auto") {
|
|
2602
|
+
hasGeneratedInitialSuggestions.current = false;
|
|
2603
|
+
setSuggestionsFailed(false);
|
|
2604
|
+
}
|
|
2605
|
+
}, [chatSuggestions]);
|
|
2606
|
+
const stableContext = (0, import_react14.useMemo)(
|
|
2607
|
+
() => __spreadValues(__spreadValues({}, generalContext), messagesContext),
|
|
2608
|
+
[
|
|
2609
|
+
// Only include stable dependencies
|
|
2610
|
+
generalContext.actions,
|
|
2611
|
+
messagesContext.messages.length,
|
|
2612
|
+
generalContext.isLoading
|
|
2613
|
+
]
|
|
2614
|
+
);
|
|
2615
|
+
const resetSuggestions = (0, import_react14.useCallback)(() => {
|
|
2616
|
+
resetSuggestionsFromHook();
|
|
2617
|
+
setSuggestionsFailed(false);
|
|
2618
|
+
hasGeneratedInitialSuggestions.current = false;
|
|
2619
|
+
}, [resetSuggestionsFromHook]);
|
|
2620
|
+
(0, import_react14.useEffect)(() => {
|
|
2621
|
+
onInProgress == null ? void 0 : onInProgress(isLoading);
|
|
2622
|
+
}, [onInProgress, isLoading]);
|
|
2995
2623
|
const sendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
|
|
2996
2624
|
const images = imagesToUse || [];
|
|
2997
|
-
|
|
2998
|
-
|
|
2625
|
+
if (chatSuggestions === "auto" || chatSuggestions === "manual") {
|
|
2626
|
+
setSuggestions([]);
|
|
2627
|
+
}
|
|
2999
2628
|
let firstMessage = null;
|
|
3000
2629
|
if (messageContent.trim().length > 0) {
|
|
3001
|
-
const textMessage =
|
|
3002
|
-
|
|
3003
|
-
role:
|
|
3004
|
-
|
|
2630
|
+
const textMessage = {
|
|
2631
|
+
id: (0, import_shared3.randomId)(),
|
|
2632
|
+
role: "user",
|
|
2633
|
+
content: messageContent
|
|
2634
|
+
};
|
|
3005
2635
|
if (onSubmitMessage) {
|
|
3006
2636
|
try {
|
|
3007
2637
|
yield onSubmitMessage(messageContent);
|
|
@@ -3009,18 +2639,24 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
3009
2639
|
console.error("Error in onSubmitMessage:", error);
|
|
3010
2640
|
}
|
|
3011
2641
|
}
|
|
3012
|
-
yield appendMessage(textMessage, {
|
|
2642
|
+
yield appendMessage(textMessage, {
|
|
2643
|
+
followUp: images.length === 0,
|
|
2644
|
+
clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
|
|
2645
|
+
});
|
|
3013
2646
|
if (!firstMessage) {
|
|
3014
2647
|
firstMessage = textMessage;
|
|
3015
2648
|
}
|
|
3016
2649
|
}
|
|
3017
2650
|
if (images.length > 0) {
|
|
3018
2651
|
for (let i = 0; i < images.length; i++) {
|
|
3019
|
-
const imageMessage =
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
2652
|
+
const imageMessage = {
|
|
2653
|
+
id: (0, import_shared3.randomId)(),
|
|
2654
|
+
role: "user",
|
|
2655
|
+
image: {
|
|
2656
|
+
format: images[i].contentType.replace("image/", ""),
|
|
2657
|
+
bytes: images[i].bytes
|
|
2658
|
+
}
|
|
2659
|
+
};
|
|
3024
2660
|
yield appendMessage(imageMessage, { followUp: i === images.length - 1 });
|
|
3025
2661
|
if (!firstMessage) {
|
|
3026
2662
|
firstMessage = imageMessage;
|
|
@@ -3028,12 +2664,11 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
3028
2664
|
}
|
|
3029
2665
|
}
|
|
3030
2666
|
if (!firstMessage) {
|
|
3031
|
-
return
|
|
2667
|
+
return { role: "user", content: "", id: (0, import_shared3.randomId)() };
|
|
3032
2668
|
}
|
|
3033
2669
|
return firstMessage;
|
|
3034
2670
|
});
|
|
3035
2671
|
const messages = visibleMessages;
|
|
3036
|
-
const { setMessages } = messagesContext;
|
|
3037
2672
|
const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
|
|
3038
2673
|
const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
3039
2674
|
if (generalContext.agentSession) {
|
|
@@ -3054,9 +2689,9 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
3054
2689
|
});
|
|
3055
2690
|
const runCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
3056
2691
|
if (generalContext.agentSession) {
|
|
3057
|
-
yield (0,
|
|
2692
|
+
yield (0, import_react_core9.runAgent)(
|
|
3058
2693
|
generalContext.agentSession.agentName,
|
|
3059
|
-
|
|
2694
|
+
stableContext,
|
|
3060
2695
|
appendMessage,
|
|
3061
2696
|
runChatCompletion,
|
|
3062
2697
|
hint
|
|
@@ -3065,7 +2700,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
3065
2700
|
});
|
|
3066
2701
|
const stopCurrentAgent = () => {
|
|
3067
2702
|
if (generalContext.agentSession) {
|
|
3068
|
-
(0,
|
|
2703
|
+
(0, import_react_core9.stopAgent)(generalContext.agentSession.agentName, stableContext);
|
|
3069
2704
|
}
|
|
3070
2705
|
};
|
|
3071
2706
|
const setCurrentAgentState = (state) => {
|
|
@@ -3080,6 +2715,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
3080
2715
|
}
|
|
3081
2716
|
};
|
|
3082
2717
|
function stopGeneration() {
|
|
2718
|
+
setSuggestions([]);
|
|
3083
2719
|
if (onStopGeneration) {
|
|
3084
2720
|
onStopGeneration({
|
|
3085
2721
|
messages,
|
|
@@ -3113,17 +2749,21 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
3113
2749
|
}
|
|
3114
2750
|
}
|
|
3115
2751
|
return {
|
|
2752
|
+
messages,
|
|
3116
2753
|
visibleMessages,
|
|
3117
2754
|
isLoading,
|
|
3118
|
-
|
|
2755
|
+
suggestions,
|
|
3119
2756
|
sendMessage,
|
|
3120
2757
|
stopGeneration,
|
|
3121
|
-
reloadMessages
|
|
2758
|
+
reloadMessages,
|
|
2759
|
+
resetSuggestions,
|
|
2760
|
+
context: stableContext,
|
|
2761
|
+
actions
|
|
3122
2762
|
};
|
|
3123
2763
|
};
|
|
3124
2764
|
|
|
3125
2765
|
// src/components/chat/Modal.tsx
|
|
3126
|
-
var
|
|
2766
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
3127
2767
|
var CopilotModal = (_a) => {
|
|
3128
2768
|
var _b = _a, {
|
|
3129
2769
|
instructions,
|
|
@@ -3182,18 +2822,18 @@ var CopilotModal = (_a) => {
|
|
|
3182
2822
|
"className",
|
|
3183
2823
|
"children"
|
|
3184
2824
|
]);
|
|
3185
|
-
const [openState, setOpenState] =
|
|
2825
|
+
const [openState, setOpenState] = import_react15.default.useState(defaultOpen);
|
|
3186
2826
|
const setOpen = (open) => {
|
|
3187
2827
|
onSetOpen == null ? void 0 : onSetOpen(open);
|
|
3188
2828
|
setOpenState(open);
|
|
3189
2829
|
};
|
|
3190
|
-
const memoizedHeader = (0,
|
|
3191
|
-
const memoizedChildren = (0,
|
|
3192
|
-
return /* @__PURE__ */ (0,
|
|
2830
|
+
const memoizedHeader = (0, import_react15.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Header2, {}), [Header2]);
|
|
2831
|
+
const memoizedChildren = (0, import_react15.useMemo)(() => children, [children]);
|
|
2832
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(ChatContextProvider, { icons, labels, open: openState, setOpen, children: [
|
|
3193
2833
|
memoizedChildren,
|
|
3194
|
-
/* @__PURE__ */ (0,
|
|
3195
|
-
/* @__PURE__ */ (0,
|
|
3196
|
-
/* @__PURE__ */ (0,
|
|
2834
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className, children: [
|
|
2835
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Button2, {}),
|
|
2836
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
3197
2837
|
Window2,
|
|
3198
2838
|
{
|
|
3199
2839
|
clickOutsideToClose,
|
|
@@ -3201,7 +2841,7 @@ var CopilotModal = (_a) => {
|
|
|
3201
2841
|
hitEscapeToClose,
|
|
3202
2842
|
children: [
|
|
3203
2843
|
memoizedHeader,
|
|
3204
|
-
/* @__PURE__ */ (0,
|
|
2844
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
3205
2845
|
CopilotChat,
|
|
3206
2846
|
__spreadProps(__spreadValues({}, props), {
|
|
3207
2847
|
instructions,
|
|
@@ -3229,22 +2869,22 @@ var CopilotModal = (_a) => {
|
|
|
3229
2869
|
};
|
|
3230
2870
|
|
|
3231
2871
|
// src/components/chat/Popup.tsx
|
|
3232
|
-
var
|
|
2872
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
3233
2873
|
function CopilotPopup(props) {
|
|
3234
2874
|
props = __spreadProps(__spreadValues({}, props), {
|
|
3235
2875
|
className: props.className ? props.className + " copilotKitPopup" : "copilotKitPopup"
|
|
3236
2876
|
});
|
|
3237
|
-
return /* @__PURE__ */ (0,
|
|
2877
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(CopilotModal, __spreadProps(__spreadValues({}, props), { children: props.children }));
|
|
3238
2878
|
}
|
|
3239
2879
|
|
|
3240
2880
|
// src/components/chat/Sidebar.tsx
|
|
3241
|
-
var
|
|
3242
|
-
var
|
|
2881
|
+
var import_react16 = require("react");
|
|
2882
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
3243
2883
|
function CopilotSidebar(props) {
|
|
3244
2884
|
props = __spreadProps(__spreadValues({}, props), {
|
|
3245
2885
|
className: props.className ? props.className + " copilotKitSidebar" : "copilotKitSidebar"
|
|
3246
2886
|
});
|
|
3247
|
-
const [expandedClassName, setExpandedClassName] = (0,
|
|
2887
|
+
const [expandedClassName, setExpandedClassName] = (0, import_react16.useState)(
|
|
3248
2888
|
props.defaultOpen ? "sidebarExpanded" : ""
|
|
3249
2889
|
);
|
|
3250
2890
|
const onSetOpen = (open) => {
|
|
@@ -3252,13 +2892,13 @@ function CopilotSidebar(props) {
|
|
|
3252
2892
|
(_a = props.onSetOpen) == null ? void 0 : _a.call(props, open);
|
|
3253
2893
|
setExpandedClassName(open ? "sidebarExpanded" : "");
|
|
3254
2894
|
};
|
|
3255
|
-
return /* @__PURE__ */ (0,
|
|
2895
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
|
|
3256
2896
|
}
|
|
3257
2897
|
|
|
3258
2898
|
// src/hooks/use-copilot-chat-suggestions.tsx
|
|
3259
|
-
var
|
|
3260
|
-
var
|
|
3261
|
-
var
|
|
2899
|
+
var import_react17 = require("react");
|
|
2900
|
+
var import_react_core10 = require("@copilotkit/react-core");
|
|
2901
|
+
var import_shared4 = require("@copilotkit/shared");
|
|
3262
2902
|
function useCopilotChatSuggestions({
|
|
3263
2903
|
available = "enabled",
|
|
3264
2904
|
instructions,
|
|
@@ -3266,11 +2906,11 @@ function useCopilotChatSuggestions({
|
|
|
3266
2906
|
minSuggestions = 1,
|
|
3267
2907
|
maxSuggestions = 3
|
|
3268
2908
|
}, dependencies = []) {
|
|
3269
|
-
const context = (0,
|
|
3270
|
-
(0,
|
|
2909
|
+
const context = (0, import_react_core10.useCopilotContext)();
|
|
2910
|
+
(0, import_react17.useEffect)(() => {
|
|
3271
2911
|
if (available === "disabled")
|
|
3272
2912
|
return;
|
|
3273
|
-
const id = (0,
|
|
2913
|
+
const id = (0, import_shared4.randomId)();
|
|
3274
2914
|
context.addChatSuggestionConfiguration(id, {
|
|
3275
2915
|
instructions,
|
|
3276
2916
|
minSuggestions,
|
|
@@ -3289,8 +2929,8 @@ function useCopilotChatSuggestions({
|
|
|
3289
2929
|
CopilotDevConsole,
|
|
3290
2930
|
CopilotPopup,
|
|
3291
2931
|
CopilotSidebar,
|
|
2932
|
+
ImageRenderer,
|
|
3292
2933
|
Markdown,
|
|
3293
|
-
RenderImageMessage,
|
|
3294
2934
|
RenderSuggestion,
|
|
3295
2935
|
RenderSuggestionsList,
|
|
3296
2936
|
UserMessage,
|