@copilotkit/react-core 1.4.6 → 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 (34) hide show
  1. package/CHANGELOG.md +80 -6
  2. package/README.md +2 -0
  3. package/dist/{chunk-EUIBVFV6.mjs → chunk-EC5YZTSH.mjs} +91 -57
  4. package/dist/chunk-EC5YZTSH.mjs.map +1 -0
  5. package/dist/{chunk-XBVKTDXP.mjs → chunk-TNSI3FLW.mjs} +2 -2
  6. package/dist/{chunk-JHEAUB3Z.mjs → chunk-X6ZF5WAX.mjs} +1 -1
  7. package/dist/{chunk-JHEAUB3Z.mjs.map → chunk-X6ZF5WAX.mjs.map} +1 -1
  8. package/dist/{chunk-O22KGHOQ.mjs → chunk-XIDLJSIH.mjs} +2 -2
  9. package/dist/chunk-XIDLJSIH.mjs.map +1 -0
  10. package/dist/hooks/index.js +88 -55
  11. package/dist/hooks/index.js.map +1 -1
  12. package/dist/hooks/index.mjs +4 -4
  13. package/dist/hooks/use-chat.js +88 -55
  14. package/dist/hooks/use-chat.js.map +1 -1
  15. package/dist/hooks/use-chat.mjs +1 -1
  16. package/dist/hooks/use-coagent-state-render.d.ts +2 -2
  17. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  18. package/dist/hooks/use-coagent-state-render.mjs +1 -1
  19. package/dist/hooks/use-coagent.js +88 -55
  20. package/dist/hooks/use-coagent.js.map +1 -1
  21. package/dist/hooks/use-coagent.mjs +3 -3
  22. package/dist/hooks/use-copilot-chat.js +88 -55
  23. package/dist/hooks/use-copilot-chat.js.map +1 -1
  24. package/dist/hooks/use-copilot-chat.mjs +2 -2
  25. package/dist/index.js +88 -55
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +4 -4
  28. package/package.json +3 -3
  29. package/src/hooks/use-chat.ts +128 -77
  30. package/src/hooks/use-coagent-state-render.ts +2 -2
  31. package/src/hooks/use-coagent.ts +0 -1
  32. package/dist/chunk-EUIBVFV6.mjs.map +0 -1
  33. package/dist/chunk-O22KGHOQ.mjs.map +0 -1
  34. /package/dist/{chunk-XBVKTDXP.mjs.map → chunk-TNSI3FLW.mjs.map} +0 -0
