@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
@@ -198,6 +198,7 @@ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
198
198
 
199
199
  // src/hooks/use-chat.ts
200
200
  var import_react6 = require("react");
201
+ var import_react_dom = require("react-dom");
201
202
  var import_shared4 = require("@copilotkit/shared");
202
203
  var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
203
204
 
@@ -804,6 +805,39 @@ function useChat(options) {
804
805
  newMessages
805
806
  );
806
807
  let didExecuteAction = false;
808
+ const executeActionFromMessage = (currentAction, actionMessage) => __async(this, null, function* () {
809
+ var _a2;
810
+ const isInterruptAction = interruptMessages.find((m) => m.id === actionMessage.id);
811
+ followUp = (_a2 = currentAction == null ? void 0 : currentAction.followUp) != null ? _a2 : !isInterruptAction;
812
+ if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
813
+ currentAction._setActivatingMessageId(actionMessage.id);
814
+ }
815
+ const resultMessage = yield executeAction({
816
+ onFunctionCall,
817
+ message: actionMessage,
818
+ chatAbortControllerRef,
819
+ onError: (error) => {
820
+ addErrorToast([error]);
821
+ console.error(`Failed to execute action ${actionMessage.name}: ${error}`);
822
+ },
823
+ setMessages,
824
+ getFinalMessages: () => finalMessages,
825
+ isRenderAndWait: (currentAction == null ? void 0 : currentAction._isRenderAndWait) || false
826
+ });
827
+ didExecuteAction = true;
828
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === actionMessage.id);
829
+ finalMessages.splice(messageIndex + 1, 0, resultMessage);
830
+ if (currentAction == null ? void 0 : currentAction._isRenderAndWait) {
831
+ const messagesForImmediateUpdate = [...finalMessages];
832
+ (0, import_react_dom.flushSync)(() => {
833
+ setMessages(messagesForImmediateUpdate);
834
+ });
835
+ }
836
+ if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
837
+ currentAction._setActivatingMessageId(null);
838
+ }
839
+ return resultMessage;
840
+ });
807
841
  if (onFunctionCall) {
808
842
  const lastMessages = [];
809
843
  for (let i = finalMessages.length - 1; i >= 0; i--) {
@@ -820,37 +854,28 @@ function useChat(options) {
820
854
  (action2) => action2.name === message.name
821
855
  );
822
856
  const currentResultMessagePairedFeAction = message.isResultMessage() ? getPairedFeAction(actions, message) : null;
823
- const executeActionFromMessage = (action2, message2) => __async(this, null, function* () {
824
- var _a2;
825
- const isInterruptAction = interruptMessages.find((m) => m.id === message2.id);
826
- followUp = (_a2 = action2 == null ? void 0 : action2.followUp) != null ? _a2 : !isInterruptAction;
827
- const resultMessage = yield executeAction({
828
- onFunctionCall,
829
- previousMessages,
830
- message: message2,
831
- chatAbortControllerRef,
832
- onError: (error) => {
833
- addErrorToast([error]);
834
- console.error(`Failed to execute action ${message2.name}: ${error}`);
835
- }
836
- });
837
- didExecuteAction = true;
838
- const messageIndex = finalMessages.findIndex((msg) => msg.id === message2.id);
839
- finalMessages.splice(messageIndex + 1, 0, resultMessage);
840
- return resultMessage;
841
- });
842
857
  if (action && message.isActionExecutionMessage()) {
843
- const resultMessage = yield executeActionFromMessage(action, message);
844
- const pairedFeAction = getPairedFeAction(actions, resultMessage);
845
- if (pairedFeAction) {
846
- const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
847
- name: pairedFeAction.name,
848
- arguments: (0, import_shared4.parseJson)(resultMessage.result, resultMessage.result),
849
- status: message.status,
850
- createdAt: message.createdAt,
851
- parentMessageId: message.parentMessageId
852
- });
853
- yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
858
+ const isRenderAndWaitAction = (action == null ? void 0 : action._isRenderAndWait) || false;
859
+ const alreadyProcessed = isRenderAndWaitAction && finalMessages.some(
860
+ (fm) => fm.isResultMessage() && fm.actionExecutionId === message.id
861
+ );
862
+ if (alreadyProcessed) {
863
+ } else {
864
+ const resultMessage = yield executeActionFromMessage(
865
+ action,
866
+ message
867
+ );
868
+ const pairedFeAction = getPairedFeAction(actions, resultMessage);
869
+ if (pairedFeAction) {
870
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
871
+ name: pairedFeAction.name,
872
+ arguments: (0, import_shared4.parseJson)(resultMessage.result, resultMessage.result),
873
+ status: message.status,
874
+ createdAt: message.createdAt,
875
+ parentMessageId: message.parentMessageId
876
+ });
877
+ yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
878
+ }
854
879
  }
855
880
  } else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
856
881
  const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
@@ -868,13 +893,9 @@ function useChat(options) {
868
893
  }
869
894
  setMessages(finalMessages);
870
895
  }
871
- if (
872
- // if followUp is not explicitly false
873
- followUp !== false && // and we executed an action
874
- (didExecuteAction || // the last message is a server side result
875
- !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
876
- !((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)
877
- ) {
896
+ if (followUp !== false && (didExecuteAction || // the last message is a server side result
897
+ !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
898
+ !((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)) {
878
899
  yield new Promise((resolve) => setTimeout(resolve, 10));
879
900
  return yield runChatCompletionRef.current(finalMessages);
880
901
  } else if ((_s = chatAbortControllerRef.current) == null ? void 0 : _s.signal.aborted) {
@@ -1045,20 +1066,31 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
1045
1066
  function executeAction(_0) {
1046
1067
  return __async(this, arguments, function* ({
1047
1068
  onFunctionCall,
1048
- previousMessages,
1049
1069
  message,
1050
1070
  chatAbortControllerRef,
1051
- onError
1071
+ onError,
1072
+ setMessages,
1073
+ getFinalMessages,
1074
+ isRenderAndWait
1052
1075
  }) {
1053
1076
  let result;
1054
1077
  let error = null;
1078
+ const currentMessagesForHandler = getFinalMessages();
1079
+ const handlerReturnedPromise = onFunctionCall({
1080
+ messages: currentMessagesForHandler,
1081
+ name: message.name,
1082
+ args: message.arguments
1083
+ });
1084
+ if (isRenderAndWait) {
1085
+ const currentMessagesForRender = getFinalMessages();
1086
+ (0, import_react_dom.flushSync)(() => {
1087
+ setMessages([...currentMessagesForRender]);
1088
+ });
1089
+ }
1055
1090
  try {
1056
1091
  result = yield Promise.race([
1057
- onFunctionCall({
1058
- messages: previousMessages,
1059
- name: message.name,
1060
- args: message.arguments
1061
- }),
1092
+ handlerReturnedPromise,
1093
+ // Await the promise returned by the handler
1062
1094
  new Promise(
1063
1095
  (resolve) => {
1064
1096
  var _a;
@@ -1106,7 +1138,7 @@ function getPairedFeAction(actions, message) {
1106
1138
 
1107
1139
  // src/components/copilot-provider/copilotkit.tsx
1108
1140
  var import_react7 = require("react");
1109
- var import_react_dom = require("react-dom");
1141
+ var import_react_dom2 = require("react-dom");
1110
1142
  var import_shared5 = require("@copilotkit/shared");
1111
1143
  var import_jsx_runtime4 = require("react/jsx-runtime");
1112
1144
  var defaultCopilotContextCategories = ["global"];