@copilotkit/react-core 1.2.2-feat-runtime-remote-actions.1 → 1.3.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 +7 -15
- package/dist/{chunk-24BNTWFY.mjs → chunk-NT4LQOL4.mjs} +53 -4
- package/dist/chunk-NT4LQOL4.mjs.map +1 -0
- package/dist/hooks/index.js +48 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +10 -10
- package/dist/hooks/use-coagent.d.ts +3 -13
- package/dist/hooks/use-coagent.js +440 -5
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +8 -1
- package/dist/index.js +66 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/package.json +5 -5
- package/src/hooks/use-coagent.ts +54 -5
- package/dist/chunk-24BNTWFY.mjs.map +0 -1
package/src/hooks/use-coagent.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { CopilotContextParams, useCopilotContext } from "../context";
|
|
3
3
|
import { CoagentState } from "../types/coagent-state";
|
|
4
|
+
import { useCopilotChat } from "./use-copilot-chat";
|
|
5
|
+
import { AgentStateMessage, Message, Role, TextMessage } from "@copilotkit/runtime-client-gql";
|
|
4
6
|
|
|
5
7
|
interface WithInternalStateManagementAndInitial<T> {
|
|
6
8
|
name: string;
|
|
@@ -30,8 +32,9 @@ export interface UseCoagentReturnType<T> {
|
|
|
30
32
|
running: boolean;
|
|
31
33
|
state: T;
|
|
32
34
|
setState: (newState: T | ((prevState: T | undefined) => T)) => void;
|
|
33
|
-
start: (
|
|
34
|
-
stop: (
|
|
35
|
+
start: () => void;
|
|
36
|
+
stop: () => void;
|
|
37
|
+
run: (hint?: string) => Promise<void>;
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
export function useCoAgent<T = any>(options: UseCoagentOptions<T>): UseCoagentReturnType<T> {
|
|
@@ -49,7 +52,9 @@ export function useCoAgent<T = any>(options: UseCoagentOptions<T>): UseCoagentRe
|
|
|
49
52
|
return "initialState" in options;
|
|
50
53
|
};
|
|
51
54
|
|
|
52
|
-
const
|
|
55
|
+
const context = useCopilotContext();
|
|
56
|
+
const { coagentStates, setCoagentStates } = context;
|
|
57
|
+
const { appendMessage } = useCopilotChat();
|
|
53
58
|
|
|
54
59
|
const getCoagentState = (coagentStates: Record<string, CoagentState>, name: string) => {
|
|
55
60
|
if (coagentStates[name]) {
|
|
@@ -105,12 +110,15 @@ export function useCoAgent<T = any>(options: UseCoagentOptions<T>): UseCoagentRe
|
|
|
105
110
|
state,
|
|
106
111
|
setState,
|
|
107
112
|
running: coagentState.running,
|
|
108
|
-
start: (
|
|
113
|
+
start: () => {
|
|
109
114
|
startAgent(name, context);
|
|
110
115
|
},
|
|
111
|
-
stop: (
|
|
116
|
+
stop: () => {
|
|
112
117
|
stopAgent(name, context);
|
|
113
118
|
},
|
|
119
|
+
run: (hint?: string) => {
|
|
120
|
+
return runAgent(name, context, appendMessage, hint);
|
|
121
|
+
},
|
|
114
122
|
};
|
|
115
123
|
}
|
|
116
124
|
|
|
@@ -129,3 +137,44 @@ function stopAgent(name: string, context: CopilotContextParams) {
|
|
|
129
137
|
console.warn(`No agent session found for ${name}`);
|
|
130
138
|
}
|
|
131
139
|
}
|
|
140
|
+
|
|
141
|
+
async function runAgent(
|
|
142
|
+
name: string,
|
|
143
|
+
context: CopilotContextParams,
|
|
144
|
+
appendMessage: (message: Message) => Promise<void>,
|
|
145
|
+
hint?: string,
|
|
146
|
+
) {
|
|
147
|
+
const { agentSession, setAgentSession } = context;
|
|
148
|
+
if (!agentSession || agentSession.agentName !== name) {
|
|
149
|
+
setAgentSession({
|
|
150
|
+
agentName: name,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
let previousState: any = null;
|
|
155
|
+
for (let i = context.messages.length - 1; i >= 0; i--) {
|
|
156
|
+
const message = context.messages[i];
|
|
157
|
+
if (message instanceof AgentStateMessage && message.agentName === name) {
|
|
158
|
+
previousState = message.state;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
let state = context.coagentStates?.[name]?.state || {};
|
|
163
|
+
|
|
164
|
+
let content = "The state of the agent has been updated\n";
|
|
165
|
+
if (previousState !== null) {
|
|
166
|
+
content += `The previous state was:\n${JSON.stringify(previousState, null, 2)}\n\n`;
|
|
167
|
+
}
|
|
168
|
+
content += `The current state is:\n${JSON.stringify(state, null, 2)}`;
|
|
169
|
+
|
|
170
|
+
if (hint) {
|
|
171
|
+
content += `\n\n${hint}`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return await appendMessage(
|
|
175
|
+
new TextMessage({
|
|
176
|
+
role: Role.System,
|
|
177
|
+
content,
|
|
178
|
+
}),
|
|
179
|
+
);
|
|
180
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-coagent.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { CopilotContextParams, useCopilotContext } from \"../context\";\nimport { CoagentState } from \"../types/coagent-state\";\n\ninterface WithInternalStateManagementAndInitial<T> {\n name: string;\n initialState: T;\n}\n\ninterface WithInternalStateManagement {\n name: string;\n initialState?: any; // Optional initialState with default type any\n}\n\ninterface WithExternalStateManagement<T> {\n name: string;\n state: T;\n setState: (newState: T | ((prevState: T | undefined) => T)) => void;\n}\n\ntype UseCoagentOptions<T> =\n | WithInternalStateManagementAndInitial<T>\n | WithInternalStateManagement\n | WithExternalStateManagement<T>;\n\nexport interface UseCoagentReturnType<T> {\n name: string;\n nodeName?: string;\n threadId?: string;\n running: boolean;\n state: T;\n setState: (newState: T | ((prevState: T | undefined) => T)) => void;\n start: (context: CopilotContextParams) => void;\n stop: (context: CopilotContextParams) => void;\n}\n\nexport function useCoAgent<T = any>(options: UseCoagentOptions<T>): UseCoagentReturnType<T> {\n const isExternalStateManagement = (\n options: UseCoagentOptions<T>,\n ): options is WithExternalStateManagement<T> => {\n return \"state\" in options && \"setState\" in options;\n };\n\n const { name } = options;\n\n const isInternalStateManagementWithInitial = (\n options: UseCoagentOptions<T>,\n ): options is WithInternalStateManagementAndInitial<T> => {\n return \"initialState\" in options;\n };\n\n const { coagentStates, setCoagentStates } = useCopilotContext();\n\n const getCoagentState = (coagentStates: Record<string, CoagentState>, name: string) => {\n if (coagentStates[name]) {\n return coagentStates[name];\n } else {\n return {\n name,\n state: isInternalStateManagementWithInitial(options) ? options.initialState : {},\n running: false,\n active: false,\n threadId: undefined,\n nodeName: undefined,\n runId: undefined,\n };\n }\n };\n\n // if we manage state internally, we need to provide a function to set the state\n const setState = (newState: T | ((prevState: T | undefined) => T)) => {\n setCoagentStates((prevAgentStates) => {\n let coagentState: CoagentState = getCoagentState(prevAgentStates, name);\n\n const updatedState =\n typeof newState === \"function\" ? (newState as Function)(coagentState.state) : newState;\n\n return {\n ...prevAgentStates,\n [name]: {\n ...coagentState,\n state: updatedState,\n },\n };\n });\n };\n\n const coagentState = getCoagentState(coagentStates, name);\n\n const state = isExternalStateManagement(options) ? options.state : coagentState.state;\n\n // Sync internal state with external state if state management is external\n useEffect(() => {\n if (isExternalStateManagement(options)) {\n setState(options.state);\n } else if (coagentStates[name] === undefined) {\n setState(options.initialState === undefined ? {} : options.initialState);\n }\n }, [isExternalStateManagement(options) ? JSON.stringify(options.state) : undefined]);\n\n // Return the state and setState function\n return {\n name,\n nodeName: coagentState.nodeName,\n state,\n setState,\n running: coagentState.running,\n start: (context: CopilotContextParams) => {\n startAgent(name, context);\n },\n stop: (context: CopilotContextParams) => {\n stopAgent(name, context);\n },\n };\n}\n\nfunction startAgent(name: string, context: CopilotContextParams) {\n const { setAgentSession } = context;\n setAgentSession({\n agentName: name,\n });\n}\n\nfunction stopAgent(name: string, context: CopilotContextParams) {\n const { agentSession, setAgentSession } = context;\n if (agentSession && agentSession.agentName === name) {\n setAgentSession(null);\n } else {\n console.warn(`No agent session found for ${name}`);\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,iBAAiB;AAoCnB,SAAS,WAAoB,SAAwD;AAC1F,QAAM,4BAA4B,CAChCA,aAC8C;AAC9C,WAAO,WAAWA,YAAW,cAAcA;AAAA,EAC7C;AAEA,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,uCAAuC,CAC3CA,aACwD;AACxD,WAAO,kBAAkBA;AAAA,EAC3B;AAEA,QAAM,EAAE,eAAe,iBAAiB,IAAI,kBAAkB;AAE9D,QAAM,kBAAkB,CAACC,gBAA6CC,UAAiB;AACrF,QAAID,eAAcC,KAAI,GAAG;AACvB,aAAOD,eAAcC,KAAI;AAAA,IAC3B,OAAO;AACL,aAAO;AAAA,QACL,MAAAA;AAAA,QACA,OAAO,qCAAqC,OAAO,IAAI,QAAQ,eAAe,CAAC;AAAA,QAC/E,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAGA,QAAM,WAAW,CAAC,aAAoD;AACpE,qBAAiB,CAAC,oBAAoB;AACpC,UAAIC,gBAA6B,gBAAgB,iBAAiB,IAAI;AAEtE,YAAM,eACJ,OAAO,aAAa,aAAc,SAAsBA,cAAa,KAAK,IAAI;AAEhF,aAAO,iCACF,kBADE;AAAA,QAEL,CAAC,IAAI,GAAG,iCACHA,gBADG;AAAA,UAEN,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,gBAAgB,eAAe,IAAI;AAExD,QAAM,QAAQ,0BAA0B,OAAO,IAAI,QAAQ,QAAQ,aAAa;AAGhF,YAAU,MAAM;AACd,QAAI,0BAA0B,OAAO,GAAG;AACtC,eAAS,QAAQ,KAAK;AAAA,IACxB,WAAW,cAAc,IAAI,MAAM,QAAW;AAC5C,eAAS,QAAQ,iBAAiB,SAAY,CAAC,IAAI,QAAQ,YAAY;AAAA,IACzE;AAAA,EACF,GAAG,CAAC,0BAA0B,OAAO,IAAI,KAAK,UAAU,QAAQ,KAAK,IAAI,MAAS,CAAC;AAGnF,SAAO;AAAA,IACL;AAAA,IACA,UAAU,aAAa;AAAA,IACvB;AAAA,IACA;AAAA,IACA,SAAS,aAAa;AAAA,IACtB,OAAO,CAAC,YAAkC;AACxC,iBAAW,MAAM,OAAO;AAAA,IAC1B;AAAA,IACA,MAAM,CAAC,YAAkC;AACvC,gBAAU,MAAM,OAAO;AAAA,IACzB;AAAA,EACF;AACF;AAEA,SAAS,WAAW,MAAc,SAA+B;AAC/D,QAAM,EAAE,gBAAgB,IAAI;AAC5B,kBAAgB;AAAA,IACd,WAAW;AAAA,EACb,CAAC;AACH;AAEA,SAAS,UAAU,MAAc,SAA+B;AAC9D,QAAM,EAAE,cAAc,gBAAgB,IAAI;AAC1C,MAAI,gBAAgB,aAAa,cAAc,MAAM;AACnD,oBAAgB,IAAI;AAAA,EACtB,OAAO;AACL,YAAQ,KAAK,8BAA8B,MAAM;AAAA,EACnD;AACF;","names":["options","coagentStates","name","coagentState"]}
|