@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.
@@ -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: (context: CopilotContextParams) => void;
34
- stop: (context: CopilotContextParams) => void;
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 { coagentStates, setCoagentStates } = useCopilotContext();
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: (context: CopilotContextParams) => {
113
+ start: () => {
109
114
  startAgent(name, context);
110
115
  },
111
- stop: (context: CopilotContextParams) => {
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"]}