@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
@@ -170,7 +170,7 @@ function returnAndThrowInDebug(_value) {
170
170
 
171
171
  // src/hooks/use-copilot-chat.ts
172
172
  var import_react8 = require("react");
173
- var import_runtime_client_gql5 = require("@copilotkit/runtime-client-gql");
173
+ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
174
174
 
175
175
  // src/hooks/use-chat.ts
176
176
  var import_react5 = require("react");
@@ -182,7 +182,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
182
182
  var import_shared = require("@copilotkit/shared");
183
183
  function processActionsForRuntimeRequest(actions) {
184
184
  const filteredActions = actions.filter(
185
- (action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
185
+ (action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*" && action.available != "frontend" && !action.pairedAction
186
186
  ).map((action) => {
187
187
  let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
188
188
  if (action.disabled) {
@@ -359,8 +359,6 @@ var useCopilotRuntimeClient = (options) => {
359
359
  };
360
360
 
361
361
  // src/hooks/use-chat.ts
362
- var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
363
- var import_shared3 = require("@copilotkit/shared");
364
362
  function useChat(options) {
365
363
  const {
366
364
  messages,
@@ -409,7 +407,7 @@ function useChat(options) {
409
407
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
410
408
  setIsLoading(true);
411
409
  const interruptEvent = langGraphInterruptAction == null ? void 0 : langGraphInterruptAction.event;
412
- 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) {
410
+ 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) {
413
411
  addErrorToast([
414
412
  new Error(
415
413
  "A message was sent while interrupt is active. This will cause failure on the agent side"
@@ -503,16 +501,16 @@ function useChat(options) {
503
501
  setExtensions(extensionsRef.current);
504
502
  let rawMessagesResponse = value.generateCopilotResponse.messages;
505
503
  ((_i = (_h = value.generateCopilotResponse) == null ? void 0 : _h.metaEvents) != null ? _i : []).forEach((ev) => {
506
- if (ev.name === import_runtime_client_gql4.MetaEventName.LangGraphInterruptEvent) {
504
+ if (ev.name === import_runtime_client_gql3.MetaEventName.LangGraphInterruptEvent) {
507
505
  let eventValue = (0, import_runtime_client_gql3.langGraphInterruptEvent)(ev).value;
508
- eventValue = (0, import_shared3.parseJson)(eventValue, eventValue);
506
+ eventValue = (0, import_shared2.parseJson)(eventValue, eventValue);
509
507
  setLangGraphInterruptAction({
510
508
  event: __spreadProps(__spreadValues({}, (0, import_runtime_client_gql3.langGraphInterruptEvent)(ev)), {
511
509
  value: eventValue
512
510
  })
513
511
  });
514
512
  }
515
- if (ev.name === import_runtime_client_gql4.MetaEventName.CopilotKitLangGraphInterruptEvent) {
513
+ if (ev.name === import_runtime_client_gql3.MetaEventName.CopilotKitLangGraphInterruptEvent) {
516
514
  const data = ev.data;
517
515
  rawMessagesResponse = [...rawMessagesResponse, ...data.messages];
518
516
  interruptMessages = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
@@ -593,7 +591,7 @@ function useChat(options) {
593
591
  setMessages([...previousMessages, ...newMessages]);
594
592
  }
595
593
  }
596
- const finalMessages = constructFinalMessages(
594
+ let finalMessages = constructFinalMessages(
597
595
  [...syncedMessages, ...interruptMessages],
598
596
  previousMessages,
599
597
  newMessages
@@ -603,7 +601,7 @@ function useChat(options) {
603
601
  const lastMessages = [];
604
602
  for (let i = finalMessages.length - 1; i >= 0; i--) {
605
603
  const message = finalMessages[i];
606
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
604
+ if ((message.isActionExecutionMessage() || message.isResultMessage()) && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
607
605
  lastMessages.unshift(message);
608
606
  } else {
609
607
  break;
@@ -611,59 +609,51 @@ function useChat(options) {
611
609
  }
612
610
  for (const message of lastMessages) {
613
611
  setMessages(finalMessages);
614
- const action = actions.find((action2) => action2.name === message.name);
615
- if (action) {
616
- followUp = action.followUp;
617
- let result;
618
- let error = null;
619
- try {
620
- result = yield Promise.race([
621
- onFunctionCall({
622
- messages: previousMessages,
623
- name: message.name,
624
- args: message.arguments
625
- }),
626
- new Promise(
627
- (resolve) => {
628
- var _a2;
629
- return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
630
- "abort",
631
- () => resolve("Operation was aborted by the user")
632
- );
633
- }
634
- ),
635
- // if the user stopped generation, we also abort consecutive actions
636
- new Promise((resolve) => {
637
- var _a2;
638
- if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
639
- resolve("Operation was aborted by the user");
640
- }
641
- })
642
- ]);
643
- } catch (e) {
644
- error = e;
645
- addErrorToast([error]);
646
- result = `Failed to execute action ${message.name}. ${error.message}`;
647
- console.error(`Failed to execute action ${message.name}: ${error}`);
648
- }
612
+ const action = actions.find(
613
+ (action2) => action2.name === message.name
614
+ );
615
+ const currentResultMessagePairedFeAction = message.isResultMessage() ? getPairedFeAction(actions, message) : null;
616
+ const executeActionFromMessage = (action2, message2) => __async(this, null, function* () {
617
+ followUp = action2 == null ? void 0 : action2.followUp;
618
+ const resultMessage = yield executeAction({
619
+ onFunctionCall,
620
+ previousMessages,
621
+ message: message2,
622
+ chatAbortControllerRef,
623
+ onError: (error) => {
624
+ addErrorToast([error]);
625
+ console.error(`Failed to execute action ${message2.name}: ${error}`);
626
+ }
627
+ });
649
628
  didExecuteAction = true;
650
- const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
651
- finalMessages.splice(
652
- messageIndex + 1,
653
- 0,
654
- new import_runtime_client_gql3.ResultMessage({
655
- id: "result-" + message.id,
656
- result: import_runtime_client_gql3.ResultMessage.encodeResult(
657
- error ? {
658
- content: result,
659
- error: JSON.parse(
660
- JSON.stringify(error, Object.getOwnPropertyNames(error))
661
- )
662
- } : result
663
- ),
664
- actionExecutionId: message.id,
665
- actionName: message.name
666
- })
629
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === message2.id);
630
+ finalMessages.splice(messageIndex + 1, 0, resultMessage);
631
+ return resultMessage;
632
+ });
633
+ if (action && message.isActionExecutionMessage()) {
634
+ const resultMessage = yield executeActionFromMessage(action, message);
635
+ const pairedFeAction = getPairedFeAction(actions, resultMessage);
636
+ if (pairedFeAction) {
637
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
638
+ name: pairedFeAction.name,
639
+ arguments: (0, import_shared2.parseJson)(resultMessage.result, resultMessage.result),
640
+ status: message.status,
641
+ createdAt: message.createdAt,
642
+ parentMessageId: message.parentMessageId
643
+ });
644
+ yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
645
+ }
646
+ } else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
647
+ const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
648
+ name: currentResultMessagePairedFeAction.name,
649
+ arguments: (0, import_shared2.parseJson)(message.result, message.result),
650
+ status: message.status,
651
+ createdAt: message.createdAt
652
+ });
653
+ finalMessages.push(newExecutionMessage);
654
+ yield executeActionFromMessage(
655
+ currentResultMessagePairedFeAction,
656
+ newExecutionMessage
667
657
  );
668
658
  }
669
659
  }
@@ -734,7 +724,7 @@ function useChat(options) {
734
724
  if (!event)
735
725
  return acc;
736
726
  switch (event.name) {
737
- case import_runtime_client_gql4.MetaEventName.LangGraphInterruptEvent:
727
+ case import_runtime_client_gql3.MetaEventName.LangGraphInterruptEvent:
738
728
  if (event.response) {
739
729
  setLangGraphInterruptAction(null);
740
730
  const value = event.value;
@@ -810,11 +800,72 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
810
800
  }
811
801
  return finalMessages;
812
802
  }
803
+ function executeAction(_0) {
804
+ return __async(this, arguments, function* ({
805
+ onFunctionCall,
806
+ previousMessages,
807
+ message,
808
+ chatAbortControllerRef,
809
+ onError
810
+ }) {
811
+ let result;
812
+ let error = null;
813
+ try {
814
+ result = yield Promise.race([
815
+ onFunctionCall({
816
+ messages: previousMessages,
817
+ name: message.name,
818
+ args: message.arguments
819
+ }),
820
+ new Promise(
821
+ (resolve) => {
822
+ var _a;
823
+ return (_a = chatAbortControllerRef.current) == null ? void 0 : _a.signal.addEventListener(
824
+ "abort",
825
+ () => resolve("Operation was aborted by the user")
826
+ );
827
+ }
828
+ ),
829
+ // if the user stopped generation, we also abort consecutive actions
830
+ new Promise((resolve) => {
831
+ var _a;
832
+ if ((_a = chatAbortControllerRef.current) == null ? void 0 : _a.signal.aborted) {
833
+ resolve("Operation was aborted by the user");
834
+ }
835
+ })
836
+ ]);
837
+ } catch (e) {
838
+ onError(e);
839
+ }
840
+ return new import_runtime_client_gql3.ResultMessage({
841
+ id: "result-" + message.id,
842
+ result: import_runtime_client_gql3.ResultMessage.encodeResult(
843
+ error ? {
844
+ content: result,
845
+ error: JSON.parse(JSON.stringify(error, Object.getOwnPropertyNames(error)))
846
+ } : result
847
+ ),
848
+ actionExecutionId: message.id,
849
+ actionName: message.name
850
+ });
851
+ });
852
+ }
853
+ function getPairedFeAction(actions, message) {
854
+ let actionName = null;
855
+ if (message.isActionExecutionMessage()) {
856
+ actionName = message.name;
857
+ } else if (message.isResultMessage()) {
858
+ actionName = message.actionName;
859
+ }
860
+ return actions.find(
861
+ (action) => action.name === actionName && action.available === "frontend" || action.pairedAction === actionName
862
+ );
863
+ }
813
864
 
814
865
  // src/components/copilot-provider/copilotkit.tsx
815
866
  var import_react7 = require("react");
816
867
  var import_react_dom = require("react-dom");
817
- var import_shared4 = require("@copilotkit/shared");
868
+ var import_shared3 = require("@copilotkit/shared");
818
869
 
819
870
  // src/context/copilot-messages-context.tsx
820
871
  var import_react6 = __toESM(require("react"));
@@ -880,9 +931,9 @@ function useCopilotChat(_a = {}) {
880
931
  const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
881
932
  const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
882
933
  const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
883
- return new import_runtime_client_gql5.TextMessage({
934
+ return new import_runtime_client_gql4.TextMessage({
884
935
  content: systemMessageMaker(contextString, chatInstructions),
885
- role: import_runtime_client_gql5.Role.System
936
+ role: import_runtime_client_gql4.Role.System
886
937
  });
887
938
  }, [getContextString, makeSystemMessage, chatInstructions]);
888
939
  const onCoAgentStateRender = useAsyncCallback(
@@ -1034,13 +1085,13 @@ ${additionalInstructions}` : "");
1034
1085
  }
1035
1086
 
1036
1087
  // src/hooks/use-langgraph-interrupt.ts
1037
- var import_shared5 = require("@copilotkit/shared");
1088
+ var import_shared4 = require("@copilotkit/shared");
1038
1089
  function useLangGraphInterrupt(action, dependencies) {
1039
1090
  var _a;
1040
1091
  const { setLangGraphInterruptAction, removeLangGraphInterruptAction, langGraphInterruptAction } = (0, import_react9.useContext)(CopilotContext);
1041
1092
  const { runChatCompletion } = useCopilotChat();
1042
1093
  const { addToast } = useToast();
1043
- const actionId = (0, import_shared5.dataToUUID)(JSON.stringify(action), "lgAction");
1094
+ const actionId = (0, import_shared4.dataToUUID)(JSON.stringify(action), "lgAction");
1044
1095
  const hasAction = (0, import_react9.useMemo)(
1045
1096
  () => Boolean(langGraphInterruptAction == null ? void 0 : langGraphInterruptAction.id),
1046
1097
  [langGraphInterruptAction]