@copilotkit/react-core 1.9.2-next.9 → 1.9.3-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.
Files changed (147) hide show
  1. package/CHANGELOG.md +191 -0
  2. package/dist/{chunk-ERXWDCY6.mjs → chunk-36MGCCPZ.mjs} +2 -2
  3. package/dist/{chunk-UBNRUXEK.mjs → chunk-5BSUSFHM.mjs} +2 -2
  4. package/dist/{chunk-G7LYGERN.mjs → chunk-6ZLSC4KB.mjs} +124 -73
  5. package/dist/chunk-6ZLSC4KB.mjs.map +1 -0
  6. package/dist/{chunk-JDEWNLNP.mjs → chunk-BSAVFYRQ.mjs} +11 -11
  7. package/dist/{chunk-JDEWNLNP.mjs.map → chunk-BSAVFYRQ.mjs.map} +1 -1
  8. package/dist/{chunk-JPMIAGI6.mjs → chunk-BVK7PLK6.mjs} +2 -2
  9. package/dist/{chunk-FXK6RQIN.mjs → chunk-CUAFWKTQ.mjs} +4 -4
  10. package/dist/{chunk-XFOTNHYA.mjs → chunk-DKZTPL66.mjs} +2 -2
  11. package/dist/{chunk-XFOTNHYA.mjs.map → chunk-DKZTPL66.mjs.map} +1 -1
  12. package/dist/{chunk-EF5BNM34.mjs → chunk-FN3UA2ZE.mjs} +3 -3
  13. package/dist/{chunk-EXU7GWLC.mjs → chunk-GEE5AMYL.mjs} +9 -9
  14. package/dist/{chunk-WOGURSAL.mjs → chunk-GIMSRCVW.mjs} +64 -23
  15. package/dist/chunk-GIMSRCVW.mjs.map +1 -0
  16. package/dist/{chunk-55QZ2SVJ.mjs → chunk-JWAXDYOW.mjs} +8 -8
  17. package/dist/chunk-JWAXDYOW.mjs.map +1 -0
  18. package/dist/{chunk-3YHYWAHK.mjs → chunk-KIXKBJUV.mjs} +2 -2
  19. package/dist/{chunk-ADIITPD2.mjs → chunk-KLENTCQV.mjs} +34 -8
  20. package/dist/{chunk-ADIITPD2.mjs.map → chunk-KLENTCQV.mjs.map} +1 -1
  21. package/dist/{chunk-OF4SZTLL.mjs → chunk-NGQN3JRJ.mjs} +3 -3
  22. package/dist/{chunk-NQVCZQ5T.mjs → chunk-NJA5ZLAZ.mjs} +27 -8
  23. package/dist/chunk-NJA5ZLAZ.mjs.map +1 -0
  24. package/dist/{chunk-SJJNFYGQ.mjs → chunk-SGF6C7I6.mjs} +4 -4
  25. package/dist/{chunk-CMQV4XNY.mjs → chunk-VDADWRS3.mjs} +2 -2
  26. package/dist/components/copilot-provider/copilot-messages.js +7 -7
  27. package/dist/components/copilot-provider/copilot-messages.js.map +1 -1
  28. package/dist/components/copilot-provider/copilot-messages.mjs +3 -3
  29. package/dist/components/copilot-provider/copilotkit-props.d.ts +14 -9
  30. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  31. package/dist/components/copilot-provider/copilotkit.d.ts +1 -1
  32. package/dist/components/copilot-provider/copilotkit.js +70 -29
  33. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  34. package/dist/components/copilot-provider/copilotkit.mjs +9 -9
  35. package/dist/components/copilot-provider/index.d.ts +1 -1
  36. package/dist/components/copilot-provider/index.js +70 -29
  37. package/dist/components/copilot-provider/index.js.map +1 -1
  38. package/dist/components/copilot-provider/index.mjs +9 -9
  39. package/dist/components/error-boundary/error-boundary.mjs +2 -2
  40. package/dist/components/index.d.ts +1 -1
  41. package/dist/components/index.js +70 -29
  42. package/dist/components/index.js.map +1 -1
  43. package/dist/components/index.mjs +9 -9
  44. package/dist/context/copilot-context.d.ts +1 -1
  45. package/dist/context/copilot-context.js +1 -1
  46. package/dist/context/copilot-context.js.map +1 -1
  47. package/dist/context/copilot-context.mjs +1 -1
  48. package/dist/context/index.d.ts +1 -1
  49. package/dist/context/index.js +1 -1
  50. package/dist/context/index.js.map +1 -1
  51. package/dist/context/index.mjs +4 -4
  52. package/dist/{copilot-context-3da805ab.d.ts → copilot-context-3ab4fdf5.d.ts} +3 -3
  53. package/dist/hooks/index.d.ts +1 -1
  54. package/dist/hooks/index.js +179 -83
  55. package/dist/hooks/index.js.map +1 -1
  56. package/dist/hooks/index.mjs +23 -23
  57. package/dist/hooks/use-chat.d.ts +1 -1
  58. package/dist/hooks/use-chat.js +220 -169
  59. package/dist/hooks/use-chat.js.map +1 -1
  60. package/dist/hooks/use-chat.mjs +4 -4
  61. package/dist/hooks/use-coagent-state-render.js +1 -1
  62. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  63. package/dist/hooks/use-coagent-state-render.mjs +2 -2
  64. package/dist/hooks/use-coagent.d.ts +1 -1
  65. package/dist/hooks/use-coagent.js +154 -77
  66. package/dist/hooks/use-coagent.js.map +1 -1
  67. package/dist/hooks/use-coagent.mjs +14 -14
  68. package/dist/hooks/use-copilot-action.js +26 -7
  69. package/dist/hooks/use-copilot-action.js.map +1 -1
  70. package/dist/hooks/use-copilot-action.mjs +2 -2
  71. package/dist/hooks/use-copilot-additional-instructions.js +1 -1
  72. package/dist/hooks/use-copilot-additional-instructions.js.map +1 -1
  73. package/dist/hooks/use-copilot-additional-instructions.mjs +2 -2
  74. package/dist/hooks/use-copilot-authenticated-action.js +26 -7
  75. package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
  76. package/dist/hooks/use-copilot-authenticated-action.mjs +3 -3
  77. package/dist/hooks/use-copilot-chat.d.ts +1 -1
  78. package/dist/hooks/use-copilot-chat.js +128 -77
  79. package/dist/hooks/use-copilot-chat.js.map +1 -1
  80. package/dist/hooks/use-copilot-chat.mjs +13 -13
  81. package/dist/hooks/use-copilot-readable.js +1 -1
  82. package/dist/hooks/use-copilot-readable.js.map +1 -1
  83. package/dist/hooks/use-copilot-readable.mjs +2 -2
  84. package/dist/hooks/use-copilot-runtime-client.d.ts +2 -2
  85. package/dist/hooks/use-copilot-runtime-client.js +7 -7
  86. package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
  87. package/dist/hooks/use-copilot-runtime-client.mjs +1 -1
  88. package/dist/hooks/use-langgraph-interrupt-render.js +1 -1
  89. package/dist/hooks/use-langgraph-interrupt-render.js.map +1 -1
  90. package/dist/hooks/use-langgraph-interrupt-render.mjs +2 -2
  91. package/dist/hooks/use-langgraph-interrupt.d.ts +1 -1
  92. package/dist/hooks/use-langgraph-interrupt.js +128 -77
  93. package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
  94. package/dist/hooks/use-langgraph-interrupt.mjs +14 -14
  95. package/dist/hooks/use-make-copilot-document-readable.js +1 -1
  96. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  97. package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
  98. package/dist/index.d.ts +1 -1
  99. package/dist/index.js +240 -103
  100. package/dist/index.js.map +1 -1
  101. package/dist/index.mjs +27 -27
  102. package/dist/lib/copilot-task.d.ts +1 -1
  103. package/dist/lib/copilot-task.js.map +1 -1
  104. package/dist/lib/copilot-task.mjs +11 -11
  105. package/dist/lib/index.d.ts +1 -1
  106. package/dist/lib/index.js.map +1 -1
  107. package/dist/lib/index.mjs +11 -11
  108. package/dist/setupTests.d.ts +2 -0
  109. package/dist/setupTests.js +26 -0
  110. package/dist/setupTests.js.map +1 -0
  111. package/dist/setupTests.mjs +24 -0
  112. package/dist/setupTests.mjs.map +1 -0
  113. package/dist/types/interrupt-action.d.ts +1 -1
  114. package/dist/utils/extract.d.ts +1 -1
  115. package/dist/utils/extract.js.map +1 -1
  116. package/dist/utils/extract.mjs +9 -9
  117. package/dist/utils/index.d.ts +1 -1
  118. package/dist/utils/index.js.map +1 -1
  119. package/dist/utils/index.mjs +10 -10
  120. package/jest.config.js +4 -0
  121. package/package.json +6 -3
  122. package/src/components/copilot-provider/__tests__/{copilotkit-trace.test.tsx → copilotkit-error.test.tsx} +17 -17
  123. package/src/components/copilot-provider/copilot-messages.tsx +7 -7
  124. package/src/components/copilot-provider/copilotkit-props.tsx +13 -8
  125. package/src/components/copilot-provider/copilotkit.tsx +61 -19
  126. package/src/context/copilot-context.tsx +4 -4
  127. package/src/hooks/__tests__/use-coagent-config.test.ts +284 -0
  128. package/src/hooks/use-chat.ts +149 -61
  129. package/src/hooks/use-coagent.ts +36 -0
  130. package/src/hooks/use-copilot-action.ts +51 -9
  131. package/src/hooks/use-copilot-runtime-client.ts +11 -12
  132. package/src/setupTests.ts +26 -0
  133. package/tsconfig.json +5 -2
  134. package/dist/chunk-55QZ2SVJ.mjs.map +0 -1
  135. package/dist/chunk-G7LYGERN.mjs.map +0 -1
  136. package/dist/chunk-NQVCZQ5T.mjs.map +0 -1
  137. package/dist/chunk-WOGURSAL.mjs.map +0 -1
  138. /package/dist/{chunk-ERXWDCY6.mjs.map → chunk-36MGCCPZ.mjs.map} +0 -0
  139. /package/dist/{chunk-UBNRUXEK.mjs.map → chunk-5BSUSFHM.mjs.map} +0 -0
  140. /package/dist/{chunk-JPMIAGI6.mjs.map → chunk-BVK7PLK6.mjs.map} +0 -0
  141. /package/dist/{chunk-FXK6RQIN.mjs.map → chunk-CUAFWKTQ.mjs.map} +0 -0
  142. /package/dist/{chunk-EF5BNM34.mjs.map → chunk-FN3UA2ZE.mjs.map} +0 -0
  143. /package/dist/{chunk-EXU7GWLC.mjs.map → chunk-GEE5AMYL.mjs.map} +0 -0
  144. /package/dist/{chunk-3YHYWAHK.mjs.map → chunk-KIXKBJUV.mjs.map} +0 -0
  145. /package/dist/{chunk-OF4SZTLL.mjs.map → chunk-NGQN3JRJ.mjs.map} +0 -0
  146. /package/dist/{chunk-SJJNFYGQ.mjs.map → chunk-SGF6C7I6.mjs.map} +0 -0
  147. /package/dist/{chunk-CMQV4XNY.mjs.map → chunk-VDADWRS3.mjs.map} +0 -0
