@copilotkit/react-core 1.4.7 → 1.4.8-coagents-v0-3.1

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 (33) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/{chunk-EUIBVFV6.mjs → chunk-EC5YZTSH.mjs} +91 -57
  3. package/dist/chunk-EC5YZTSH.mjs.map +1 -0
  4. package/dist/{chunk-XBVKTDXP.mjs → chunk-TNSI3FLW.mjs} +2 -2
  5. package/dist/{chunk-JHEAUB3Z.mjs → chunk-X6ZF5WAX.mjs} +1 -1
  6. package/dist/{chunk-JHEAUB3Z.mjs.map → chunk-X6ZF5WAX.mjs.map} +1 -1
  7. package/dist/{chunk-O22KGHOQ.mjs → chunk-XIDLJSIH.mjs} +2 -2
  8. package/dist/chunk-XIDLJSIH.mjs.map +1 -0
  9. package/dist/hooks/index.js +88 -55
  10. package/dist/hooks/index.js.map +1 -1
  11. package/dist/hooks/index.mjs +4 -4
  12. package/dist/hooks/use-chat.js +88 -55
  13. package/dist/hooks/use-chat.js.map +1 -1
  14. package/dist/hooks/use-chat.mjs +1 -1
  15. package/dist/hooks/use-coagent-state-render.d.ts +2 -2
  16. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  17. package/dist/hooks/use-coagent-state-render.mjs +1 -1
  18. package/dist/hooks/use-coagent.js +88 -55
  19. package/dist/hooks/use-coagent.js.map +1 -1
  20. package/dist/hooks/use-coagent.mjs +3 -3
  21. package/dist/hooks/use-copilot-chat.js +88 -55
  22. package/dist/hooks/use-copilot-chat.js.map +1 -1
  23. package/dist/hooks/use-copilot-chat.mjs +2 -2
  24. package/dist/index.js +88 -55
  25. package/dist/index.js.map +1 -1
  26. package/dist/index.mjs +4 -4
  27. package/package.json +3 -3
  28. package/src/hooks/use-chat.ts +128 -77
  29. package/src/hooks/use-coagent-state-render.ts +2 -2
  30. package/src/hooks/use-coagent.ts +0 -1
  31. package/dist/chunk-EUIBVFV6.mjs.map +0 -1
  32. package/dist/chunk-O22KGHOQ.mjs.map +0 -1
  33. /package/dist/{chunk-XBVKTDXP.mjs.map → chunk-TNSI3FLW.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -1088,28 +1088,28 @@ function useChat(options) {
1088
1088
  setMessages([...previousMessages, ...newMessages]);
1089
1089
  const systemMessage = makeSystemMessageCallback();
1090
1090
  const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
1091
+ const filteredActions = actions.filter((action) => action.available !== import_runtime_client_gql4.ActionInputAvailability.Disabled || !action.disabled).map((action) => {
1092
+ let available = import_runtime_client_gql4.ActionInputAvailability.Enabled;
1093
+ if (action.disabled) {
1094
+ available = import_runtime_client_gql4.ActionInputAvailability.Disabled;
1095
+ } else if (action.available === "disabled") {
1096
+ available = import_runtime_client_gql4.ActionInputAvailability.Disabled;
1097
+ } else if (action.available === "remote") {
1098
+ available = import_runtime_client_gql4.ActionInputAvailability.Remote;
1099
+ }
1100
+ return {
1101
+ name: action.name,
1102
+ description: action.description || "",
1103
+ jsonSchema: JSON.stringify((0, import_shared5.actionParametersToJsonSchema)(action.parameters || [])),
1104
+ available
1105
+ };
1106
+ });
1107
+ const isAgentRun = agentSessionRef.current !== null;
1091
1108
  const stream = runtimeClient.asStream(
1092
1109
  runtimeClient.generateCopilotResponse({
1093
1110
  data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
1094
1111
  frontend: {
1095
- actions: actions.filter(
1096
- (action) => action.available !== import_runtime_client_gql4.ActionInputAvailability.Disabled || !action.disabled
1097
- ).map((action) => {
1098
- let available = import_runtime_client_gql4.ActionInputAvailability.Enabled;
1099
- if (action.disabled) {
1100
- available = import_runtime_client_gql4.ActionInputAvailability.Disabled;
1101
- } else if (action.available === "disabled") {
1102
- available = import_runtime_client_gql4.ActionInputAvailability.Disabled;
1103
- } else if (action.available === "remote") {
1104
- available = import_runtime_client_gql4.ActionInputAvailability.Remote;
1105
- }
1106
- return {
1107
- name: action.name,
1108
- description: action.description || "",
1109
- jsonSchema: JSON.stringify((0, import_shared5.actionParametersToJsonSchema)(action.parameters || [])),
1110
- available
1111
- };
1112
- }),
1112
+ actions: filteredActions,
1113
1113
  url: window.location.href
1114
1114
  },
1115
1115
  threadId: threadIdRef.current,
@@ -1142,9 +1142,10 @@ function useChat(options) {
1142
1142
  );
1143
1143
  const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
1144
1144
  const reader = stream.getReader();
1145
- let actionResults = {};
1146
1145
  let executedCoAgentStateRenders = [];
1147
1146
  let followUp = void 0;
1147
+ let messages2 = [];
1148
+ let syncedMessages = [];
1148
1149
  try {
1149
1150
  while (true) {
1150
1151
  let done, value;
@@ -1163,7 +1164,7 @@ function useChat(options) {
1163
1164
  }
1164
1165
  threadIdRef.current = value.generateCopilotResponse.threadId || null;
1165
1166
  runIdRef.current = value.generateCopilotResponse.runId || null;
1166
- const messages2 = (0, import_runtime_client_gql4.convertGqlOutputToMessages)(
1167
+ messages2 = (0, import_runtime_client_gql4.convertGqlOutputToMessages)(
1167
1168
  (0, import_runtime_client_gql4.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
1168
1169
  );
1169
1170
  if (messages2.length === 0) {
@@ -1177,39 +1178,11 @@ function useChat(options) {
1177
1178
  content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
1178
1179
  })
1179
1180
  ];
1181
+ setMessages([...previousMessages, ...newMessages]);
1182
+ break;
1180
1183
  } else {
1184
+ newMessages = [...messages2];
1181
1185
  for (const message of messages2) {
1182
- newMessages.push(message);
1183
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql4.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
1184
- if (!(message.id in actionResults)) {
1185
- if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
1186
- break;
1187
- }
1188
- try {
1189
- setMessages([...previousMessages, ...newMessages]);
1190
- const action = actions.find((action2) => action2.name === message.name);
1191
- if (action) {
1192
- followUp = action.followUp;
1193
- }
1194
- const result = yield onFunctionCall({
1195
- messages: previousMessages,
1196
- name: message.name,
1197
- args: message.arguments
1198
- });
1199
- actionResults[message.id] = result;
1200
- } catch (e) {
1201
- actionResults[message.id] = `Failed to execute action ${message.name}`;
1202
- console.error(`Failed to execute action ${message.name}: ${e}`);
1203
- }
1204
- }
1205
- newMessages.push(
1206
- new import_runtime_client_gql4.ResultMessage({
1207
- result: import_runtime_client_gql4.ResultMessage.encodeResult(actionResults[message.id]),
1208
- actionExecutionId: message.id,
1209
- actionName: message.name
1210
- })
1211
- );
1212
- }
1213
1186
  if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
1214
1187
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
1215
1188
  break;
@@ -1224,6 +1197,11 @@ function useChat(options) {
1224
1197
  }
1225
1198
  const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
1226
1199
  if (lastAgentStateMessage) {
1200
+ if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
1201
+ syncedMessages = (0, import_runtime_client_gql4.loadMessagesFromJsonRepresentation)(
1202
+ lastAgentStateMessage.state.messages
1203
+ );
1204
+ }
1227
1205
  setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
1228
1206
  [lastAgentStateMessage.agentName]: {
1229
1207
  name: lastAgentStateMessage.agentName,
@@ -1250,14 +1228,52 @@ function useChat(options) {
1250
1228
  setMessages([...previousMessages, ...newMessages]);
1251
1229
  }
1252
1230
  }
1231
+ const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
1232
+ let didExecuteAction = false;
1233
+ if (onFunctionCall) {
1234
+ const lastMessages = [];
1235
+ for (let i = finalMessages.length - 1; i >= 0; i--) {
1236
+ const message = finalMessages[i];
1237
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql4.MessageStatusCode.Pending) {
1238
+ lastMessages.unshift(message);
1239
+ } else {
1240
+ break;
1241
+ }
1242
+ }
1243
+ for (const message of lastMessages) {
1244
+ setMessages(finalMessages);
1245
+ const action = actions.find((action2) => action2.name === message.name);
1246
+ if (action) {
1247
+ followUp = action.followUp;
1248
+ const result = yield onFunctionCall({
1249
+ messages: finalMessages,
1250
+ name: message.name,
1251
+ args: message.arguments
1252
+ });
1253
+ didExecuteAction = true;
1254
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
1255
+ finalMessages.splice(
1256
+ messageIndex + 1,
1257
+ 0,
1258
+ new import_runtime_client_gql4.ResultMessage({
1259
+ id: "result-" + message.id,
1260
+ result: import_runtime_client_gql4.ResultMessage.encodeResult(result),
1261
+ actionExecutionId: message.id,
1262
+ actionName: message.name
1263
+ })
1264
+ );
1265
+ }
1266
+ }
1267
+ setMessages(finalMessages);
1268
+ }
1253
1269
  if (
1254
1270
  // if followUp is not explicitly false
1255
- followUp !== false && // if we have client side results
1256
- (Object.values(actionResults).length || // or the last message we received is a result
1257
- newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
1271
+ followUp !== false && // and we executed an action
1272
+ (didExecuteAction || // the last message is a server side result
1273
+ !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage())
1258
1274
  ) {
1259
1275
  yield new Promise((resolve) => setTimeout(resolve, 10));
1260
- return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
1276
+ return yield runChatCompletionRef.current(finalMessages);
1261
1277
  } else {
1262
1278
  return newMessages.slice();
1263
1279
  }
@@ -1300,6 +1316,23 @@ function useChat(options) {
1300
1316
  runChatCompletion: () => runChatCompletionRef.current(messages)
1301
1317
  };
1302
1318
  }
1319
+ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
1320
+ const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
1321
+ if (syncedMessages.length > 0) {
1322
+ const messagesWithAgentState = [...previousMessages, ...newMessages];
1323
+ let previousMessageId = void 0;
1324
+ for (const message of messagesWithAgentState) {
1325
+ if (message.isAgentStateMessage()) {
1326
+ const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
1327
+ if (index !== -1) {
1328
+ finalMessages.splice(index + 1, 0, message);
1329
+ }
1330
+ }
1331
+ previousMessageId = message.id;
1332
+ }
1333
+ }
1334
+ return finalMessages;
1335
+ }
1303
1336
 
1304
1337
  // src/hooks/use-copilot-chat.ts
1305
1338
  function useCopilotChat(_a = {}) {