@copilotkit/react-core 1.4.8-coagents-v0-3.1 → 1.4.8-next.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 (102) hide show
  1. package/CHANGELOG.md +4 -5
  2. package/dist/{chunk-UOVONDR6.mjs → chunk-6AZIHHSX.mjs} +2 -2
  3. package/dist/{chunk-OT67R4NB.mjs → chunk-6CMAB4VV.mjs} +10 -7
  4. package/dist/chunk-6CMAB4VV.mjs.map +1 -0
  5. package/dist/{chunk-EC5YZTSH.mjs → chunk-FOPYVT6C.mjs} +59 -92
  6. package/dist/chunk-FOPYVT6C.mjs.map +1 -0
  7. package/dist/{chunk-TNSI3FLW.mjs → chunk-HBXWZT7F.mjs} +8 -6
  8. package/dist/chunk-HBXWZT7F.mjs.map +1 -0
  9. package/dist/{chunk-XQFVXX6R.mjs → chunk-LK52LEEB.mjs} +3 -2
  10. package/dist/chunk-LK52LEEB.mjs.map +1 -0
  11. package/dist/{chunk-DHGXL5PC.mjs → chunk-R5G2G5F2.mjs} +8 -6
  12. package/dist/chunk-R5G2G5F2.mjs.map +1 -0
  13. package/dist/{chunk-XIDLJSIH.mjs → chunk-RQQVEHNP.mjs} +3 -3
  14. package/dist/chunk-RQQVEHNP.mjs.map +1 -0
  15. package/dist/{chunk-Y7MI4PBB.mjs → chunk-WIBNPMZ7.mjs} +2 -2
  16. package/dist/{chunk-X6ZF5WAX.mjs → chunk-WUEMPEM7.mjs} +2 -2
  17. package/dist/{chunk-AG7FH7OD.mjs → chunk-Z657A5VX.mjs} +2 -2
  18. package/dist/components/copilot-provider/copilot-messages.d.ts +1 -0
  19. package/dist/components/copilot-provider/copilotkit-props.d.ts +5 -0
  20. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  21. package/dist/components/copilot-provider/copilotkit.d.ts +1 -0
  22. package/dist/components/copilot-provider/copilotkit.js +4 -2
  23. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  24. package/dist/components/copilot-provider/copilotkit.mjs +2 -2
  25. package/dist/components/copilot-provider/index.d.ts +1 -0
  26. package/dist/components/copilot-provider/index.js +4 -2
  27. package/dist/components/copilot-provider/index.js.map +1 -1
  28. package/dist/components/copilot-provider/index.mjs +2 -2
  29. package/dist/components/index.d.ts +1 -0
  30. package/dist/components/index.js +4 -2
  31. package/dist/components/index.js.map +1 -1
  32. package/dist/components/index.mjs +2 -2
  33. package/dist/context/copilot-context.d.ts +5 -1
  34. package/dist/context/copilot-context.js +2 -1
  35. package/dist/context/copilot-context.js.map +1 -1
  36. package/dist/context/copilot-context.mjs +1 -1
  37. package/dist/context/index.js +2 -1
  38. package/dist/context/index.js.map +1 -1
  39. package/dist/context/index.mjs +1 -1
  40. package/dist/hooks/index.js +63 -92
  41. package/dist/hooks/index.js.map +1 -1
  42. package/dist/hooks/index.mjs +16 -16
  43. package/dist/hooks/use-chat.d.ts +2 -1
  44. package/dist/hooks/use-chat.js +57 -89
  45. package/dist/hooks/use-chat.js.map +1 -1
  46. package/dist/hooks/use-chat.mjs +1 -1
  47. package/dist/hooks/use-coagent-state-render.js +2 -1
  48. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  49. package/dist/hooks/use-coagent-state-render.mjs +2 -2
  50. package/dist/hooks/use-coagent.js +63 -92
  51. package/dist/hooks/use-coagent.js.map +1 -1
  52. package/dist/hooks/use-coagent.mjs +6 -6
  53. package/dist/hooks/use-copilot-action.js +2 -1
  54. package/dist/hooks/use-copilot-action.js.map +1 -1
  55. package/dist/hooks/use-copilot-action.mjs +2 -2
  56. package/dist/hooks/use-copilot-chat.js +63 -92
  57. package/dist/hooks/use-copilot-chat.js.map +1 -1
  58. package/dist/hooks/use-copilot-chat.mjs +5 -5
  59. package/dist/hooks/use-copilot-readable.js +2 -1
  60. package/dist/hooks/use-copilot-readable.js.map +1 -1
  61. package/dist/hooks/use-copilot-readable.mjs +2 -2
  62. package/dist/hooks/use-make-copilot-document-readable.js +2 -1
  63. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  64. package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.js +74 -100
  67. package/dist/index.js.map +1 -1
  68. package/dist/index.mjs +17 -17
  69. package/dist/lib/copilot-task.d.ts +6 -1
  70. package/dist/lib/copilot-task.js +22 -4
  71. package/dist/lib/copilot-task.js.map +1 -1
  72. package/dist/lib/copilot-task.mjs +3 -3
  73. package/dist/lib/index.d.ts +1 -1
  74. package/dist/lib/index.js +22 -4
  75. package/dist/lib/index.js.map +1 -1
  76. package/dist/lib/index.mjs +3 -3
  77. package/dist/utils/extract.d.ts +3 -2
  78. package/dist/utils/extract.js +21 -3
  79. package/dist/utils/extract.js.map +1 -1
  80. package/dist/utils/extract.mjs +2 -2
  81. package/dist/utils/index.js +21 -3
  82. package/dist/utils/index.js.map +1 -1
  83. package/dist/utils/index.mjs +2 -2
  84. package/package.json +3 -3
  85. package/src/components/copilot-provider/copilotkit-props.tsx +6 -0
  86. package/src/components/copilot-provider/copilotkit.tsx +1 -0
  87. package/src/context/copilot-context.tsx +8 -1
  88. package/src/hooks/use-chat.ts +84 -128
  89. package/src/hooks/use-coagent.ts +1 -0
  90. package/src/hooks/use-copilot-chat.ts +2 -0
  91. package/src/lib/copilot-task.ts +10 -2
  92. package/src/utils/extract.ts +4 -0
  93. package/dist/chunk-DHGXL5PC.mjs.map +0 -1
  94. package/dist/chunk-EC5YZTSH.mjs.map +0 -1
  95. package/dist/chunk-OT67R4NB.mjs.map +0 -1
  96. package/dist/chunk-TNSI3FLW.mjs.map +0 -1
  97. package/dist/chunk-XIDLJSIH.mjs.map +0 -1
  98. package/dist/chunk-XQFVXX6R.mjs.map +0 -1
  99. /package/dist/{chunk-UOVONDR6.mjs.map → chunk-6AZIHHSX.mjs.map} +0 -0
  100. /package/dist/{chunk-Y7MI4PBB.mjs.map → chunk-WIBNPMZ7.mjs.map} +0 -0
  101. /package/dist/{chunk-X6ZF5WAX.mjs.map → chunk-WUEMPEM7.mjs.map} +0 -0
  102. /package/dist/{chunk-AG7FH7OD.mjs.map → chunk-Z657A5VX.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -157,7 +157,8 @@ var emptyCopilotContext = {
157
157
  },
158
158
  agentSession: null,
159
159
  setAgentSession: () => {
160
- }
160
+ },
161
+ forwardedParameters: {}
161
162
  };