@@ -158,7 +158,7 @@ var emptyCopilotContext = {
158
158
  langGraphInterruptAction: null,
159
159
  setLangGraphInterruptAction: () => null,
160
160
  removeLangGraphInterruptAction: () => null,
161
- onTrace: void 0
161
+ onError: void 0
162
162
  };
163
163
  var CopilotContext = import_react.default.createContext(emptyCopilotContext);
164
164
  function useCopilotContext() {
@@ -178,6 +178,7 @@ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
178
178
 
179
179
  // src/hooks/use-chat.ts
180
180
  var import_react5 = require("react");
181
+ var import_react_dom = require("react-dom");
181
182
  var import_shared4 = require("@copilotkit/shared");
182
183
  var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
183
184
 
@@ -234,13 +235,13 @@ function shouldShowDevConsole(showDevConsole) {
234
235
  // src/hooks/use-copilot-runtime-client.ts
235
236
  var useCopilotRuntimeClient = (options) => {
236
237
  const { setBannerError } = useToast();
237
- const _a = options, { showDevConsole, onTrace } = _a, runtimeOptions = __objRest(_a, ["showDevConsole", "onTrace"]);
238
+ const _a = options, { showDevConsole, onError } = _a, runtimeOptions = __objRest(_a, ["showDevConsole", "onError"]);
238
239
  const lastStructuredErrorRef = (0, import_react3.useRef)(null);
239
240
  const traceUIError = (error, originalError) => __async(void 0, null, function* () {
240
- if (!onTrace || !runtimeOptions.publicApiKey)
241
+ if (!onError || !runtimeOptions.publicApiKey)
241
242
  return;
242
243
  try {
243
- const traceEvent = {
244
+ const errorEvent = {
244
245
  type: "error",
245
246
  timestamp: Date.now(),
246
247
  context: {
@@ -258,9 +259,9 @@ var useCopilotRuntimeClient = (options) => {
258
259
  },
259
260
  error
260
261
  };
261
- yield onTrace(traceEvent);
262
- } catch (traceError) {
263
- console.error("Error in onTrace handler:", traceError);
262
+ yield onError(errorEvent);
263
+ } catch (error2) {
264
+ console.error("Error in onError handler:", error2);
264
265
  }
265
266
  });
266
267
  const runtimeClient = (0, import_react3.useMemo)(() => {
@@ -324,7 +325,7 @@ var useCopilotRuntimeClient = (options) => {
324
325
  setBannerError(warningError);
325
326
  }
326
327
  }));
327
- }, [runtimeOptions, setBannerError, showDevConsole, onTrace]);
328
+ }, [runtimeOptions, setBannerError, showDevConsole, onError]);
328
329
  return runtimeClient;