@@ -245,28 +245,28 @@ function useChat(options) {
245
245
  setMessages([...previousMessages, ...newMessages]);
246
246
  const systemMessage = makeSystemMessageCallback();
247
247
  const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
248
+ const filteredActions = actions.filter((action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled).map((action) => {
249
+ let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
250
+ if (action.disabled) {
251
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
252
+ } else if (action.available === "disabled") {
253
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
254
+ } else if (action.available === "remote") {
255
+ available = import_runtime_client_gql2.ActionInputAvailability.Remote;
256
+ }
257
+ return {
258
+ name: action.name,
259
+ description: action.description || "",
260
+ jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
261
+ available
262
+ };
263
+ });
264
+ const isAgentRun = agentSessionRef.current !== null;
248
265
  const stream = runtimeClient.asStream(
249
266
  runtimeClient.generateCopilotResponse({
250
267
  data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
251
268
  frontend: {
252
- actions: actions.filter(
253
- (action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
254
- ).map((action) => {
255
- let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
256
- if (action.disabled) {
257
- available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
258
- } else if (action.available === "disabled") {
259
- available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
260
- } else if (action.available === "remote") {
261
- available = import_runtime_client_gql2.ActionInputAvailability.Remote;
262
- }
263
- return {
264
- name: action.name,
265
- description: action.description || "",
266
- jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
267
- available
268
- };
269
- }),
269
+ actions: filteredActions,
270
270
  url: window.location.href
271
271
  },
272
272
  threadId: threadIdRef.current,
@@ -299,9 +299,10 @@ function useChat(options) {
299
299
  );
300
300
  const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
301
301
  const reader = stream.getReader();
302
- let actionResults = {};
303
302
  let executedCoAgentStateRenders = [];
304
303
  let followUp = void 0;
304
+ let messages2 = [];
305
+ let syncedMessages = [];
305
306
  try {
306
307
  while (true) {
307
308
  let done, value;
@@ -320,7 +321,7 @@ function useChat(options) {
320
321
  }
321
322
  threadIdRef.current = value.generateCopilotResponse.threadId || null;
322
323
  runIdRef.current = value.generateCopilotResponse.runId || null;
323
- const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
324
+ messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
324
325
  (0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
325
326
  );
326
327
  if (messages2.length === 0) {
@@ -334,39 +335,11 @@ function useChat(options) {
334
335
  content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
335
336
  })
336
337
  ];
338
+ setMessages([...previousMessages, ...newMessages]);
339
+ break;
337
340
  } else {
341
+ newMessages = [...messages2];
338
342
  for (const message of messages2) {
339
- newMessages.push(message);
340
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
341
- if (!(message.id in actionResults)) {
342
- if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
343
- break;
344
- }
345
- try {
346
- setMessages([...previousMessages, ...newMessages]);
347
- const action = actions.find((action2) => action2.name === message.name);
348
- if (action) {
349
- followUp = action.followUp;
350
- }
351
- const result = yield onFunctionCall({
352
- messages: previousMessages,
353
- name: message.name,
354
- args: message.arguments
355
- });
356
- actionResults[message.id] = result;
357
- } catch (e) {
358
- actionResults[message.id] = `Failed to execute action ${message.name}`;
359
- console.error(`Failed to execute action ${message.name}: ${e}`);
360
- }
361
- }
362
- newMessages.push(
363
- new import_runtime_client_gql2.ResultMessage({
364
- result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
365
- actionExecutionId: message.id,
366
- actionName: message.name
367
- })
368
- );
369
- }
370
343
  if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
371
344
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
372
345
  break;
@@ -381,6 +354,11 @@ function useChat(options) {
381
354
  }
382
355
  const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
383
356
  if (lastAgentStateMessage) {
357
+ if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
358
+ syncedMessages = (0, import_runtime_client_gql2.loadMessagesFromJsonRepresentation)(
359
+ lastAgentStateMessage.state.messages
360
+ );
361
+ }
384
362
  setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
385
363
  [lastAgentStateMessage.agentName]: {
386
364
  name: lastAgentStateMessage.agentName,
@@ -407,14 +385,52 @@ function useChat(options) {
407
385
  setMessages([...previousMessages, ...newMessages]);
408
386
  }
409
387
  }
388
+ const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
389
+ let didExecuteAction = false;
390
+ if (onFunctionCall) {
391
+ const lastMessages = [];
392
+ for (let i = finalMessages.length - 1; i >= 0; i--) {
393
+ const message = finalMessages[i];
394
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending) {
395
+ lastMessages.unshift(message);
396
+ } else {
397
+ break;
398
+ }
399
+ }
400
+ for (const message of lastMessages) {
401
+ setMessages(finalMessages);
402
+ const action = actions.find((action2) => action2.name === message.name);
403
+ if (action) {
404
+ followUp = action.followUp;
405
+ const result = yield onFunctionCall({
406
+ messages: finalMessages,
407
+ name: message.name,
408
+ args: message.arguments
409
+ });
410
+ didExecuteAction = true;
411
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
412
+ finalMessages.splice(
413
+ messageIndex + 1,
414
+ 0,
415
+ new import_runtime_client_gql2.ResultMessage({
416
+ id: "result-" + message.id,
417
+ result: import_runtime_client_gql2.ResultMessage.encodeResult(result),
418
+ actionExecutionId: message.id,
419
+ actionName: message.name
420
+ })
421
+ );
422
+ }
423
+ }
424
+ setMessages(finalMessages);
425
+ }
410
426
  if (
411
427
  // if followUp is not explicitly false
412
- followUp !== false && // if we have client side results
413
- (Object.values(actionResults).length || // or the last message we received is a result
414
- newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
428
+ followUp !== false && // and we executed an action
429
+ (didExecuteAction || // the last message is a server side result
430
+ !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage())
415
431
  ) {
416
432
  yield new Promise((resolve) => setTimeout(resolve, 10));
417
- return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
433
+ return yield runChatCompletionRef.current(finalMessages);
418
434
  } else {
419
435
  return newMessages.slice();
420
436
  }
@@ -457,6 +473,23 @@ function useChat(options) {
457
473
  runChatCompletion: () => runChatCompletionRef.current(messages)
458
474
  };
459
475
  }
476
+ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
477
+ const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
478
+ if (syncedMessages.length > 0) {
479
+ const messagesWithAgentState = [...previousMessages, ...newMessages];
480
+ let previousMessageId = void 0;
481
+ for (const message of messagesWithAgentState) {
482
+ if (message.isAgentStateMessage()) {
483
+ const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
484
+ if (index !== -1) {
485
+ finalMessages.splice(index + 1, 0, message);
486
+ }
487
+ }
488
+ previousMessageId = message.id;
489
+ }
490
+ }
491
+ return finalMessages;
492
+ }
460
493
 
461
494
  // src/components/copilot-provider/copilotkit.tsx
462
495
  var import_react6 = require("react");