@copilotkit/react-core 1.6.0-next.10 → 1.6.0-next.11

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 (45) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{chunk-XERJQUHA.mjs → chunk-4CEQJ2X6.mjs} +2 -2
  3. package/dist/{chunk-XERJQUHA.mjs.map → chunk-4CEQJ2X6.mjs.map} +1 -1
  4. package/dist/{chunk-ADTDNMYG.mjs → chunk-4EC4JK7H.mjs} +2 -2
  5. package/dist/{chunk-ALW2T2LL.mjs → chunk-FUO5LKSJ.mjs} +114 -60
  6. package/dist/chunk-FUO5LKSJ.mjs.map +1 -0
  7. package/dist/{chunk-MPFP6ANM.mjs → chunk-HBCP2KNA.mjs} +2 -2
  8. package/dist/{chunk-QJPWWVJQ.mjs → chunk-T4CAQC6B.mjs} +2 -2
  9. package/dist/{chunk-JFCNSGNU.mjs → chunk-Y2T56VSE.mjs} +2 -2
  10. package/dist/hooks/index.js +128 -77
  11. package/dist/hooks/index.js.map +1 -1
  12. package/dist/hooks/index.mjs +5 -5
  13. package/dist/hooks/use-chat.js +113 -62
  14. package/dist/hooks/use-chat.js.map +1 -1
  15. package/dist/hooks/use-chat.mjs +2 -2
  16. package/dist/hooks/use-coagent.js +119 -68
  17. package/dist/hooks/use-coagent.js.map +1 -1
  18. package/dist/hooks/use-coagent.mjs +4 -4
  19. package/dist/hooks/use-copilot-chat.js +117 -66
  20. package/dist/hooks/use-copilot-chat.js.map +1 -1
  21. package/dist/hooks/use-copilot-chat.mjs +3 -3
  22. package/dist/hooks/use-langgraph-interrupt.js +119 -68
  23. package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
  24. package/dist/hooks/use-langgraph-interrupt.mjs +4 -4
  25. package/dist/index.js +134 -83
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +6 -6
  28. package/dist/lib/copilot-task.js +1 -1
  29. package/dist/lib/copilot-task.js.map +1 -1
  30. package/dist/lib/copilot-task.mjs +2 -2
  31. package/dist/lib/index.js +1 -1
  32. package/dist/lib/index.js.map +1 -1
  33. package/dist/lib/index.mjs +2 -2
  34. package/dist/types/frontend-action.d.ts +2 -1
  35. package/dist/types/frontend-action.js +1 -1
  36. package/dist/types/frontend-action.js.map +1 -1
  37. package/dist/types/frontend-action.mjs +1 -1
  38. package/package.json +3 -3
  39. package/src/hooks/use-chat.ts +133 -58
  40. package/src/types/frontend-action.ts +5 -2
  41. package/dist/chunk-ALW2T2LL.mjs.map +0 -1
  42. /package/dist/{chunk-ADTDNMYG.mjs.map → chunk-4EC4JK7H.mjs.map} +0 -0
  43. /package/dist/{chunk-MPFP6ANM.mjs.map → chunk-HBCP2KNA.mjs.map} +0 -0
  44. /package/dist/{chunk-QJPWWVJQ.mjs.map → chunk-T4CAQC6B.mjs.map} +0 -0
  45. /package/dist/{chunk-JFCNSGNU.mjs.map → chunk-Y2T56VSE.mjs.map} +0 -0