329
330
  };
330
331
  function createStructuredError(gqlError) {
@@ -497,9 +498,9 @@ function useChat(options) {
497
498
  const runChatCompletionRef = (0, import_react5.useRef)();
498
499
  const addErrorToast = useErrorToast();
499
500
  const { setBannerError } = useToast();
500
- const { onTrace } = useCopilotContext();
501
+ const { onError } = useCopilotContext();
501
502
  const traceUIError = (error, originalError) => __async(this, null, function* () {
502
- if (!onTrace || !(copilotConfig == null ? void 0 : copilotConfig.publicApiKey))
503
+ if (!onError || !(copilotConfig == null ? void 0 : copilotConfig.publicApiKey))
503
504
  return;
504
505
  try {
505
506
  const traceEvent = {
@@ -520,9 +521,9 @@ function useChat(options) {
520
521
  },
521
522
  error
522
523
  };
523
- yield onTrace(traceEvent);
524
+ yield onError(traceEvent);
524
525
  } catch (traceError) {
525
- console.error("Error in use-chat onTrace handler:", traceError);
526
+ console.error("Error in use-chat onError handler:", traceError);
526
527
  }
527
528
  });
528
529
  const agentSessionRef = (0, import_react5.useRef)(agentSession);
@@ -744,17 +745,22 @@ function useChat(options) {
744
745
  lastAgentStateMessage.state.messages
745
746
  );
746
747
  }
747
- setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
748
- [lastAgentStateMessage.agentName]: {
749
- name: lastAgentStateMessage.agentName,
750
- state: lastAgentStateMessage.state,
751
- running: lastAgentStateMessage.running,
752
- active: lastAgentStateMessage.active,
753
- threadId: lastAgentStateMessage.threadId,
754
- nodeName: lastAgentStateMessage.nodeName,
755
- runId: lastAgentStateMessage.runId
756
- }
757
- }));
748
+ setCoagentStatesWithRef((prevAgentStates) => {
749
+ var _a2;
750
+ return __spreadProps(__spreadValues({}, prevAgentStates), {
751
+ [lastAgentStateMessage.agentName]: {
752
+ name: lastAgentStateMessage.agentName,
753
+ state: lastAgentStateMessage.state,
754
+ running: lastAgentStateMessage.running,
755
+ active: lastAgentStateMessage.active,
756
+ threadId: lastAgentStateMessage.threadId,
757
+ nodeName: lastAgentStateMessage.nodeName,
758
+ runId: lastAgentStateMessage.runId,
759
+ // Preserve existing config from previous state
760
+ config: (_a2 = prevAgentStates[lastAgentStateMessage.agentName]) == null ? void 0 : _a2.config
761
+ }
762
+ });
763
+ });
758
764
  if (lastAgentStateMessage.running) {
759
765
  setAgentSession({
760
766
  threadId: lastAgentStateMessage.threadId,
@@ -784,6 +790,39 @@ function useChat(options) {
784
790
  newMessages
785
791
  );
786
792
  let didExecuteAction = false;
793
+ const executeActionFromMessage = (currentAction, actionMessage) => __async(this, null, function* () {
794
+ var _a2;
795
+ const isInterruptAction = interruptMessages.find((m) => m.id === actionMessage.id);
796
+ followUp = (_a2 = currentAction == null ? void 0 : currentAction.followUp) != null ? _a2 : !isInterruptAction;
797
+ if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
798
+ currentAction._setActivatingMessageId(actionMessage.id);
799
+ }
800
+ const resultMessage = yield executeAction({
801
+ onFunctionCall,
802
+ message: actionMessage,
803
+ chatAbortControllerRef,
804
+ onError: (error) => {
805
+ addErrorToast([error]);
806
+ console.error(`Failed to execute action ${actionMessage.name}: ${error}`);
807
+ },
808
+ setMessages,
809
+ getFinalMessages: () => finalMessages,
810
+ isRenderAndWait: (currentAction == null ? void 0 : currentAction._isRenderAndWait) || false
811
+ });
812
+ didExecuteAction = true;
813
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === actionMessage.id);
814
+ finalMessages.splice(messageIndex + 1, 0, resultMessage);
815
+ if (currentAction == null ? void 0 : currentAction._isRenderAndWait) {
816
+ const messagesForImmediateUpdate = [...finalMessages];
817
+ (0, import_react_dom.flushSync)(() => {
818
+ setMessages(messagesForImmediateUpdate);
819
+ });
820
+ }
821
+ if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
822
+ currentAction._setActivatingMessageId(null);
823
+ }
824
+ return resultMessage;
825
+ });
787
826
  if (onFunctionCall) {
788
827
  const lastMessages = [];
789
828
  for (let i = finalMessages.length - 1; i >= 0; i--) {
@@ -800,37 +839,28 @@ function useChat(options) {
800
839
  (action2) => action2.name === message.name
801
840
  );
802
841
  const currentResultMessagePairedFeAction = message.isResultMessage() ? getPairedFeAction(actions, message) : null;
803
- const executeActionFromMessage = (action2, message2) => __async(this, null, function* () {
804
- var _a2;
805
- const isInterruptAction = interruptMessages.find((m) => m.id === message2.id);
806
- followUp = (_a2 = action2 == null ? void 0 : action2.followUp) != null ? _a2 : !isInterruptAction;
807
- const resultMessage = yield executeAction({
808
- onFunctionCall,
809
- previousMessages,
810
- message: message2,
811
- chatAbortControllerRef,
812
- onError: (error) => {
813
- addErrorToast([error]);
814
- console.error(`Failed to execute action ${message2.name}: ${error}`);
815
- }
816
- });
817
- didExecuteAction = true;
818
- const messageIndex = finalMessages.findIndex((msg) => msg.id === message2.id);
819
- finalMessages.splice(messageIndex + 1, 0, resultMessage);
820
- return resultMessage;
821
- });
822
842
  if (action && message.isActionExecutionMessage()) {
823
- const resultMessage = yield executeActionFromMessage(action, message);
824
- const pairedFeAction = getPairedFeAction(actions, resultMessage);
825
- if (pairedFeAction) {
826
- const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
827
- name: pairedFeAction.name,
828
- arguments: (0, import_shared4.parseJson)(resultMessage.result, resultMessage.result),
829
- status: message.status,
830
- createdAt: message.createdAt,
831
- parentMessageId: message.parentMessageId
832
- });
833
- yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
843
+ const isRenderAndWaitAction = (action == null ? void 0 : action._isRenderAndWait) || false;
844
+ const alreadyProcessed = isRenderAndWaitAction && finalMessages.some(
845
+ (fm) => fm.isResultMessage() && fm.actionExecutionId === message.id
846
+ );
847
+ if (alreadyProcessed) {
848
+ } else {
849
+ const resultMessage = yield executeActionFromMessage(
850
+ action,
851
+ message
852
+ );
853
+ const pairedFeAction = getPairedFeAction(actions, resultMessage);
854
+ if (pairedFeAction) {
855
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
856
+ name: pairedFeAction.name,
857
+ arguments: (0, import_shared4.parseJson)(resultMessage.result, resultMessage.result),
858
+ status: message.status,
859
+ createdAt: message.createdAt,
860
+ parentMessageId: message.parentMessageId
861
+ });
862
+ yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
863
+ }
834
864
  }
