@copilotkit/react-core 1.1.2 → 1.1.3-feat-runtime-remote-actions.0
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 +15 -0
- package/README.md +32 -37
- package/dist/{chunk-T6L4EGTD.mjs → chunk-326LK7LX.mjs} +5 -5
- package/dist/chunk-326LK7LX.mjs.map +1 -0
- package/dist/{chunk-VFDR4MIF.mjs → chunk-A37GANOW.mjs} +11 -7
- package/dist/chunk-A37GANOW.mjs.map +1 -0
- package/dist/chunk-BWYAGPEF.mjs +1 -0
- package/dist/{chunk-GE7LAL6V.mjs → chunk-CKOTAKUD.mjs} +4 -3
- package/dist/{chunk-GE7LAL6V.mjs.map → chunk-CKOTAKUD.mjs.map} +1 -1
- package/dist/{chunk-KONDJRB4.mjs → chunk-CODXG6KU.mjs} +5 -5
- package/dist/chunk-CODXG6KU.mjs.map +1 -0
- package/dist/{chunk-3NHEWJ4V.mjs → chunk-J2YXDQHR.mjs} +19 -4
- package/dist/chunk-J2YXDQHR.mjs.map +1 -0
- package/dist/{chunk-UQRDVZ2N.mjs → chunk-OBBH5SHN.mjs} +4 -3
- package/dist/{chunk-UQRDVZ2N.mjs.map → chunk-OBBH5SHN.mjs.map} +1 -1
- package/dist/chunk-Q4TTTAXQ.mjs +87 -0
- package/dist/chunk-Q4TTTAXQ.mjs.map +1 -0
- package/dist/{chunk-TVR5CJ6E.mjs → chunk-RBNULK3U.mjs} +39 -5
- package/dist/chunk-RBNULK3U.mjs.map +1 -0
- package/dist/{chunk-AGGKI26A.mjs → chunk-RK27MXAR.mjs} +76 -11
- package/dist/chunk-RK27MXAR.mjs.map +1 -0
- package/dist/chunk-STUXJ3BN.mjs +44 -0
- package/dist/chunk-STUXJ3BN.mjs.map +1 -0
- package/dist/{chunk-YYZNR3CS.mjs → chunk-XBJINVNA.mjs} +72 -14
- package/dist/chunk-XBJINVNA.mjs.map +1 -0
- package/dist/components/copilot-provider/copilotkit-props.d.ts +4 -0
- package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.d.ts +2 -1
- package/dist/components/copilot-provider/copilotkit.js +50 -5
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +2 -2
- package/dist/components/copilot-provider/index.d.ts +1 -0
- package/dist/components/copilot-provider/index.js +50 -5
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +2 -2
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +50 -5
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +2 -2
- package/dist/context/copilot-context.d.ts +21 -2
- package/dist/context/copilot-context.js +18 -3
- package/dist/context/copilot-context.js.map +1 -1
- package/dist/context/copilot-context.mjs +1 -1
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.js +18 -3
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +1 -1
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.js +288 -30
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +21 -12
- package/dist/hooks/use-chat.d.ts +26 -4
- package/dist/hooks/use-chat.js +73 -9
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +1 -1
- package/dist/hooks/use-coagent-action.d.ts +5 -0
- package/dist/hooks/use-coagent-action.js +156 -0
- package/dist/hooks/use-coagent-action.js.map +1 -0
- package/dist/hooks/use-coagent-action.mjs +9 -0
- package/dist/hooks/use-coagent-action.mjs.map +1 -0
- package/dist/hooks/use-coagent.d.ts +27 -0
- package/dist/hooks/use-coagent.js +219 -0
- package/dist/hooks/use-coagent.js.map +1 -0
- package/dist/hooks/use-coagent.mjs +10 -0
- package/dist/hooks/use-coagent.mjs.map +1 -0
- package/dist/hooks/use-copilot-action.js +27 -5
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +2 -2
- package/dist/hooks/use-copilot-chat.js +158 -19
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +4 -4
- package/dist/hooks/use-copilot-readable.js +21 -3
- package/dist/hooks/use-copilot-readable.js.map +1 -1
- package/dist/hooks/use-copilot-readable.mjs +2 -2
- package/dist/hooks/use-make-copilot-document-readable.js +21 -3
- package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
- package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.js +332 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +24 -16
- package/dist/lib/copilot-task.d.ts +2 -0
- package/dist/lib/copilot-task.js +2 -1
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +3 -3
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.js +2 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +3 -3
- package/dist/types/coagent-action.d.ts +17 -0
- package/dist/types/coagent-action.js +19 -0
- package/dist/types/coagent-action.js.map +1 -0
- package/dist/types/coagent-action.mjs +1 -0
- package/dist/types/coagent-action.mjs.map +1 -0
- package/dist/types/coagent-state.d.ts +11 -0
- package/dist/types/coagent-state.js +19 -0
- package/dist/types/coagent-state.js.map +1 -0
- package/dist/types/coagent-state.mjs +1 -0
- package/dist/types/coagent-state.mjs.map +1 -0
- package/dist/types/frontend-action.d.ts +1 -0
- package/dist/types/frontend-action.js.map +1 -1
- package/dist/utils/extract.d.ts +2 -0
- package/dist/utils/extract.js +2 -1
- package/dist/utils/extract.js.map +1 -1
- package/dist/utils/extract.mjs +3 -3
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +3 -3
- package/package.json +5 -5
- package/src/components/copilot-provider/copilotkit-props.tsx +5 -0
- package/src/components/copilot-provider/copilotkit.tsx +45 -3
- package/src/context/copilot-context.tsx +44 -3
- package/src/hooks/index.ts +2 -0
- package/src/hooks/use-chat.ts +131 -8
- package/src/hooks/use-coagent-action.ts +44 -0
- package/src/hooks/use-coagent.ts +133 -0
- package/src/hooks/use-copilot-action.ts +9 -5
- package/src/hooks/use-copilot-chat.ts +80 -8
- package/src/hooks/use-copilot-readable.ts +3 -3
- package/src/hooks/use-make-copilot-document-readable.ts +3 -3
- package/src/lib/copilot-task.ts +1 -0
- package/src/types/coagent-action.ts +17 -0
- package/src/types/coagent-state.ts +9 -0
- package/src/types/frontend-action.ts +1 -0
- package/src/utils/extract.ts +1 -0
- package/dist/chunk-3NHEWJ4V.mjs.map +0 -1
- package/dist/chunk-5JB4B2SV.mjs +0 -1
- package/dist/chunk-AGGKI26A.mjs.map +0 -1
- package/dist/chunk-KONDJRB4.mjs.map +0 -1
- package/dist/chunk-T6L4EGTD.mjs.map +0 -1
- package/dist/chunk-TVR5CJ6E.mjs.map +0 -1
- package/dist/chunk-VFDR4MIF.mjs.map +0 -1
- package/dist/chunk-YYZNR3CS.mjs.map +0 -1
- /package/dist/{chunk-5JB4B2SV.mjs.map → chunk-BWYAGPEF.mjs.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -86,6 +86,8 @@ __export(src_exports, {
|
|
|
86
86
|
CopilotTask: () => CopilotTask,
|
|
87
87
|
defaultCopilotContextCategories: () => defaultCopilotContextCategories,
|
|
88
88
|
extract: () => extract,
|
|
89
|
+
useCoAgent: () => useCoAgent,
|
|
90
|
+
useCoAgentAction: () => useCoAgentAction,
|
|
89
91
|
useCopilotAction: () => useCopilotAction,
|
|
90
92
|
useCopilotChat: () => useCopilotChat,
|
|
91
93
|
useCopilotContext: () => useCopilotContext,
|
|
@@ -105,7 +107,12 @@ var emptyCopilotContext = {
|
|
|
105
107
|
},
|
|
106
108
|
removeAction: () => {
|
|
107
109
|
},
|
|
108
|
-
|
|
110
|
+
coagentActions: {},
|
|
111
|
+
setCoagentAction: () => {
|
|
112
|
+
},
|
|
113
|
+
removeCoagentAction: () => {
|
|
114
|
+
},
|
|
115
|
+
chatComponentsCache: { current: { actions: {}, coagentActions: {} } },
|
|
109
116
|
getContextString: (documents, categories) => returnAndThrowInDebug(""),
|
|
110
117
|
addContext: () => "",
|
|
111
118
|
removeContext: () => {
|
|
@@ -138,11 +145,21 @@ var emptyCopilotContext = {
|
|
|
138
145
|
},
|
|
139
146
|
removeChatSuggestionConfiguration: () => {
|
|
140
147
|
},
|
|
141
|
-
showDevConsole: "auto"
|
|
148
|
+
showDevConsole: "auto",
|
|
149
|
+
coagentStates: {},
|
|
150
|
+
setCoagentStates: () => {
|
|
151
|
+
},
|
|
152
|
+
agentSession: null,
|
|
153
|
+
setAgentSession: () => {
|
|
154
|
+
}
|
|
142
155
|
};
|
|
143
156
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
144
157
|
function useCopilotContext() {
|
|
145
|
-
|
|
158
|
+
const context = import_react.default.useContext(CopilotContext);
|
|
159
|
+
if (context === emptyCopilotContext) {
|
|
160
|
+
throw new Error("Remember to wrap your app in a `<CopilotKit> {...} </CopilotKit>` !!!");
|
|
161
|
+
}
|
|
162
|
+
return context;
|
|
146
163
|
}
|
|
147
164
|
function returnAndThrowInDebug(value) {
|
|
148
165
|
throw new Error("Remember to wrap your app in a `<CopilotKit> {...} </CopilotKit>` !!!");
|
|
@@ -362,7 +379,11 @@ function CopilotKit(_a) {
|
|
|
362
379
|
}
|
|
363
380
|
const chatApiEndpoint = props.runtimeUrl || import_shared3.COPILOT_CLOUD_CHAT_URL;
|
|
364
381
|
const [actions, setActions] = (0, import_react4.useState)({});
|
|
365
|
-
const
|
|
382
|
+
const [coagentActions, setCoagentActions] = (0, import_react4.useState)({});
|
|
383
|
+
const chatComponentsCache = (0, import_react4.useRef)({
|
|
384
|
+
actions: {},
|
|
385
|
+
coagentActions: {}
|
|
386
|
+
});
|
|
366
387
|
const { addElement, removeElement, printTree } = use_tree_default();
|
|
367
388
|
const [messages, setMessages] = (0, import_react4.useState)([]);
|
|
368
389
|
const [isLoading, setIsLoading] = (0, import_react4.useState)(false);
|
|
@@ -386,6 +407,20 @@ function CopilotKit(_a) {
|
|
|
386
407
|
return newPoints;
|
|
387
408
|
});
|
|
388
409
|
}, []);
|
|
410
|
+
const setCoagentAction = (0, import_react4.useCallback)((id, action) => {
|
|
411
|
+
setCoagentActions((prevPoints) => {
|
|
412
|
+
return __spreadProps(__spreadValues({}, prevPoints), {
|
|
413
|
+
[id]: action
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
}, []);
|
|
417
|
+
const removeCoagentAction = (0, import_react4.useCallback)((id) => {
|
|
418
|
+
setCoagentActions((prevPoints) => {
|
|
419
|
+
const newPoints = __spreadValues({}, prevPoints);
|
|
420
|
+
delete newPoints[id];
|
|
421
|
+
return newPoints;
|
|
422
|
+
});
|
|
423
|
+
}, []);
|
|
389
424
|
const getContextString = (0, import_react4.useCallback)(
|
|
390
425
|
(documents, categories) => {
|
|
391
426
|
const documentsString = documents.map((document) => {
|
|
@@ -476,6 +511,14 @@ ${nonDocumentStrings}`;
|
|
|
476
511
|
return rest;
|
|
477
512
|
});
|
|
478
513
|
};
|
|
514
|
+
const [coagentStates, setCoagentStates] = (0, import_react4.useState)({});
|
|
515
|
+
let initialAgentSession = null;
|
|
516
|
+
if (props.agent) {
|
|
517
|
+
initialAgentSession = {
|
|
518
|
+
agentName: props.agent
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
const [agentSession, setAgentSession] = (0, import_react4.useState)(initialAgentSession);
|
|
479
522
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
480
523
|
CopilotContext.Provider,
|
|
481
524
|
{
|
|
@@ -485,6 +528,9 @@ ${nonDocumentStrings}`;
|
|
|
485
528
|
getFunctionCallHandler,
|
|
486
529
|
setAction,
|
|
487
530
|
removeAction,
|
|
531
|
+
coagentActions,
|
|
532
|
+
setCoagentAction,
|
|
533
|
+
removeCoagentAction,
|
|
488
534
|
getContextString,
|
|
489
535
|
addContext,
|
|
490
536
|
removeContext,
|
|
@@ -501,7 +547,11 @@ ${nonDocumentStrings}`;
|
|
|
501
547
|
removeChatSuggestionConfiguration,
|
|
502
548
|
chatInstructions,
|
|
503
549
|
setChatInstructions,
|
|
504
|
-
showDevConsole: props.showDevConsole === void 0 ? "auto" : props.showDevConsole
|
|
550
|
+
showDevConsole: props.showDevConsole === void 0 ? "auto" : props.showDevConsole,
|
|
551
|
+
coagentStates,
|
|
552
|
+
setCoagentStates,
|
|
553
|
+
agentSession,
|
|
554
|
+
setAgentSession
|
|
505
555
|
},
|
|
506
556
|
children
|
|
507
557
|
}
|
|
@@ -519,8 +569,9 @@ function entryPointsToFunctionCallHandler(actions) {
|
|
|
519
569
|
if (action) {
|
|
520
570
|
yield new Promise((resolve, reject) => {
|
|
521
571
|
(0, import_react_dom.flushSync)(() => __async(this, null, function* () {
|
|
572
|
+
var _a;
|
|
522
573
|
try {
|
|
523
|
-
result = yield action.handler(args);
|
|
574
|
+
result = yield (_a = action.handler) == null ? void 0 : _a.call(action, args);
|
|
524
575
|
resolve();
|
|
525
576
|
} catch (error) {
|
|
526
577
|
reject(error);
|
|
@@ -551,7 +602,12 @@ function useChat(options) {
|
|
|
551
602
|
initialMessages,
|
|
552
603
|
isLoading,
|
|
553
604
|
actions,
|
|
554
|
-
onFunctionCall
|
|
605
|
+
onFunctionCall,
|
|
606
|
+
onCoagentAction,
|
|
607
|
+
setCoagentStates,
|
|
608
|
+
coagentStates,
|
|
609
|
+
agentSession,
|
|
610
|
+
setAgentSession
|
|
555
611
|
} = options;
|
|
556
612
|
const abortControllerRef = (0, import_react5.useRef)();
|
|
557
613
|
const threadIdRef = (0, import_react5.useRef)(null);
|
|
@@ -580,13 +636,14 @@ function useChat(options) {
|
|
|
580
636
|
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
581
637
|
const stream = import_runtime_client_gql.CopilotRuntimeClient.asStream(
|
|
582
638
|
runtimeClient.generateCopilotResponse({
|
|
583
|
-
data: __spreadProps(__spreadValues({
|
|
639
|
+
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
584
640
|
frontend: {
|
|
585
641
|
actions: actions.map((action) => ({
|
|
586
642
|
name: action.name,
|
|
587
643
|
description: action.description || "",
|
|
588
644
|
jsonSchema: JSON.stringify((0, import_shared4.actionParametersToJsonSchema)(action.parameters || []))
|
|
589
|
-
}))
|
|
645
|
+
})),
|
|
646
|
+
url: window.location.href
|
|
590
647
|
},
|
|
591
648
|
threadId: threadIdRef.current,
|
|
592
649
|
runId: runIdRef.current,
|
|
@@ -604,6 +661,13 @@ function useChat(options) {
|
|
|
604
661
|
metadata: {
|
|
605
662
|
requestType: import_runtime_client_gql.CopilotRequestType.Chat
|
|
606
663
|
}
|
|
664
|
+
}), agentSession ? {
|
|
665
|
+
agentSession
|
|
666
|
+
} : {}), {
|
|
667
|
+
agentStates: Object.values(coagentStates).map((state) => ({
|
|
668
|
+
agentName: state.name,
|
|
669
|
+
state: JSON.stringify(state.state)
|
|
670
|
+
}))
|
|
607
671
|
}),
|
|
608
672
|
properties: copilotConfig.properties,
|
|
609
673
|
signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
|
|
@@ -611,7 +675,8 @@ function useChat(options) {
|
|
|
611
675
|
);
|
|
612
676
|
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
613
677
|
const reader = stream.getReader();
|
|
614
|
-
let
|
|
678
|
+
let actionResults = {};
|
|
679
|
+
let executedCoagentActions = [];
|
|
615
680
|
try {
|
|
616
681
|
while (true) {
|
|
617
682
|
const { done, value } = yield reader.read();
|
|
@@ -638,8 +703,30 @@ function useChat(options) {
|
|
|
638
703
|
} else {
|
|
639
704
|
for (const message of messages2) {
|
|
640
705
|
newMessages.push(message);
|
|
706
|
+
if (message instanceof import_runtime_client_gql.AgentStateMessage) {
|
|
707
|
+
if (message.running) {
|
|
708
|
+
setCoagentStates((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
709
|
+
[message.agentName]: {
|
|
710
|
+
name: message.agentName,
|
|
711
|
+
state: message.state,
|
|
712
|
+
running: message.running,
|
|
713
|
+
active: message.active,
|
|
714
|
+
threadId: message.threadId,
|
|
715
|
+
nodeName: message.nodeName,
|
|
716
|
+
runId: message.runId
|
|
717
|
+
}
|
|
718
|
+
}));
|
|
719
|
+
setAgentSession({
|
|
720
|
+
threadId: message.threadId,
|
|
721
|
+
agentName: message.agentName,
|
|
722
|
+
nodeName: message.nodeName
|
|
723
|
+
});
|
|
724
|
+
} else {
|
|
725
|
+
setAgentSession(null);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
641
728
|
if (message instanceof import_runtime_client_gql.ActionExecutionMessage && message.status.code !== import_runtime_client_gql.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
642
|
-
if (!(message.id in
|
|
729
|
+
if (!(message.id in actionResults)) {
|
|
643
730
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
644
731
|
break;
|
|
645
732
|
}
|
|
@@ -648,25 +735,53 @@ function useChat(options) {
|
|
|
648
735
|
name: message.name,
|
|
649
736
|
args: message.arguments
|
|
650
737
|
});
|
|
651
|
-
|
|
738
|
+
actionResults[message.id] = result;
|
|
652
739
|
}
|
|
653
740
|
newMessages.push(
|
|
654
741
|
new import_runtime_client_gql.ResultMessage({
|
|
655
|
-
result: import_runtime_client_gql.ResultMessage.encodeResult(
|
|
742
|
+
result: import_runtime_client_gql.ResultMessage.encodeResult(actionResults[message.id]),
|
|
656
743
|
actionExecutionId: message.id,
|
|
657
744
|
actionName: message.name
|
|
658
745
|
})
|
|
659
746
|
);
|
|
660
747
|
}
|
|
748
|
+
if (message instanceof import_runtime_client_gql.AgentStateMessage && !message.active && !executedCoagentActions.includes(message.id) && onCoagentAction) {
|
|
749
|
+
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
750
|
+
break;
|
|
751
|
+
}
|
|
752
|
+
yield onCoagentAction({
|
|
753
|
+
name: message.agentName,
|
|
754
|
+
nodeName: message.nodeName,
|
|
755
|
+
state: message.state
|
|
756
|
+
});
|
|
757
|
+
executedCoagentActions.push(message.id);
|
|
758
|
+
}
|
|
661
759
|
}
|
|
662
760
|
}
|
|
663
761
|
if (newMessages.length > 0) {
|
|
664
|
-
|
|
762
|
+
const filteredMessages = [...previousMessages, ...newMessages].reduce(
|
|
763
|
+
(acc, message) => {
|
|
764
|
+
if (
|
|
765
|
+
// If the current message is an AgentStateMessage
|
|
766
|
+
message instanceof import_runtime_client_gql.AgentStateMessage && // And there is at least one message in the accumulator
|
|
767
|
+
acc.length > 0 && // And the last message in the accumulator is also an AgentStateMessage
|
|
768
|
+
acc[acc.length - 1] instanceof import_runtime_client_gql.AgentStateMessage && // And the agentName, nodeName, and runId are the same
|
|
769
|
+
acc[acc.length - 1].agentName === message.agentName && acc[acc.length - 1].nodeName === message.nodeName && acc[acc.length - 1].runId === message.runId
|
|
770
|
+
) {
|
|
771
|
+
acc[acc.length - 1] = message;
|
|
772
|
+
} else {
|
|
773
|
+
acc.push(message);
|
|
774
|
+
}
|
|
775
|
+
return acc;
|
|
776
|
+
},
|
|
777
|
+
[]
|
|
778
|
+
);
|
|
779
|
+
setMessages(filteredMessages);
|
|
665
780
|
}
|
|
666
781
|
}
|
|
667
782
|
if (
|
|
668
783
|
// if we have client side results
|
|
669
|
-
Object.values(
|
|
784
|
+
Object.values(actionResults).length || // or the last message we received is a result
|
|
670
785
|
newMessages.length && newMessages[newMessages.length - 1] instanceof import_runtime_client_gql.ResultMessage
|
|
671
786
|
) {
|
|
672
787
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
@@ -728,8 +843,13 @@ function useCopilotChat(_a = {}) {
|
|
|
728
843
|
isLoading,
|
|
729
844
|
setIsLoading,
|
|
730
845
|
chatInstructions,
|
|
731
|
-
actions
|
|
732
|
-
|
|
846
|
+
actions,
|
|
847
|
+
coagentStates,
|
|
848
|
+
setCoagentStates,
|
|
849
|
+
coagentActions,
|
|
850
|
+
agentSession,
|
|
851
|
+
setAgentSession
|
|
852
|
+
} = useCopilotContext();
|
|
733
853
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
734
854
|
const deleteMessage = (0, import_react6.useCallback)(
|
|
735
855
|
(messageId) => {
|
|
@@ -745,24 +865,76 @@ function useCopilotChat(_a = {}) {
|
|
|
745
865
|
role: import_runtime_client_gql2.Role.System
|
|
746
866
|
});
|
|
747
867
|
}, [getContextString, makeSystemMessage2, chatInstructions]);
|
|
868
|
+
const onCoagentAction = (0, import_react6.useCallback)(
|
|
869
|
+
(args) => __async(this, null, function* () {
|
|
870
|
+
var _a2;
|
|
871
|
+
const { name, nodeName, state } = args;
|
|
872
|
+
let action = Object.values(coagentActions).find(
|
|
873
|
+
(action2) => action2.name === name && action2.nodeName === nodeName
|
|
874
|
+
);
|
|
875
|
+
if (!action) {
|
|
876
|
+
action = Object.values(coagentActions).find(
|
|
877
|
+
(action2) => action2.name === name && !action2.nodeName
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
if (action) {
|
|
881
|
+
yield (_a2 = action.handler) == null ? void 0 : _a2.call(action, { state, nodeName });
|
|
882
|
+
}
|
|
883
|
+
}),
|
|
884
|
+
[coagentActions]
|
|
885
|
+
);
|
|
748
886
|
const { append, reload, stop } = useChat(__spreadProps(__spreadValues({}, options), {
|
|
749
887
|
actions: Object.values(actions),
|
|
750
888
|
copilotConfig: copilotApiConfig,
|
|
751
889
|
initialMessages: options.initialMessages || [],
|
|
752
890
|
onFunctionCall: getFunctionCallHandler(),
|
|
891
|
+
onCoagentAction,
|
|
753
892
|
messages,
|
|
754
893
|
setMessages,
|
|
755
894
|
makeSystemMessageCallback,
|
|
756
895
|
isLoading,
|
|
757
|
-
setIsLoading
|
|
896
|
+
setIsLoading,
|
|
897
|
+
coagentStates,
|
|
898
|
+
setCoagentStates,
|
|
899
|
+
agentSession,
|
|
900
|
+
setAgentSession
|
|
758
901
|
}));
|
|
902
|
+
const latestAppend = useUpdatedRef(append);
|
|
903
|
+
const latestAppendFunc = (0, import_react6.useCallback)(
|
|
904
|
+
(message) => {
|
|
905
|
+
return latestAppend.current(message);
|
|
906
|
+
},
|
|
907
|
+
[latestAppend]
|
|
908
|
+
);
|
|
909
|
+
const latestReload = useUpdatedRef(reload);
|
|
910
|
+
const latestReloadFunc = (0, import_react6.useCallback)(() => {
|
|
911
|
+
return latestReload.current();
|
|
912
|
+
}, [latestReload]);
|
|
913
|
+
const latestStop = useUpdatedRef(stop);
|
|
914
|
+
const latestStopFunc = (0, import_react6.useCallback)(() => {
|
|
915
|
+
return latestStop.current();
|
|
916
|
+
}, [latestStop]);
|
|
917
|
+
const latestDelete = useUpdatedRef(deleteMessage);
|
|
918
|
+
const latestDeleteFunc = (0, import_react6.useCallback)(
|
|
919
|
+
(messageId) => {
|
|
920
|
+
return latestDelete.current(messageId);
|
|
921
|
+
},
|
|
922
|
+
[latestDelete]
|
|
923
|
+
);
|
|
924
|
+
const latestSetMessages = useUpdatedRef(setMessages);
|
|
925
|
+
const latestSetMessagesFunc = (0, import_react6.useCallback)(
|
|
926
|
+
(messages2) => {
|
|
927
|
+
return latestSetMessages.current(messages2);
|
|
928
|
+
},
|
|
929
|
+
[latestSetMessages]
|
|
930
|
+
);
|
|
759
931
|
return {
|
|
760
932
|
visibleMessages: messages,
|
|
761
|
-
appendMessage:
|
|
762
|
-
setMessages,
|
|
763
|
-
reloadMessages:
|
|
764
|
-
stopGeneration:
|
|
765
|
-
deleteMessage,
|
|
933
|
+
appendMessage: latestAppendFunc,
|
|
934
|
+
setMessages: latestSetMessagesFunc,
|
|
935
|
+
reloadMessages: latestReloadFunc,
|
|
936
|
+
stopGeneration: latestStopFunc,
|
|
937
|
+
deleteMessage: latestDeleteFunc,
|
|
766
938
|
isLoading
|
|
767
939
|
};
|
|
768
940
|
}
|
|
@@ -801,22 +973,25 @@ ${additionalInstructions}` : "");
|
|
|
801
973
|
var import_react7 = require("react");
|
|
802
974
|
var import_shared5 = require("@copilotkit/shared");
|
|
803
975
|
function useCopilotAction(action, dependencies) {
|
|
804
|
-
const { setAction, removeAction, actions, chatComponentsCache } = (
|
|
976
|
+
const { setAction, removeAction, actions, chatComponentsCache } = useCopilotContext();
|
|
805
977
|
const idRef = (0, import_react7.useRef)((0, import_shared5.randomId)());
|
|
806
978
|
if (dependencies === void 0) {
|
|
807
979
|
if (actions[idRef.current]) {
|
|
808
980
|
actions[idRef.current].handler = action.handler;
|
|
809
981
|
if (typeof action.render === "function") {
|
|
810
982
|
if (chatComponentsCache.current !== null) {
|
|
811
|
-
chatComponentsCache.current[action.name] = action.render;
|
|
983
|
+
chatComponentsCache.current.actions[action.name] = action.render;
|
|
812
984
|
}
|
|
813
985
|
}
|
|
814
986
|
}
|
|
815
987
|
}
|
|
816
988
|
(0, import_react7.useEffect)(() => {
|
|
989
|
+
if (action.disabled) {
|
|
990
|
+
return;
|
|
991
|
+
}
|
|
817
992
|
setAction(idRef.current, action);
|
|
818
993
|
if (chatComponentsCache.current !== null && action.render !== void 0) {
|
|
819
|
-
chatComponentsCache.current[action.name] = action.render;
|
|
994
|
+
chatComponentsCache.current.actions[action.name] = action.render;
|
|
820
995
|
}
|
|
821
996
|
return () => {
|
|
822
997
|
removeAction(idRef.current);
|
|
@@ -826,6 +1001,7 @@ function useCopilotAction(action, dependencies) {
|
|
|
826
1001
|
removeAction,
|
|
827
1002
|
action.description,
|
|
828
1003
|
action.name,
|
|
1004
|
+
action.disabled,
|
|
829
1005
|
// This should be faster than deep equality checking
|
|
830
1006
|
// In addition, all major JS engines guarantee the order of object keys
|
|
831
1007
|
JSON.stringify(action.parameters),
|
|
@@ -836,12 +1012,48 @@ function useCopilotAction(action, dependencies) {
|
|
|
836
1012
|
]);
|
|
837
1013
|
}
|
|
838
1014
|
|
|
839
|
-
// src/hooks/use-
|
|
1015
|
+
// src/hooks/use-coagent-action.ts
|
|
840
1016
|
var import_react8 = require("react");
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
const
|
|
1017
|
+
var import_shared6 = require("@copilotkit/shared");
|
|
1018
|
+
function useCoAgentAction(action, dependencies) {
|
|
1019
|
+
const { setCoagentAction, removeCoagentAction, coagentActions, chatComponentsCache } = (0, import_react8.useContext)(CopilotContext);
|
|
1020
|
+
const idRef = (0, import_react8.useRef)((0, import_shared6.randomId)());
|
|
1021
|
+
const key = `${action.name}-${action.nodeName || "global"}`;
|
|
1022
|
+
if (dependencies === void 0) {
|
|
1023
|
+
if (coagentActions[idRef.current]) {
|
|
1024
|
+
coagentActions[idRef.current].handler = action.handler;
|
|
1025
|
+
if (typeof action.render === "function") {
|
|
1026
|
+
if (chatComponentsCache.current !== null) {
|
|
1027
|
+
chatComponentsCache.current.coagentActions[key] = action.render;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
844
1032
|
(0, import_react8.useEffect)(() => {
|
|
1033
|
+
setCoagentAction(idRef.current, action);
|
|
1034
|
+
if (chatComponentsCache.current !== null && action.render !== void 0) {
|
|
1035
|
+
chatComponentsCache.current.coagentActions[key] = action.render;
|
|
1036
|
+
}
|
|
1037
|
+
return () => {
|
|
1038
|
+
removeCoagentAction(idRef.current);
|
|
1039
|
+
};
|
|
1040
|
+
}, [
|
|
1041
|
+
setCoagentAction,
|
|
1042
|
+
removeCoagentAction,
|
|
1043
|
+
action.name,
|
|
1044
|
+
// include render only if it's a string
|
|
1045
|
+
typeof action.render === "string" ? action.render : void 0,
|
|
1046
|
+
// dependencies set by the developer
|
|
1047
|
+
...dependencies || []
|
|
1048
|
+
]);
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
// src/hooks/use-make-copilot-document-readable.ts
|
|
1052
|
+
var import_react9 = require("react");
|
|
1053
|
+
function useMakeCopilotDocumentReadable(document, categories, dependencies = []) {
|
|
1054
|
+
const { addDocumentContext, removeDocumentContext } = useCopilotContext();
|
|
1055
|
+
const idRef = (0, import_react9.useRef)();
|
|
1056
|
+
(0, import_react9.useEffect)(() => {
|
|
845
1057
|
const id = addDocumentContext(document, categories);
|
|
846
1058
|
idRef.current = id;
|
|
847
1059
|
return () => {
|
|
@@ -852,16 +1064,16 @@ function useMakeCopilotDocumentReadable(document, categories, dependencies = [])
|
|
|
852
1064
|
}
|
|
853
1065
|
|
|
854
1066
|
// src/hooks/use-copilot-readable.ts
|
|
855
|
-
var
|
|
1067
|
+
var import_react10 = require("react");
|
|
856
1068
|
function convertToJSON(description, value) {
|
|
857
1069
|
return `${description}: ${typeof value === "string" ? value : JSON.stringify(value)}`;
|
|
858
1070
|
}
|
|
859
1071
|
function useCopilotReadable({ description, value, parentId, categories, convert }, dependencies) {
|
|
860
|
-
const { addContext, removeContext } = (
|
|
861
|
-
const idRef = (0,
|
|
1072
|
+
const { addContext, removeContext } = useCopilotContext();
|
|
1073
|
+
const idRef = (0, import_react10.useRef)();
|
|
862
1074
|
convert = convert || convertToJSON;
|
|
863
1075
|
const information = convert(description, value);
|
|
864
|
-
(0,
|
|
1076
|
+
(0, import_react10.useEffect)(() => {
|
|
865
1077
|
const id = addContext(information, parentId, categories);
|
|
866
1078
|
idRef.current = id;
|
|
867
1079
|
return () => {
|
|
@@ -871,9 +1083,84 @@ function useCopilotReadable({ description, value, parentId, categories, convert
|
|
|
871
1083
|
return idRef.current;
|
|
872
1084
|
}
|
|
873
1085
|
|
|
1086
|
+
// src/hooks/use-coagent.ts
|
|
1087
|
+
var import_react11 = require("react");
|
|
1088
|
+
function useCoAgent(options) {
|
|
1089
|
+
const isExternalStateManagement = (options2) => {
|
|
1090
|
+
return "state" in options2 && "setState" in options2;
|
|
1091
|
+
};
|
|
1092
|
+
const { name } = options;
|
|
1093
|
+
const isInternalStateManagementWithInitial = (options2) => {
|
|
1094
|
+
return "initialState" in options2;
|
|
1095
|
+
};
|
|
1096
|
+
const { coagentStates, setCoagentStates } = useCopilotContext();
|
|
1097
|
+
const getCoagentState = (coagentStates2, name2) => {
|
|
1098
|
+
if (coagentStates2[name2]) {
|
|
1099
|
+
return coagentStates2[name2];
|
|
1100
|
+
} else {
|
|
1101
|
+
return {
|
|
1102
|
+
name: name2,
|
|
1103
|
+
state: isInternalStateManagementWithInitial(options) ? options.initialState : {},
|
|
1104
|
+
running: false,
|
|
1105
|
+
active: false,
|
|
1106
|
+
threadId: void 0,
|
|
1107
|
+
nodeName: void 0,
|
|
1108
|
+
runId: void 0
|
|
1109
|
+
};
|
|
1110
|
+
}
|
|
1111
|
+
};
|
|
1112
|
+
const setState = (newState) => {
|
|
1113
|
+
setCoagentStates((prevAgentStates) => {
|
|
1114
|
+
let coagentState2 = getCoagentState(prevAgentStates, name);
|
|
1115
|
+
const updatedState = typeof newState === "function" ? newState(coagentState2.state) : newState;
|
|
1116
|
+
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
1117
|
+
[name]: __spreadProps(__spreadValues({}, coagentState2), {
|
|
1118
|
+
state: updatedState
|
|
1119
|
+
})
|
|
1120
|
+
});
|
|
1121
|
+
});
|
|
1122
|
+
};
|
|
1123
|
+
const coagentState = getCoagentState(coagentStates, name);
|
|
1124
|
+
const state = isExternalStateManagement(options) ? options.state : coagentState.state;
|
|
1125
|
+
(0, import_react11.useEffect)(() => {
|
|
1126
|
+
if (isExternalStateManagement(options)) {
|
|
1127
|
+
setState(options.state);
|
|
1128
|
+
} else if (coagentStates[name] === void 0) {
|
|
1129
|
+
setState(options.initialState === void 0 ? {} : options.initialState);
|
|
1130
|
+
}
|
|
1131
|
+
}, [isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0]);
|
|
1132
|
+
return {
|
|
1133
|
+
name,
|
|
1134
|
+
nodeName: coagentState.nodeName,
|
|
1135
|
+
state,
|
|
1136
|
+
setState,
|
|
1137
|
+
running: coagentState.running,
|
|
1138
|
+
start: () => {
|
|
1139
|
+
startAgent(name);
|
|
1140
|
+
},
|
|
1141
|
+
stop: () => {
|
|
1142
|
+
stopAgent(name);
|
|
1143
|
+
}
|
|
1144
|
+
};
|
|
1145
|
+
}
|
|
1146
|
+
function startAgent(name) {
|
|
1147
|
+
const { setAgentSession } = useCopilotContext();
|
|
1148
|
+
setAgentSession({
|
|
1149
|
+
agentName: name
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1152
|
+
function stopAgent(name) {
|
|
1153
|
+
const { agentSession, setAgentSession } = useCopilotContext();
|
|
1154
|
+
if (agentSession && agentSession.agentName === name) {
|
|
1155
|
+
setAgentSession(null);
|
|
1156
|
+
} else {
|
|
1157
|
+
console.warn(`No agent session found for ${name}`);
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
|
|
874
1161
|
// src/lib/copilot-task.ts
|
|
875
1162
|
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
876
|
-
var
|
|
1163
|
+
var import_shared7 = require("@copilotkit/shared");
|
|
877
1164
|
var CopilotTask = class {
|
|
878
1165
|
constructor(config) {
|
|
879
1166
|
this.instructions = config.instructions;
|
|
@@ -917,8 +1204,9 @@ var CopilotTask = class {
|
|
|
917
1204
|
actions: Object.values(actions).map((action) => ({
|
|
918
1205
|
name: action.name,
|
|
919
1206
|
description: action.description || "",
|
|
920
|
-
jsonSchema: JSON.stringify((0,
|
|
921
|
-
}))
|
|
1207
|
+
jsonSchema: JSON.stringify((0, import_shared7.actionParametersToJsonSchema)(action.parameters || []))
|
|
1208
|
+
})),
|
|
1209
|
+
url: window.location.href
|
|
922
1210
|
},
|
|
923
1211
|
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)(messages),
|
|
924
1212
|
metadata: {
|
|
@@ -971,7 +1259,7 @@ ${instructions}
|
|
|
971
1259
|
}
|
|
972
1260
|
|
|
973
1261
|
// src/utils/extract.ts
|
|
974
|
-
var
|
|
1262
|
+
var import_shared8 = require("@copilotkit/shared");
|
|
975
1263
|
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
976
1264
|
var import_runtime_client_gql5 = require("@copilotkit/runtime-client-gql");
|
|
977
1265
|
var import_runtime_client_gql6 = require("@copilotkit/runtime-client-gql");
|
|
@@ -1007,7 +1295,7 @@ function extract(_0) {
|
|
|
1007
1295
|
content: makeSystemMessage(contextString, instructions),
|
|
1008
1296
|
role: import_runtime_client_gql4.Role.System
|
|
1009
1297
|
});
|
|
1010
|
-
const headers = __spreadValues(__spreadValues({}, context.copilotApiConfig.headers || {}), context.copilotApiConfig.publicApiKey ? { [
|
|
1298
|
+
const headers = __spreadValues(__spreadValues({}, context.copilotApiConfig.headers || {}), context.copilotApiConfig.publicApiKey ? { [import_shared8.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey } : {});
|
|
1011
1299
|
const runtimeClient = new import_runtime_client_gql5.CopilotRuntimeClient({
|
|
1012
1300
|
url: context.copilotApiConfig.chatApiEndpoint,
|
|
1013
1301
|
publicApiKey: context.copilotApiConfig.publicApiKey,
|
|
@@ -1022,9 +1310,10 @@ function extract(_0) {
|
|
|
1022
1310
|
{
|
|
1023
1311
|
name: action.name,
|
|
1024
1312
|
description: action.description || "",
|
|
1025
|
-
jsonSchema: JSON.stringify((0,
|
|
1313
|
+
jsonSchema: JSON.stringify((0, import_shared8.actionParametersToJsonSchema)(action.parameters || []))
|
|
1026
1314
|
}
|
|
1027
|
-
]
|
|
1315
|
+
],
|
|
1316
|
+
url: window.location.href
|
|
1028
1317
|
},
|
|
1029
1318
|
messages: (0, import_runtime_client_gql6.convertMessagesToGqlInput)(
|
|
1030
1319
|
includeMessages ? [systemMessage, ...messages] : [systemMessage]
|
|
@@ -1108,6 +1397,8 @@ Any additional messages provided are for providing context only and should not b
|
|
|
1108
1397
|
CopilotTask,
|
|
1109
1398
|
defaultCopilotContextCategories,
|
|
1110
1399
|
extract,
|
|
1400
|
+
useCoAgent,
|
|
1401
|
+
useCoAgentAction,
|
|
1111
1402
|
useCopilotAction,
|
|
1112
1403
|
useCopilotChat,
|
|
1113
1404
|
useCopilotContext,
|