@@ -190,7 +190,7 @@ function useCopilotMessagesContext() {
190
190
 
191
191
  // src/hooks/use-copilot-chat.ts
192
192
  var import_react8 = require("react");
193
- var import_runtime_client_gql5 = require("@copilotkit/runtime-client-gql");
193
+ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
194
194
 
195
195
  // src/hooks/use-chat.ts
196
196
  var import_react6 = require("react");
@@ -202,7 +202,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
202
202
  var import_shared = require("@copilotkit/shared");
203
203
  function processActionsForRuntimeRequest(actions) {
204
204
  const filteredActions = actions.filter(
205
- (action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
205
+ (action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*" && action.available != "frontend" && !action.pairedAction
206
206
  ).map((action) => {
207
207
  let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
208
208
  if (action.disabled) {
@@ -379,8 +379,6 @@ var useCopilotRuntimeClient = (options) => {
379
379
  };
380
380
 
381
381
  // src/hooks/use-chat.ts
382
- var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
383
- var import_shared3 = require("@copilotkit/shared");
384
382
  function useChat(options) {
385
383
  const {
386
384
  messages,
@@ -429,7 +427,7 @@ function useChat(options) {
429
427
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
430
428
  setIsLoading(true);
431
429
  const interruptEvent = langGraphInterruptAction == null ? void 0 : langGraphInterruptAction.event;
432
- if ((interruptEvent == null ? void 0 : interruptEvent.name) === import_runtime_client_gql4.MetaEventName.LangGraphInterruptEvent && (interruptEvent == null ? void 0 : interruptEvent.value) && !(interruptEvent == null ? void 0 : interruptEvent.response) && agentSessionRef.current) {
430
+ if ((interruptEvent == null ? void 0 : interruptEvent.name) === import_runtime_client_gql3.MetaEventName.LangGraphInterruptEvent && (interruptEvent == null ? void 0 : interruptEvent.value) && !(interruptEvent == null ? void 0 : interruptEvent.response) && agentSessionRef.current) {
433
431
  addErrorToast([
434
432
  new Error(
435
433
  "A message was sent while interrupt is active. This will cause failure on the agent side"
@@ -523,16 +521,16 @@ function useChat(options) {
523
521
  setExtensions(extensionsRef.current);
524
522
  let rawMessagesResponse = value.generateCopilotResponse.messages;
525
523
  ((_i = (_h = value.generateCopilotResponse) == null ? void 0 : _h.metaEvents) != null ? _i : []).forEach((ev) => {
526
- if (ev.name === import_runtime_client_gql4.MetaEventName.LangGraphInterruptEvent) {
524
+ if (ev.name === import_runtime_client_gql3.MetaEventName.LangGraphInterruptEvent) {
527
525
  let eventValue = (0, import_runtime_client_gql3.langGraphInterruptEvent)(ev).value;
528
- eventValue = (0, import_shared3.parseJson)(eventValue, eventValue);
526
+ eventValue = (0, import_shared2.parseJson)(eventValue, eventValue);
529
527
  setLangGraphInterruptAction({
530
528
  event: __spreadProps(__spreadValues({}, (0, import_runtime_client_gql3.langGraphInterruptEvent)(ev)), {
531
529
  value: eventValue
532
530
  })
533
531
  });
534
532
  }
535
- if (ev.name === import_runtime_client_gql4.MetaEventName.CopilotKitLangGraphInterruptEvent) {
533
+ if (ev.name === import_runtime_client_gql3.MetaEventName.CopilotKitLangGraphInterruptEvent) {
536
534
  const data = ev.data;
537
535
  rawMessagesResponse = [...rawMessagesResponse, ...data.messages];
538
536
  interruptMessages = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
@@ -613,7 +611,7 @@ function useChat(options) {
613
611
  setMessages([...previousMessages, ...newMessages]);
614
612
  }
615
613
  }
616
- const finalMessages = constructFinalMessages(
614
+ let finalMessages = constructFinalMessages(
617
615
  [...syncedMessages, ...interruptMessages],
618
616
  previousMessages,
619
617
  newMessages
@@ -623,7 +621,7 @@ function useChat(options) {
623
621
  const lastMessages = [];
624
622
  for (let i = finalMessages.length - 1; i >= 0; i--) {
625
623
  const message = finalMessages[i];
626
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
624
+ if ((message.isActionExecutionMessage() || message.isResultMessage()) && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
627
625
  lastMessages.unshift(message);
628
626
  } else {
629
627
  break;
@@ -631,59 +629,51 @@ function useChat(options) {
631
629
  }
632
630
  for (const message of lastMessages) {
633
631
  setMessages(finalMessages);
634
- const action = actions.find((action2) => action2.name === message.name);
635
- if (action) {
636
- followUp = action.followUp;
637
- let result;
638
- let error = null;
639
- try {
640
- result = yield Promise.race([
641
- onFunctionCall({
642
- messages: previousMessages,
643
- name: message.name,
644
- args: message.arguments
645
- }),
646
- new Promise(
647
- (resolve) => {
648
- var _a2;
649
- return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
650
- "abort",
651
- () => resolve("Operation was aborted by the user")
652
- );
653
- }
654
- ),
655
- // if the user stopped generation, we also abort consecutive actions
656
- new Promise((resolve) => {
657
- var _a2;
658
- if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
659
- resolve("Operation was aborted by the user");
660
- }
661
- })
662
- ]);
663
- } catch (e) {
664
- error = e;
665
- addErrorToast([error]);
666
- result = `Failed to execute action ${message.name}. ${error.message}`;
667
- console.error(`Failed to execute action ${message.name}: ${error}`);
668
- }
632
+ const action = actions.find(
633
+ (action2) => action2.name === message.name
634
+ );
635
+ const currentResultMessagePairedFeAction = message.isResultMessage() ? getPairedFeAction(actions, message) : null;
636
+ const executeActionFromMessage = (action2, message2) => __async(this, null, function* () {
637
+ followUp = action2 == null ? void 0 : action2.followUp;
638
+ const resultMessage = yield executeAction({
639
+ onFunctionCall,
640
+ previousMessages,
641
+ message: message2,
642
+ chatAbortControllerRef,
643
+ onError: (error) => {
644
+ addErrorToast([error]);
645
+ console.error(`Failed to execute action ${message2.name}: ${error}`);
646
+ }
647
+ });
669
648
  didExecuteAction = true;
670
- const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
671
- finalMessages.splice(
672
- messageIndex + 1,
673
- 0,
674
- new import_runtime_client_gql3.ResultMessage({
675
- id: "result-" + message.id,
676
- result: import_runtime_client_gql3.ResultMessage.encodeResult(
677
- error ? {
678
- content: result,
679
- error: JSON.parse(
680
- JSON.stringify(error, Object.getOwnPropertyNames(error))
681
- )
682
- } : result
683
- ),
684
- actionExecutionId: message.id,
685
- actionName: message.name
686
- })
649
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === message2.id);
650
+ finalMessages.splice(messageIndex + 1, 0, resultMessage);
651
+ return resultMessage;
652
+ });
653
+ if (action && message.isActionExecutionMessage()) {
654
+ const resultMessage = yield executeActionFromMessage(action, message);
655
+ const pairedFeAction = getPairedFeAction(actions, resultMessage);
656
+ if (pairedFeAction) {
657
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
658
+ name: pairedFeAction.name,
659
+ arguments: (0, import_shared2.parseJson)(resultMessage.result, resultMessage.result),
660
+ status: message.status,
661
+ createdAt: message.createdAt,
662
+ parentMessageId: message.parentMessageId
663
+ });
664
+ yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
665
+ }
666
+ } else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
667
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
668
+ name: currentResultMessagePairedFeAction.name,
669
+ arguments: (0, import_shared2.parseJson)(message.result, message.result),
670
+ status: message.status,
671
+ createdAt: message.createdAt
672
+ });
673
+ finalMessages.push(newExecutionMessage);
674
+ yield executeActionFromMessage(
675
+ currentResultMessagePairedFeAction,
676
+ newExecutionMessage
687
677
  );
688
678
  }
689
679
  }
@@ -754,7 +744,7 @@ function useChat(options) {
754
744
  if (!event)
755
745
  return acc;
756
746
  switch (event.name) {
757
- case import_runtime_client_gql4.MetaEventName.LangGraphInterruptEvent:
747
+ case import_runtime_client_gql3.MetaEventName.LangGraphInterruptEvent:
758
748
  if (event.response) {
759
749
  setLangGraphInterruptAction(null);
760
750
  const value = event.value;
@@ -830,11 +820,72 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
830
820
  }
831
821
  return finalMessages;
832
822
  }
823
+ function executeAction(_0) {
824
+ return __async(this, arguments, function* ({
825
+ onFunctionCall,
826
+ previousMessages,
827
+ message,
828
+ chatAbortControllerRef,
829
+ onError
830
+ }) {
831
+ let result;
832
+ let error = null;
833
+ try {
834
+ result = yield Promise.race([
835
+ onFunctionCall({
836
+ messages: previousMessages,
837
+ name: message.name,
838
+ args: message.arguments
839
+ }),
840
+ new Promise(
841
+ (resolve) => {
842
+ var _a;
843
+ return (_a = chatAbortControllerRef.current) == null ? void 0 : _a.signal.addEventListener(
844
+ "abort",
845
+ () => resolve("Operation was aborted by the user")
846
+ );
847
+ }
848
+ ),
849
+ // if the user stopped generation, we also abort consecutive actions
850
+ new Promise((resolve) => {
851
+ var _a;
852
+ if ((_a = chatAbortControllerRef.current) == null ? void 0 : _a.signal.aborted) {
853
+ resolve("Operation was aborted by the user");
854
+ }
855
+ })
856
+ ]);
857
+ } catch (e) {
858
+ onError(e);
859
+ }
860
+ return new import_runtime_client_gql3.ResultMessage({
861
+ id: "result-" + message.id,
862
+ result: import_runtime_client_gql3.ResultMessage.encodeResult(
863
+ error ? {
864
+ content: result,
865
+ error: JSON.parse(JSON.stringify(error, Object.getOwnPropertyNames(error)))
866
+ } : result
867
+ ),
868
+ actionExecutionId: message.id,
869
+ actionName: message.name
870
+ });
871
+ });
872
+ }
873
+ function getPairedFeAction(actions, message) {
874
+ let actionName = null;
875
+ if (message.isActionExecutionMessage()) {
876
+ actionName = message.name;
877
+ } else if (message.isResultMessage()) {
878
+ actionName = message.actionName;
879
+ }
880
+ return actions.find(
881
+ (action) => action.name === actionName && action.available === "frontend" || action.pairedAction === actionName
882
+ );
883
+ }
833
884
 
834
885
  // src/components/copilot-provider/copilotkit.tsx
835
886
  var import_react7 = require("react");
836
887
  var import_react_dom = require("react-dom");
837
- var import_shared4 = require("@copilotkit/shared");
888
+ var import_shared3 = require("@copilotkit/shared");
838
889
  var import_jsx_runtime4 = require("react/jsx-runtime");
839
890
  var defaultCopilotContextCategories = ["global"];
840
891
 
@@ -881,9 +932,9 @@ function useCopilotChat(_a = {}) {
881
932
  const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
882
933
  const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
883
934
  const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
884
- return new import_runtime_client_gql5.TextMessage({
935
+ return new import_runtime_client_gql4.TextMessage({
885
936
  content: systemMessageMaker(contextString, chatInstructions),
886
- role: import_runtime_client_gql5.Role.System
937
+ role: import_runtime_client_gql4.Role.System
887
938
  });
888
939
  }, [getContextString, makeSystemMessage, chatInstructions]);
889
940
  const onCoAgentStateRender = useAsyncCallback(
@@ -1035,7 +1086,7 @@ ${additionalInstructions}` : "");
1035
1086
  }
1036
1087
 
1037
1088
  // src/hooks/use-coagent.ts
1038
- var import_shared5 = require("@copilotkit/shared");
1089
+ var import_shared4 = require("@copilotkit/shared");
1039
1090
  function useCoAgent(options) {
1040
1091
  const generalContext = useCopilotContext();
1041
1092
  const { availableAgents } = generalContext;
@@ -1086,7 +1137,7 @@ function useCoAgent(options) {
1086
1137
  if (((_d = (_c = result.data) == null ? void 0 : _c.loadAgentState) == null ? void 0 : _d.threadExists) && newState && newState != "{}") {
1087
1138
  lastLoadedState.current = newState;
1088
1139
  lastLoadedThreadId.current = threadId;
1089
- const fetchedState = (0, import_shared5.parseJson)(newState, {});
1140
+ const fetchedState = (0, import_shared4.parseJson)(newState, {});
1090
1141
  isExternalStateManagement(options) ? options.setState(fetchedState) : setState(fetchedState);
1091
1142
  }
1092
1143
  });