835
865
  } else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
836
866
  const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
@@ -848,13 +878,9 @@ function useChat(options) {
848
878
  }
849
879
  setMessages(finalMessages);
850
880
  }
851
- if (
852
- // if followUp is not explicitly false
853
- followUp !== false && // and we executed an action
854
- (didExecuteAction || // the last message is a server side result
855
- !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
856
- !((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)
857
- ) {
881
+ if (followUp !== false && (didExecuteAction || // the last message is a server side result
882
+ !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
883
+ !((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)) {
858
884
  yield new Promise((resolve) => setTimeout(resolve, 10));
859
885
  return yield runChatCompletionRef.current(finalMessages);
860
886
  } else if ((_s = chatAbortControllerRef.current) == null ? void 0 : _s.signal.aborted) {
@@ -962,21 +988,35 @@ function useChat(options) {
962
988
  [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
963
989
  );
964
990
  const reload = useAsyncCallback(
965
- (messageId) => __async(this, null, function* () {
991
+ (reloadMessageId) => __async(this, null, function* () {
966
992
  if (isLoading || messages.length === 0) {
967
993
  return;
968
994
  }
969
- const index = messages.findIndex((msg) => msg.id === messageId);
970
- if (index === -1) {
971
- console.warn(`Message with id ${messageId} not found`);
995
+ const reloadMessageIndex = messages.findIndex((msg) => msg.id === reloadMessageId);
996
+ if (reloadMessageIndex === -1) {
997
+ console.warn(`Message with id ${reloadMessageId} not found`);
972
998
  return;
973
999
  }
974
- let newMessages = messages.slice(0, index);
975
- if (newMessages.length > 0 && newMessages[newMessages.length - 1].isAgentStateMessage()) {
976
- newMessages = newMessages.slice(0, newMessages.length - 1);
1000
+ const reloadMessageRole = messages[reloadMessageIndex].role;
1001
+ if (reloadMessageRole !== import_runtime_client_gql3.MessageRole.Assistant) {
1002
+ console.warn(`Regenerate cannot be performed on ${reloadMessageRole} role`);
1003
+ return;
977
1004
  }
978
- setMessages(newMessages);
979
- return runChatCompletionAndHandleFunctionCall(newMessages);
1005
+ let historyCutoff = [];
1006
+ if (messages.length > 2) {
1007
+ const lastUserMessageBeforeRegenerate = messages.slice(0, reloadMessageIndex).reverse().find(
1008
+ (msg) => (
1009
+ // @ts-expect-error -- message has role
1010
+ msg.role === import_runtime_client_gql3.MessageRole.User
1011
+ )
1012
+ );
1013
+ const indexOfLastUserMessageBeforeRegenerate = messages.findIndex(
1014
+ (msg) => msg.id === lastUserMessageBeforeRegenerate.id
1015
+ );
1016
+ historyCutoff = messages.slice(0, indexOfLastUserMessageBeforeRegenerate + 1);
1017
+ }
1018
+ setMessages(historyCutoff);
1019
+ return runChatCompletionAndHandleFunctionCall(historyCutoff);
980
1020
  }),
981
1021
  [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
982
1022
  );
@@ -1011,20 +1051,31 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
1011
1051
  function executeAction(_0) {
1012
1052
  return __async(this, arguments, function* ({
1013
1053
  onFunctionCall,
1014
- previousMessages,
1015
1054
  message,
1016
1055
  chatAbortControllerRef,
1017
- onError
1056
+ onError,
1057
+ setMessages,
1058
+ getFinalMessages,
1059
+ isRenderAndWait
1018
1060
  }) {
1019
1061
  let result;
1020
1062
  let error = null;
1063
+ const currentMessagesForHandler = getFinalMessages();
1064
+ const handlerReturnedPromise = onFunctionCall({
1065
+ messages: currentMessagesForHandler,
1066
+ name: message.name,
1067
+ args: message.arguments
1068
+ });
1069
+ if (isRenderAndWait) {
1070
+ const currentMessagesForRender = getFinalMessages();
1071
+ (0, import_react_dom.flushSync)(() => {
1072
+ setMessages([...currentMessagesForRender]);
1073
+ });
1074
+ }
1021
1075
  try {
1022
1076
  result = yield Promise.race([
1023
- onFunctionCall({
1024
- messages: previousMessages,
1025
- name: message.name,
1026
- args: message.arguments
1027
- }),
1077
+ handlerReturnedPromise,
1078
+ // Await the promise returned by the handler
1028
1079
  new Promise(
1029
1080
  (resolve) => {
1030
1081
  var _a;
@@ -1072,7 +1123,7 @@ function getPairedFeAction(actions, message) {
1072
1123
 
1073
1124
  // src/components/copilot-provider/copilotkit.tsx
1074
1125
  var import_react7 = require("react");
1075
- var import_react_dom = require("react-dom");
1126
+ var import_react_dom2 = require("react-dom");
1076
1127
  var import_shared5 = require("@copilotkit/shared");
1077
1128
 
1078
1129
  // src/context/copilot-messages-context.tsx