162
163
  var CopilotContext = import_react.default.createContext(emptyCopilotContext);
163
164
  function useCopilotContext() {
@@ -648,7 +649,8 @@ function extract(_0) {
648
649
  data,
649
650
  abortSignal,
650
651
  stream,
651
- requestType = import_runtime_client_gql2.CopilotRequestType.Task
652
+ requestType = import_runtime_client_gql2.CopilotRequestType.Task,
653
+ forwardedParameters
652
654
  }) {
653
655
  var _a, _b;
654
656
  const { messages } = context;
@@ -695,10 +697,10 @@ function extract(_0) {
695
697
  metadata: {
696
698
  requestType
697
699
  },
698
- forwardedParameters: {
700
+ forwardedParameters: __spreadProps(__spreadValues({}, forwardedParameters != null ? forwardedParameters : {}), {
699
701
  toolChoice: "function",
700
702
  toolChoiceFunctionName: action.name
701
- }
703
+ })
702
704
  },
703
705
  properties: context.copilotApiConfig.properties,
704
706
  signal: abortSignal
@@ -1001,7 +1003,8 @@ ${nonDocumentStrings}`;
1001
1003
  setCoagentStatesWithRef,
1002
1004
  agentSession,
1003
1005
  setAgentSession,
1004
- runtimeClient
1006
+ runtimeClient,
1007
+ forwardedParameters: props.forwardedParameters || {}
1005
1008
  },
1006
1009
  children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CopilotMessages, { children })
1007
1010
  }
@@ -1088,28 +1091,28 @@ function useChat(options) {
1088
1091
  setMessages([...previousMessages, ...newMessages]);
1089
1092
  const systemMessage = makeSystemMessageCallback();
1090
1093
  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;
1108
1094
  const stream = runtimeClient.asStream(
1109
1095
  runtimeClient.generateCopilotResponse({
1110
1096
  data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
1111
1097
  frontend: {
1112
- actions: filteredActions,
1098
+ actions: actions.filter(
1099
+ (action) => action.available !== import_runtime_client_gql4.ActionInputAvailability.Disabled || !action.disabled
1100
+ ).map((action) => {
1101
+ let available = import_runtime_client_gql4.ActionInputAvailability.Enabled;
1102
+ if (action.disabled) {
1103
+ available = import_runtime_client_gql4.ActionInputAvailability.Disabled;
1104
+ } else if (action.available === "disabled") {
1105
+ available = import_runtime_client_gql4.ActionInputAvailability.Disabled;
1106
+ } else if (action.available === "remote") {
1107
+ available = import_runtime_client_gql4.ActionInputAvailability.Remote;
1108
+ }
1109
+ return {
1110
+ name: action.name,
1111
+ description: action.description || "",
1112
+ jsonSchema: JSON.stringify((0, import_shared5.actionParametersToJsonSchema)(action.parameters || [])),
1113
+ available
1114
+ };
1115
+ }),
1113
1116
  url: window.location.href
1114
1117
  },
1115
1118
  threadId: threadIdRef.current,
@@ -1134,7 +1137,8 @@ function useChat(options) {
1134
1137
  agentStates: Object.values(coagentStatesRef.current).map((state) => ({
1135
1138
  agentName: state.name,
1136
1139
  state: JSON.stringify(state.state)
1137
- }))
1140
+ })),
1141
+ forwardedParameters: options.forwardedParameters || {}
1138
1142
  }),
1139
1143
  properties: copilotConfig.properties,
1140
1144
  signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
@@ -1142,10 +1146,9 @@ function useChat(options) {
1142
1146
  );
1143
1147
  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
1148
  const reader = stream.getReader();
1149
+ let actionResults = {};
1145
1150
  let executedCoAgentStateRenders = [];
1146
1151
  let followUp = void 0;
1147
- let messages2 = [];
1148
- let syncedMessages = [];
1149
1152
  try {
1150
1153
  while (true) {
1151
1154
  let done, value;
@@ -1164,7 +1167,7 @@ function useChat(options) {
1164
1167
  }
1165
1168
  threadIdRef.current = value.generateCopilotResponse.threadId || null;
1166
1169
  runIdRef.current = value.generateCopilotResponse.runId || null;
1167
- messages2 = (0, import_runtime_client_gql4.convertGqlOutputToMessages)(
1170
+ const messages2 = (0, import_runtime_client_gql4.convertGqlOutputToMessages)(
1168
1171
  (0, import_runtime_client_gql4.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
1169
1172
  );
1170
1173
  if (messages2.length === 0) {
@@ -1178,11 +1181,39 @@ function useChat(options) {
1178
1181
  content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
1179
1182
  })
1180
1183
  ];
1181
- setMessages([...previousMessages, ...newMessages]);
1182
- break;
1183
1184
  } else {
1184
- newMessages = [...messages2];
1185
1185
  for (const message of messages2) {
1186
+ newMessages.push(message);
1187
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql4.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
1188
+ if (!(message.id in actionResults)) {
1189
+ if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
1190
+ break;
1191
+ }
1192
+ try {
1193
+ setMessages([...previousMessages, ...newMessages]);
1194
+ const action = actions.find((action2) => action2.name === message.name);
1195
+ if (action) {
1196
+ followUp = action.followUp;
1197
+ }
1198
+ const result = yield onFunctionCall({
1199
+ messages: previousMessages,
1200
+ name: message.name,
1201
+ args: message.arguments
1202
+ });
1203
+ actionResults[message.id] = result;
1204
+ } catch (e) {
1205
+ actionResults[message.id] = `Failed to execute action ${message.name}`;
1206
+ console.error(`Failed to execute action ${message.name}: ${e}`);
1207
+ }
1208
+ }
1209
+ newMessages.push(
1210
+ new import_runtime_client_gql4.ResultMessage({
1211
+ result: import_runtime_client_gql4.ResultMessage.encodeResult(actionResults[message.id]),
1212
+ actionExecutionId: message.id,
1213
+ actionName: message.name
1214
+ })
1215
+ );
1216
+ }
1186
1217
  if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
1187
1218
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
1188
1219
  break;
@@ -1197,11 +1228,6 @@ function useChat(options) {
1197
1228
  }
1198
1229
  const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
1199
1230
  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
- }
1205
1231
  setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
1206
1232
  [lastAgentStateMessage.agentName]: {
1207
1233
  name: lastAgentStateMessage.agentName,
@@ -1228,52 +1254,14 @@ function useChat(options) {
1228
1254
  setMessages([...previousMessages, ...newMessages]);
1229
1255
  }
1230
1256
  }
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
- }
1269
1257
  if (
1270
1258
  // if followUp is not explicitly false
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())
1259
+ followUp !== false && // if we have client side results
1260
+ (Object.values(actionResults).length || // or the last message we received is a result
1261
+ newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
1274
1262
  ) {
1275
1263
  yield new Promise((resolve) => setTimeout(resolve, 10));
1276
- return yield runChatCompletionRef.current(finalMessages);
1264
+ return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
1277
1265
  } else {
1278
1266
  return newMessages.slice();
1279
1267
  }
@@ -1316,23 +1304,6 @@ function useChat(options) {
1316
1304
  runChatCompletion: () => runChatCompletionRef.current(messages)
1317
1305
  };
1318
1306
  }
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
- }
1336
1307
 
1337
1308
  // src/hooks/use-copilot-chat.ts
1338
1309
  function useCopilotChat(_a = {}) {
@@ -1353,7 +1324,8 @@ function useCopilotChat(_a = {}) {
1353
1324
  setCoagentStatesWithRef,
1354
1325
  coAgentStateRenders,
1355
1326
  agentSession,
1356
- setAgentSession
1327
+ setAgentSession,
1328
+ forwardedParameters
1357
1329
  } = useCopilotContext();
1358
1330
  const { messages, setMessages } = useCopilotMessagesContext();
1359
1331
  const latestGetContextString = useUpdatedRef(getContextString);
@@ -1403,7 +1375,8 @@ function useCopilotChat(_a = {}) {
1403
1375
  coagentStatesRef,
1404
1376
  setCoagentStatesWithRef,
1405
1377
  agentSession,
1406
- setAgentSession
1378
+ setAgentSession,
1379
+ forwardedParameters
1407
1380
  }));
1408
1381
  const latestAppend = useUpdatedRef(append);
1409
1382
  const latestAppendFunc = (0, import_react10.useCallback)(
@@ -1753,6 +1726,7 @@ var CopilotTask = class {
1753
1726
  this.actions = config.actions || [];
1754
1727
  this.includeCopilotReadable = config.includeCopilotReadable !== false;
1755
1728
  this.includeCopilotActions = config.includeCopilotActions !== false;
1729
+ this.forwardedParameters = config.forwardedParameters;
1756
1730
  }
1757
1731
  /**
1758
1732
  * Run the task.
@@ -1761,7 +1735,7 @@ var CopilotTask = class {
1761
1735
  */
1762
1736
  run(context, data) {
1763
1737
  return __async(this, null, function* () {
1764
- var _a, _b;
1738
+ var _a, _b, _c;
1765
1739
  const actions = this.includeCopilotActions ? Object.assign({}, context.actions) : {};
1766
1740
  for (const fn of this.actions) {
1767
1741
  actions[fn.name] = fn;
@@ -1798,15 +1772,15 @@ var CopilotTask = class {
1798
1772
  metadata: {
1799
1773
  requestType: import_runtime_client_gql6.CopilotRequestType.Task
1800
1774
  },
1801
- forwardedParameters: {
1775
+ forwardedParameters: __spreadProps(__spreadValues({}, (_a = this.forwardedParameters) != null ? _a : {}), {
1802
1776
  toolChoice: "required"
1803
- }
1777
+ })
1804
1778
  },
1805
1779
  properties: context.copilotApiConfig.properties
1806
1780
  }).toPromise();
1807
1781
  const functionCallHandler = context.getFunctionCallHandler(actions);
1808
1782
  const functionCalls = (0, import_runtime_client_gql6.convertGqlOutputToMessages)(
1809
- ((_b = (_a = response.data) == null ? void 0 : _a.generateCopilotResponse) == null ? void 0 : _b.messages) || []
1783
+ ((_c = (_b = response.data) == null ? void 0 : _b.generateCopilotResponse) == null ? void 0 : _c.messages) || []
1810
1784
  ).filter((m) => m.isActionExecutionMessage());
1811
1785
  for (const functionCall of functionCalls) {
1812
1786
  yield functionCallHandler({