@copilotkit/react-core 1.9.2-next.19 → 1.9.2-next.20

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 (42) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{chunk-XJ34ATKP.mjs → chunk-FN3UA2ZE.mjs} +2 -2
  3. package/dist/{chunk-7EJ4IWSA.mjs → chunk-K42OD3J6.mjs} +2 -2
  4. package/dist/{chunk-5DODGOMM.mjs → chunk-MTAJI7HV.mjs} +77 -45
  5. package/dist/chunk-MTAJI7HV.mjs.map +1 -0
  6. package/dist/{chunk-WR3XTNHJ.mjs → chunk-NJA5ZLAZ.mjs} +26 -7
  7. package/dist/chunk-NJA5ZLAZ.mjs.map +1 -0
  8. package/dist/{chunk-5PE2XROA.mjs → chunk-UGJGKBFB.mjs} +2 -2
  9. package/dist/{chunk-BHGYBOR3.mjs → chunk-ZOMEQ3XC.mjs} +2 -2
  10. package/dist/hooks/index.js +102 -51
  11. package/dist/hooks/index.js.map +1 -1
  12. package/dist/hooks/index.mjs +6 -6
  13. package/dist/hooks/use-chat.js +170 -138
  14. package/dist/hooks/use-chat.js.map +1 -1
  15. package/dist/hooks/use-chat.mjs +1 -1
  16. package/dist/hooks/use-coagent.js +77 -45
  17. package/dist/hooks/use-coagent.js.map +1 -1
  18. package/dist/hooks/use-coagent.mjs +3 -3
  19. package/dist/hooks/use-copilot-action.js +25 -6
  20. package/dist/hooks/use-copilot-action.js.map +1 -1
  21. package/dist/hooks/use-copilot-action.mjs +1 -1
  22. package/dist/hooks/use-copilot-authenticated-action.js +25 -6
  23. package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
  24. package/dist/hooks/use-copilot-authenticated-action.mjs +2 -2
  25. package/dist/hooks/use-copilot-chat.js +77 -45
  26. package/dist/hooks/use-copilot-chat.js.map +1 -1
  27. package/dist/hooks/use-copilot-chat.mjs +2 -2
  28. package/dist/hooks/use-langgraph-interrupt.js +77 -45
  29. package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
  30. package/dist/hooks/use-langgraph-interrupt.mjs +3 -3
  31. package/dist/index.js +101 -50
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs +6 -6
  34. package/package.json +3 -3
  35. package/src/hooks/use-chat.ts +110 -46
  36. package/src/hooks/use-copilot-action.ts +51 -9
  37. package/dist/chunk-5DODGOMM.mjs.map +0 -1
  38. package/dist/chunk-WR3XTNHJ.mjs.map +0 -1
  39. /package/dist/{chunk-XJ34ATKP.mjs.map → chunk-FN3UA2ZE.mjs.map} +0 -0
  40. /package/dist/{chunk-7EJ4IWSA.mjs.map → chunk-K42OD3J6.mjs.map} +0 -0
  41. /package/dist/{chunk-5PE2XROA.mjs.map → chunk-UGJGKBFB.mjs.map} +0 -0
  42. /package/dist/{chunk-BHGYBOR3.mjs.map → chunk-ZOMEQ3XC.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  defaultSystemMessage,
3
3
  useCopilotChat
4
- } from "../chunk-7EJ4IWSA.mjs";
4
+ } from "../chunk-K42OD3J6.mjs";
5
5
  import "../chunk-KWQPQ4MM.mjs";
6
6
  import "../chunk-SJJNFYGQ.mjs";
7
7
  import "../chunk-R2LNRHJP.mjs";
@@ -11,7 +11,7 @@ import "../chunk-PMAFHQ7P.mjs";
11
11
  import "../chunk-57K2ZJ5F.mjs";
12
12
  import "../chunk-YPSGKPDA.mjs";
13
13
  import "../chunk-DCTJZ742.mjs";
14
- import "../chunk-5DODGOMM.mjs";
14
+ import "../chunk-MTAJI7HV.mjs";
15
15
  import "../chunk-4CEQJ2X6.mjs";
16
16
  import "../chunk-3OQM3NEK.mjs";
17
17
  import "../chunk-O7ARI5CV.mjs";
@@ -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
 
@@ -784,6 +785,39 @@ function useChat(options) {
784
785
  newMessages
785
786
  );
786
787
  let didExecuteAction = false;
