@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.
- package/CHANGELOG.md +18 -0
- package/dist/{chunk-XJ34ATKP.mjs → chunk-FN3UA2ZE.mjs} +2 -2
- package/dist/{chunk-7EJ4IWSA.mjs → chunk-K42OD3J6.mjs} +2 -2
- package/dist/{chunk-5DODGOMM.mjs → chunk-MTAJI7HV.mjs} +77 -45
- package/dist/chunk-MTAJI7HV.mjs.map +1 -0
- package/dist/{chunk-WR3XTNHJ.mjs → chunk-NJA5ZLAZ.mjs} +26 -7
- package/dist/chunk-NJA5ZLAZ.mjs.map +1 -0
- package/dist/{chunk-5PE2XROA.mjs → chunk-UGJGKBFB.mjs} +2 -2
- package/dist/{chunk-BHGYBOR3.mjs → chunk-ZOMEQ3XC.mjs} +2 -2
- package/dist/hooks/index.js +102 -51
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +6 -6
- package/dist/hooks/use-chat.js +170 -138
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +1 -1
- package/dist/hooks/use-coagent.js +77 -45
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +3 -3
- package/dist/hooks/use-copilot-action.js +25 -6
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +1 -1
- package/dist/hooks/use-copilot-authenticated-action.js +25 -6
- package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
- package/dist/hooks/use-copilot-authenticated-action.mjs +2 -2
- package/dist/hooks/use-copilot-chat.js +77 -45
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +2 -2
- package/dist/hooks/use-langgraph-interrupt.js +77 -45
- package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt.mjs +3 -3
- package/dist/index.js +101 -50
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -6
- package/package.json +3 -3
- package/src/hooks/use-chat.ts +110 -46
- package/src/hooks/use-copilot-action.ts +51 -9
- package/dist/chunk-5DODGOMM.mjs.map +0 -1
- package/dist/chunk-WR3XTNHJ.mjs.map +0 -1
- /package/dist/{chunk-XJ34ATKP.mjs.map → chunk-FN3UA2ZE.mjs.map} +0 -0
- /package/dist/{chunk-7EJ4IWSA.mjs.map → chunk-K42OD3J6.mjs.map} +0 -0
- /package/dist/{chunk-5PE2XROA.mjs.map → chunk-UGJGKBFB.mjs.map} +0 -0
- /package/dist/{chunk-BHGYBOR3.mjs.map → chunk-ZOMEQ3XC.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useLangGraphInterrupt
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-UGJGKBFB.mjs";
|
|
4
|
+
import "../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-
|
|
14
|
+
import "../chunk-MTAJI7HV.mjs";
|
|
15
15
|
import "../chunk-4CEQJ2X6.mjs";
|
|
16
16
|
import "../chunk-3OQM3NEK.mjs";
|
|
17
17
|
import "../chunk-O7ARI5CV.mjs";
|
package/dist/index.js
CHANGED
|
@@ -2137,6 +2137,7 @@ var import_runtime_client_gql7 = require("@copilotkit/runtime-client-gql");
|
|
|
2137
2137
|
|
|
2138
2138
|
// src/hooks/use-chat.ts
|
|
2139
2139
|
var import_react11 = require("react");
|
|
2140
|
+
var import_react_dom2 = require("react-dom");
|
|
2140
2141
|
var import_shared12 = require("@copilotkit/shared");
|
|
2141
2142
|
var import_runtime_client_gql6 = require("@copilotkit/runtime-client-gql");
|
|
2142
2143
|
|
|
@@ -2483,6 +2484,39 @@ function useChat(options) {
|
|
|
2483
2484
|
newMessages
|
|
2484
2485
|
);
|
|
2485
2486
|
let didExecuteAction = false;
|
|
2487
|
+
const executeActionFromMessage = (currentAction, actionMessage) => __async(this, null, function* () {
|
|
2488
|
+
var _a2;
|
|
2489
|
+
const isInterruptAction = interruptMessages.find((m) => m.id === actionMessage.id);
|
|
2490
|
+
followUp = (_a2 = currentAction == null ? void 0 : currentAction.followUp) != null ? _a2 : !isInterruptAction;
|
|
2491
|
+
if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
|
|
2492
|
+
currentAction._setActivatingMessageId(actionMessage.id);
|
|
2493
|
+
}
|
|
2494
|
+
const resultMessage = yield executeAction({
|
|
2495
|
+
onFunctionCall,
|
|
2496
|
+
message: actionMessage,
|
|
2497
|
+
chatAbortControllerRef,
|
|
2498
|
+
onError: (error) => {
|
|
2499
|
+
addErrorToast([error]);
|
|
2500
|
+
console.error(`Failed to execute action ${actionMessage.name}: ${error}`);
|
|
2501
|
+
},
|
|
2502
|
+
setMessages,
|
|
2503
|
+
getFinalMessages: () => finalMessages,
|
|
2504
|
+
isRenderAndWait: (currentAction == null ? void 0 : currentAction._isRenderAndWait) || false
|
|
2505
|
+
});
|
|
2506
|
+
didExecuteAction = true;
|
|
2507
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === actionMessage.id);
|
|
2508
|
+
finalMessages.splice(messageIndex + 1, 0, resultMessage);
|
|
2509
|
+
if (currentAction == null ? void 0 : currentAction._isRenderAndWait) {
|
|
2510
|
+
const messagesForImmediateUpdate = [...finalMessages];
|
|
2511
|
+
(0, import_react_dom2.flushSync)(() => {
|
|
2512
|
+
setMessages(messagesForImmediateUpdate);
|
|
2513
|
+
});
|
|
2514
|
+
}
|
|
2515
|
+
if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
|
|
2516
|
+
currentAction._setActivatingMessageId(null);
|
|
2517
|
+
}
|
|
2518
|
+
return resultMessage;
|
|
2519
|
+
});
|
|
2486
2520
|
if (onFunctionCall) {
|
|
2487
2521
|
const lastMessages = [];
|
|
2488
2522
|
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
@@ -2499,37 +2533,28 @@ function useChat(options) {
|
|
|
2499
2533
|
(action2) => action2.name === message.name
|
|
2500
2534
|
);
|
|
2501
2535
|
const currentResultMessagePairedFeAction = message.isResultMessage() ? getPairedFeAction(actions, message) : null;
|
|
2502
|
-
const executeActionFromMessage = (action2, message2) => __async(this, null, function* () {
|
|
2503
|
-
var _a2;
|
|
2504
|
-
const isInterruptAction = interruptMessages.find((m) => m.id === message2.id);
|
|
2505
|
-
followUp = (_a2 = action2 == null ? void 0 : action2.followUp) != null ? _a2 : !isInterruptAction;
|
|
2506
|
-
const resultMessage = yield executeAction({
|
|
2507
|
-
onFunctionCall,
|
|
2508
|
-
previousMessages,
|
|
2509
|
-
message: message2,
|
|
2510
|
-
chatAbortControllerRef,
|
|
2511
|
-
onError: (error) => {
|
|
2512
|
-
addErrorToast([error]);
|
|
2513
|
-
console.error(`Failed to execute action ${message2.name}: ${error}`);
|
|
2514
|
-
}
|
|
2515
|
-
});
|
|
2516
|
-
didExecuteAction = true;
|
|
2517
|
-
const messageIndex = finalMessages.findIndex((msg) => msg.id === message2.id);
|
|
2518
|
-
finalMessages.splice(messageIndex + 1, 0, resultMessage);
|
|
2519
|
-
return resultMessage;
|
|
2520
|
-
});
|
|
2521
2536
|
if (action && message.isActionExecutionMessage()) {
|
|
2522
|
-
const
|
|
2523
|
-
const
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2537
|
+
const isRenderAndWaitAction = (action == null ? void 0 : action._isRenderAndWait) || false;
|
|
2538
|
+
const alreadyProcessed = isRenderAndWaitAction && finalMessages.some(
|
|
2539
|
+
(fm) => fm.isResultMessage() && fm.actionExecutionId === message.id
|
|
2540
|
+
);
|
|
2541
|
+
if (alreadyProcessed) {
|
|
2542
|
+
} else {
|
|
2543
|
+
const resultMessage = yield executeActionFromMessage(
|
|
2544
|
+
action,
|
|
2545
|
+
message
|
|
2546
|
+
);
|
|
2547
|
+
const pairedFeAction = getPairedFeAction(actions, resultMessage);
|
|
2548
|
+
if (pairedFeAction) {
|
|
2549
|
+
const newExecutionMessage = new import_runtime_client_gql6.ActionExecutionMessage({
|
|
2550
|
+
name: pairedFeAction.name,
|
|
2551
|
+
arguments: (0, import_shared12.parseJson)(resultMessage.result, resultMessage.result),
|
|
2552
|
+
status: message.status,
|
|
2553
|
+
createdAt: message.createdAt,
|
|
2554
|
+
parentMessageId: message.parentMessageId
|
|
2555
|
+
});
|
|
2556
|
+
yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
|
|
2557
|
+
}
|
|
2533
2558
|
}
|
|
2534
2559
|
} else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
|
|
2535
2560
|
const newExecutionMessage = new import_runtime_client_gql6.ActionExecutionMessage({
|
|
@@ -2547,13 +2572,9 @@ function useChat(options) {
|
|
|
2547
2572
|
}
|
|
2548
2573
|
setMessages(finalMessages);
|
|
2549
2574
|
}
|
|
2550
|
-
if (
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
(didExecuteAction || // the last message is a server side result
|
|
2554
|
-
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
2555
|
-
!((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)
|
|
2556
|
-
) {
|
|
2575
|
+
if (followUp !== false && (didExecuteAction || // the last message is a server side result
|
|
2576
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
2577
|
+
!((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)) {
|
|
2557
2578
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
2558
2579
|
return yield runChatCompletionRef.current(finalMessages);
|
|
2559
2580
|
} else if ((_s = chatAbortControllerRef.current) == null ? void 0 : _s.signal.aborted) {
|
|
@@ -2724,20 +2745,31 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
|
2724
2745
|
function executeAction(_0) {
|
|
2725
2746
|
return __async(this, arguments, function* ({
|
|
2726
2747
|
onFunctionCall,
|
|
2727
|
-
previousMessages,
|
|
2728
2748
|
message,
|
|
2729
2749
|
chatAbortControllerRef,
|
|
2730
|
-
onError
|
|
2750
|
+
onError,
|
|
2751
|
+
setMessages,
|
|
2752
|
+
getFinalMessages,
|
|
2753
|
+
isRenderAndWait
|
|
2731
2754
|
}) {
|
|
2732
2755
|
let result;
|
|
2733
2756
|
let error = null;
|
|
2757
|
+
const currentMessagesForHandler = getFinalMessages();
|
|
2758
|
+
const handlerReturnedPromise = onFunctionCall({
|
|
2759
|
+
messages: currentMessagesForHandler,
|
|
2760
|
+
name: message.name,
|
|
2761
|
+
args: message.arguments
|
|
2762
|
+
});
|
|
2763
|
+
if (isRenderAndWait) {
|
|
2764
|
+
const currentMessagesForRender = getFinalMessages();
|
|
2765
|
+
(0, import_react_dom2.flushSync)(() => {
|
|
2766
|
+
setMessages([...currentMessagesForRender]);
|
|
2767
|
+
});
|
|
2768
|
+
}
|
|
2734
2769
|
try {
|
|
2735
2770
|
result = yield Promise.race([
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
name: message.name,
|
|
2739
|
-
args: message.arguments
|
|
2740
|
-
}),
|
|
2771
|
+
handlerReturnedPromise,
|
|
2772
|
+
// Await the promise returned by the handler
|
|
2741
2773
|
new Promise(
|
|
2742
2774
|
(resolve) => {
|
|
2743
2775
|
var _a;
|
|
@@ -3004,6 +3036,7 @@ function useCopilotAction(action, dependencies) {
|
|
|
3004
3036
|
const { setAction, removeAction, actions, chatComponentsCache } = useCopilotContext();
|
|
3005
3037
|
const idRef = (0, import_react13.useRef)((0, import_shared13.randomId)());
|
|
3006
3038
|
const renderAndWaitRef = (0, import_react13.useRef)(null);
|
|
3039
|
+
const activatingMessageIdRef = (0, import_react13.useRef)(null);
|
|
3007
3040
|
const { addToast } = useToast();
|
|
3008
3041
|
action = __spreadValues({}, action);
|
|
3009
3042
|
if (
|
|
@@ -3011,30 +3044,48 @@ function useCopilotAction(action, dependencies) {
|
|
|
3011
3044
|
isFrontendAction(action) && // check if renderAndWaitForResponse is set
|
|
3012
3045
|
(action.renderAndWait || action.renderAndWaitForResponse)
|
|
3013
3046
|
) {
|
|
3047
|
+
action._isRenderAndWait = true;
|
|
3014
3048
|
const renderAndWait = action.renderAndWait || action.renderAndWaitForResponse;
|
|
3015
3049
|
action.renderAndWait = void 0;
|
|
3016
3050
|
action.renderAndWaitForResponse = void 0;
|
|
3051
|
+
action._setActivatingMessageId = (id) => {
|
|
3052
|
+
activatingMessageIdRef.current = id;
|
|
3053
|
+
};
|
|
3017
3054
|
action.handler = useAsyncCallback(() => __async(this, null, function* () {
|
|
3055
|
+
const currentActivatingId = activatingMessageIdRef.current;
|
|
3018
3056
|
let resolve;
|
|
3019
3057
|
let reject;
|
|
3020
3058
|
const promise = new Promise((resolvePromise, rejectPromise) => {
|
|
3021
3059
|
resolve = resolvePromise;
|
|
3022
3060
|
reject = rejectPromise;
|
|
3023
3061
|
});
|
|
3024
|
-
renderAndWaitRef.current = {
|
|
3025
|
-
|
|
3062
|
+
renderAndWaitRef.current = {
|
|
3063
|
+
promise,
|
|
3064
|
+
resolve,
|
|
3065
|
+
reject,
|
|
3066
|
+
messageId: currentActivatingId
|
|
3067
|
+
};
|
|
3068
|
+
const result = yield promise;
|
|
3069
|
+
return result;
|
|
3026
3070
|
}), []);
|
|
3027
3071
|
action.render = (props) => {
|
|
3072
|
+
const currentRenderMessageId = props.messageId;
|
|
3028
3073
|
let status = props.status;
|
|
3029
|
-
if (props.status === "executing"
|
|
3030
|
-
|
|
3074
|
+
if (props.status === "executing") {
|
|
3075
|
+
if (!renderAndWaitRef.current || !renderAndWaitRef.current.promise) {
|
|
3076
|
+
status = "inProgress";
|
|
3077
|
+
} else if (renderAndWaitRef.current.messageId !== currentRenderMessageId && activatingMessageIdRef.current !== currentRenderMessageId) {
|
|
3078
|
+
status = "inProgress";
|
|
3079
|
+
}
|
|
3031
3080
|
}
|
|
3032
3081
|
const waitProps = {
|
|
3033
3082
|
status,
|
|
3034
3083
|
args: props.args,
|
|
3035
3084
|
result: props.result,
|
|
3036
|
-
handler
|
|
3037
|
-
|
|
3085
|
+
// handler and respond should only be provided if this is the truly active instance
|
|
3086
|
+
// and its promise infrastructure is ready.
|
|
3087
|
+
handler: status === "executing" && renderAndWaitRef.current && renderAndWaitRef.current.messageId === currentRenderMessageId ? renderAndWaitRef.current.resolve : void 0,
|
|
3088
|
+
respond: status === "executing" && renderAndWaitRef.current && renderAndWaitRef.current.messageId === currentRenderMessageId ? renderAndWaitRef.current.resolve : void 0
|
|
3038
3089
|
};
|
|
3039
3090
|
const isNoArgsRenderWait = (_fn) => {
|
|
3040
3091
|
var _a;
|