788
+ const executeActionFromMessage = (currentAction, actionMessage) => __async(this, null, function* () {
789
+ var _a2;
790
+ const isInterruptAction = interruptMessages.find((m) => m.id === actionMessage.id);
791
+ followUp = (_a2 = currentAction == null ? void 0 : currentAction.followUp) != null ? _a2 : !isInterruptAction;
792
+ if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
793
+ currentAction._setActivatingMessageId(actionMessage.id);
794
+ }
795
+ const resultMessage = yield executeAction({
796
+ onFunctionCall,
797
+ message: actionMessage,
798
+ chatAbortControllerRef,
799
+ onError: (error) => {
800
+ addErrorToast([error]);
801
+ console.error(`Failed to execute action ${actionMessage.name}: ${error}`);
802
+ },
803
+ setMessages,
804
+ getFinalMessages: () => finalMessages,
805
+ isRenderAndWait: (currentAction == null ? void 0 : currentAction._isRenderAndWait) || false
806
+ });
807
+ didExecuteAction = true;
808
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === actionMessage.id);
809
+ finalMessages.splice(messageIndex + 1, 0, resultMessage);
810
+ if (currentAction == null ? void 0 : currentAction._isRenderAndWait) {
811
+ const messagesForImmediateUpdate = [...finalMessages];
812
+ (0, import_react_dom.flushSync)(() => {
813
+ setMessages(messagesForImmediateUpdate);
814
+ });
815
+ }
816
+ if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
817
+ currentAction._setActivatingMessageId(null);
818
+ }
819
+ return resultMessage;
820
+ });
787
821
  if (onFunctionCall) {
788
822
  const lastMessages = [];
789
823
  for (let i = finalMessages.length - 1; i >= 0; i--) {
@@ -800,37 +834,28 @@ function useChat(options) {
800
834
  (action2) => action2.name === message.name
801
835
  );
802
836
  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
837
  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);
838
+ const isRenderAndWaitAction = (action == null ? void 0 : action._isRenderAndWait) || false;
839
+ const alreadyProcessed = isRenderAndWaitAction && finalMessages.some(
840
+ (fm) => fm.isResultMessage() && fm.actionExecutionId === message.id
841
+ );
842
+ if (alreadyProcessed) {
843
+ } else {
844
+ const resultMessage = yield executeActionFromMessage(
845
+ action,
846
+ message
847
+ );
848
+ const pairedFeAction = getPairedFeAction(actions, resultMessage);
849
+ if (pairedFeAction) {
850
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
851
+ name: pairedFeAction.name,
852
+ arguments: (0, import_shared4.parseJson)(resultMessage.result, resultMessage.result),
853
+ status: message.status,
854
+ createdAt: message.createdAt,
855
+ parentMessageId: message.parentMessageId
856
+ });
857
+ yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
858
+ }
834
859
  }
835
860
  } else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
836
861
  const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
@@ -848,13 +873,9 @@ function useChat(options) {
848
873
  }
849
874
  setMessages(finalMessages);
850
875
  }
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
- ) {
876
+ if (followUp !== false && (didExecuteAction || // the last message is a server side result
877
+ !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
878
+ !((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)) {
858
879
  yield new Promise((resolve) => setTimeout(resolve, 10));
859
880
  return yield runChatCompletionRef.current(finalMessages);
860
881
  } else if ((_s = chatAbortControllerRef.current) == null ? void 0 : _s.signal.aborted) {
@@ -1025,20 +1046,31 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
1025
1046
  function executeAction(_0) {
1026
1047
  return __async(this, arguments, function* ({
1027
1048
  onFunctionCall,
1028
- previousMessages,
1029
1049
  message,
1030
1050
  chatAbortControllerRef,
1031
- onError
1051
+ onError,
1052
+ setMessages,
1053
+ getFinalMessages,
1054
+ isRenderAndWait
1032
1055
  }) {
1033
1056
  let result;
1034
1057
  let error = null;
1058
+ const currentMessagesForHandler = getFinalMessages();
1059
+ const handlerReturnedPromise = onFunctionCall({
1060
+ messages: currentMessagesForHandler,
1061
+ name: message.name,
1062
+ args: message.arguments
1063
+ });
1064
+ if (isRenderAndWait) {
1065
+ const currentMessagesForRender = getFinalMessages();
1066
+ (0, import_react_dom.flushSync)(() => {
1067
+ setMessages([...currentMessagesForRender]);
1068
+ });
1069
+ }
1035
1070
  try {
1036
1071
  result = yield Promise.race([
1037
- onFunctionCall({
1038
- messages: previousMessages,
1039
- name: message.name,
1040
- args: message.arguments
1041
- }),
1072
+ handlerReturnedPromise,
1073
+ // Await the promise returned by the handler
1042
1074
  new Promise(
1043
1075
  (resolve) => {
1044
1076
  var _a;
@@ -1086,7 +1118,7 @@ function getPairedFeAction(actions, message) {
1086
1118
 
1087
1119
  // src/components/copilot-provider/copilotkit.tsx
1088
1120
  var import_react7 = require("react");
1089
- var import_react_dom = require("react-dom");
1121
+ var import_react_dom2 = require("react-dom");
1090
1122
  var import_shared5 = require("@copilotkit/shared");
1091
1123
 
1092
1124
  // src/context/copilot-messages-context.tsx