@copilotkit/react-core 1.4.8-no-pino-redact.1 → 1.4.8

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 (95) hide show
  1. package/CHANGELOG.md +8 -3
  2. package/dist/{chunk-XBVKTDXP.mjs → chunk-6EMLM6WX.mjs} +17 -14
  3. package/dist/chunk-6EMLM6WX.mjs.map +1 -0
  4. package/dist/{chunk-ODN4H66E.mjs → chunk-7LRDVJH5.mjs} +6 -2
  5. package/dist/chunk-7LRDVJH5.mjs.map +1 -0
  6. package/dist/{chunk-O22KGHOQ.mjs → chunk-FSC4A3JN.mjs} +17 -13
  7. package/dist/chunk-FSC4A3JN.mjs.map +1 -0
  8. package/dist/{chunk-OT67R4NB.mjs → chunk-IFTHM7LF.mjs} +2 -2
  9. package/dist/{chunk-DHGXL5PC.mjs → chunk-IVYL7JRC.mjs} +7 -4
  10. package/dist/chunk-IVYL7JRC.mjs.map +1 -0
  11. package/dist/chunk-NTLCOVE5.mjs +321 -0
  12. package/dist/chunk-NTLCOVE5.mjs.map +1 -0
  13. package/dist/chunk-QCUP6HLK.mjs +37 -0
  14. package/dist/chunk-QCUP6HLK.mjs.map +1 -0
  15. package/dist/{chunk-2KCEHGSI.mjs → chunk-SFPANIOY.mjs} +99 -49
  16. package/dist/chunk-SFPANIOY.mjs.map +1 -0
  17. package/dist/{chunk-JHEAUB3Z.mjs → chunk-X6ZF5WAX.mjs} +1 -1
  18. package/dist/{chunk-JHEAUB3Z.mjs.map → chunk-X6ZF5WAX.mjs.map} +1 -1
  19. package/dist/{chunk-Y7MI4PBB.mjs → chunk-YUY5ZAST.mjs} +6 -3
  20. package/dist/chunk-YUY5ZAST.mjs.map +1 -0
  21. package/dist/components/copilot-provider/copilotkit.js +156 -91
  22. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  23. package/dist/components/copilot-provider/copilotkit.mjs +4 -3
  24. package/dist/components/copilot-provider/index.js +156 -91
  25. package/dist/components/copilot-provider/index.js.map +1 -1
  26. package/dist/components/copilot-provider/index.mjs +4 -3
  27. package/dist/components/error-boundary/error-boundary.d.ts +22 -0
  28. package/dist/components/error-boundary/error-boundary.js +183 -0
  29. package/dist/components/error-boundary/error-boundary.js.map +1 -0
  30. package/dist/components/error-boundary/error-boundary.mjs +12 -0
  31. package/dist/components/error-boundary/error-boundary.mjs.map +1 -0
  32. package/dist/components/error-boundary/error-utils.d.ts +11 -0
  33. package/dist/components/error-boundary/error-utils.js +177 -0
  34. package/dist/components/error-boundary/error-utils.js.map +1 -0
  35. package/dist/components/error-boundary/error-utils.mjs +13 -0
  36. package/dist/components/error-boundary/error-utils.mjs.map +1 -0
  37. package/dist/components/index.js +156 -91
  38. package/dist/components/index.js.map +1 -1
  39. package/dist/components/index.mjs +4 -3
  40. package/dist/components/toast/toast-provider.d.ts +2 -1
  41. package/dist/components/toast/toast-provider.js +76 -62
  42. package/dist/components/toast/toast-provider.js.map +1 -1
  43. package/dist/components/toast/toast-provider.mjs +1 -1
  44. package/dist/hooks/index.js +398 -253
  45. package/dist/hooks/index.js.map +1 -1
  46. package/dist/hooks/index.mjs +9 -8
  47. package/dist/hooks/use-chat.js +343 -199
  48. package/dist/hooks/use-chat.js.map +1 -1
  49. package/dist/hooks/use-chat.mjs +3 -3
  50. package/dist/hooks/use-coagent-state-render.d.ts +2 -2
  51. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  52. package/dist/hooks/use-coagent-state-render.mjs +1 -1
  53. package/dist/hooks/use-coagent.js +378 -233
  54. package/dist/hooks/use-coagent.js.map +1 -1
  55. package/dist/hooks/use-coagent.mjs +7 -6
  56. package/dist/hooks/use-copilot-action.js +132 -7
  57. package/dist/hooks/use-copilot-action.js.map +1 -1
  58. package/dist/hooks/use-copilot-action.mjs +3 -1
  59. package/dist/hooks/use-copilot-chat.js +367 -223
  60. package/dist/hooks/use-copilot-chat.js.map +1 -1
  61. package/dist/hooks/use-copilot-chat.mjs +6 -5
  62. package/dist/hooks/use-copilot-runtime-client.js +110 -4
  63. package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
  64. package/dist/hooks/use-copilot-runtime-client.mjs +2 -2
  65. package/dist/index.js +439 -335
  66. package/dist/index.js.map +1 -1
  67. package/dist/index.mjs +10 -9
  68. package/dist/lib/copilot-task.js.map +1 -1
  69. package/dist/lib/copilot-task.mjs +5 -4
  70. package/dist/lib/index.js.map +1 -1
  71. package/dist/lib/index.mjs +5 -4
  72. package/dist/utils/extract.js.map +1 -1
  73. package/dist/utils/extract.mjs +4 -3
  74. package/dist/utils/index.js.map +1 -1
  75. package/dist/utils/index.mjs +4 -3
  76. package/package.json +3 -3
  77. package/src/components/copilot-provider/copilotkit.tsx +4 -1
  78. package/src/components/error-boundary/error-boundary.tsx +42 -0
  79. package/src/components/error-boundary/error-utils.tsx +95 -0
  80. package/src/components/toast/toast-provider.tsx +10 -49
  81. package/src/hooks/use-chat.ts +286 -259
  82. package/src/hooks/use-coagent-state-render.ts +2 -2
  83. package/src/hooks/use-coagent.ts +14 -11
  84. package/src/hooks/use-copilot-action.ts +3 -2
  85. package/src/hooks/use-copilot-chat.ts +9 -8
  86. package/src/hooks/use-copilot-runtime-client.ts +4 -0
  87. package/dist/chunk-2KCEHGSI.mjs.map +0 -1
  88. package/dist/chunk-DHGXL5PC.mjs.map +0 -1
  89. package/dist/chunk-EUIBVFV6.mjs +0 -294
  90. package/dist/chunk-EUIBVFV6.mjs.map +0 -1
  91. package/dist/chunk-O22KGHOQ.mjs.map +0 -1
  92. package/dist/chunk-ODN4H66E.mjs.map +0 -1
  93. package/dist/chunk-XBVKTDXP.mjs.map +0 -1
  94. package/dist/chunk-Y7MI4PBB.mjs.map +0 -1
  95. /package/dist/{chunk-OT67R4NB.mjs.map → chunk-IFTHM7LF.mjs.map} +0 -0
@@ -83,7 +83,7 @@ __export(use_copilot_chat_exports, {
83
83
  useCopilotChat: () => useCopilotChat
84
84
  });
85
85
  module.exports = __toCommonJS(use_copilot_chat_exports);
86
- var import_react7 = require("react");
86
+ var import_react8 = require("react");
87
87
 
88
88
  // src/context/copilot-context.tsx
89
89
  var import_react = __toESM(require("react"));
@@ -158,16 +158,131 @@ function returnAndThrowInDebug(value) {
158
158
  var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
159
159
 
160
160
  // src/hooks/use-chat.ts
161
- var import_react4 = require("react");
161
+ var import_react5 = require("react");
162
162
  var import_shared = require("@copilotkit/shared");
163
163
  var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
164
164
 
165
165
  // src/components/toast/toast-provider.tsx
166
+ var import_react3 = require("react");
167
+
168
+ // src/components/error-boundary/error-utils.tsx
166
169
  var import_react2 = require("react");
170
+
171
+ // src/components/toast/exclamation-mark-icon.tsx
167
172
  var import_jsx_runtime = require("react/jsx-runtime");
168
- var ToastContext = (0, import_react2.createContext)(void 0);
173
+ var ExclamationMarkIcon = ({
174
+ className,
175
+ style
176
+ }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
177
+ "svg",
178
+ {
179
+ xmlns: "http://www.w3.org/2000/svg",
180
+ width: "24",
181
+ height: "24",
182
+ viewBox: "0 0 24 24",
183
+ fill: "none",
184
+ stroke: "currentColor",
185
+ strokeWidth: "2",
186
+ strokeLinecap: "round",
187
+ strokeLinejoin: "round",
188
+ className: `lucide lucide-circle-alert ${className ? className : ""}`,
189
+ style,
190
+ children: [
191
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
192
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
193
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
194
+ ]
195
+ }
196
+ );
197
+
198
+ // src/components/error-boundary/error-utils.tsx
199
+ var import_jsx_runtime2 = require("react/jsx-runtime");
200
+ function ErrorToast({ errors }) {
201
+ const errorsToRender = errors.map((error, idx) => {
202
+ var _a, _b, _c;
203
+ const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
204
+ const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
205
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
206
+ "div",
207
+ {
208
+ style: {
209
+ marginTop: idx === 0 ? 0 : 10,
210
+ marginBottom: 14
211
+ },
212
+ children: [
213
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
214
+ code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
215
+ "div",
216
+ {
217
+ style: {
218
+ fontWeight: "600",
219
+ marginBottom: 4
220
+ },
221
+ children: [
222
+ "Copilot Cloud Error:",
223
+ " ",
224
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
225
+ ]
226
+ }
227
+ ),
228
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
229
+ ]
230
+ },
231
+ idx
232
+ );
233
+ });
234
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
235
+ "div",
236
+ {
237
+ style: {
238
+ fontSize: "13px",
239
+ maxWidth: "600px"
240
+ },
241
+ children: [
242
+ errorsToRender,
243
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
244
+ ]
245
+ }
246
+ );
247
+ }
248
+ function useErrorToast() {
249
+ const { addToast } = useToast();
250
+ return (0, import_react2.useCallback)(
251
+ (error) => {
252
+ const errorId = error.map((err) => {
253
+ var _a, _b;
254
+ const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
255
+ const stack = err.stack || "";
256
+ return btoa(message + stack).slice(0, 32);
257
+ }).join("|");
258
+ addToast({
259
+ type: "error",
260
+ id: errorId,
261
+ // Toast libraries typically dedupe by id
262
+ message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
263
+ });
264
+ },
265
+ [addToast]
266
+ );
267
+ }
268
+ function useAsyncCallback(callback, deps) {
269
+ const addErrorToast = useErrorToast();
270
+ return (0, import_react2.useCallback)((...args) => __async(this, null, function* () {
271
+ try {
272
+ return yield callback(...args);
273
+ } catch (error) {
274
+ console.error("Error in async callback:", error);
275
+ addErrorToast([error]);
276
+ throw error;
277
+ }
278
+ }), deps);
279
+ }
280
+
281
+ // src/components/toast/toast-provider.tsx
282
+ var import_jsx_runtime3 = require("react/jsx-runtime");
283
+ var ToastContext = (0, import_react3.createContext)(void 0);
169
284
  function useToast() {
170
- const context = (0, import_react2.useContext)(ToastContext);
285
+ const context = (0, import_react3.useContext)(ToastContext);
171
286
  if (!context) {
172
287
  throw new Error("useToast must be used within a ToastProvider");
173
288
  }
@@ -176,14 +291,17 @@ function useToast() {
176
291
 
177
292
  // src/hooks/use-copilot-runtime-client.ts
178
293
  var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
179
- var import_react3 = require("react");
294
+ var import_react4 = require("react");
180
295
  var useCopilotRuntimeClient = (options) => {
181
296
  const { addGraphQLErrorsToast } = useToast();
182
- const runtimeClient = (0, import_react3.useMemo)(() => {
297
+ const addErrorToast = useErrorToast();
298
+ const runtimeClient = (0, import_react4.useMemo)(() => {
183
299
  return new import_runtime_client_gql.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
184
300
  handleGQLErrors: (error) => {
185
301
  if (error.graphQLErrors.length) {
186
302
  addGraphQLErrorsToast(error.graphQLErrors);
303
+ } else {
304
+ addErrorToast([error]);
187
305
  }
188
306
  }
189
307
  }));
@@ -209,12 +327,12 @@ function useChat(options) {
209
327
  agentSession,
210
328
  setAgentSession
211
329
  } = options;
212
- const abortControllerRef = (0, import_react4.useRef)();
213
- const threadIdRef = (0, import_react4.useRef)(null);
214
- const runIdRef = (0, import_react4.useRef)(null);
330
+ const abortControllerRef = (0, import_react5.useRef)();
331
+ const threadIdRef = (0, import_react5.useRef)(null);
332
+ const runIdRef = (0, import_react5.useRef)(null);
215
333
  const { addGraphQLErrorsToast } = useToast();
216
- const runChatCompletionRef = (0, import_react4.useRef)();
217
- const agentSessionRef = (0, import_react4.useRef)(agentSession);
334
+ const runChatCompletionRef = (0, import_react5.useRef)();
335
+ const agentSessionRef = (0, import_react5.useRef)(agentSession);
218
336
  agentSessionRef.current = agentSession;
219
337
  const publicApiKey = copilotConfig.publicApiKey;
220
338
  const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
@@ -224,210 +342,236 @@ function useChat(options) {
224
342
  headers,
225
343
  credentials: copilotConfig.credentials
226
344
  });
227
- const runChatCompletion = (previousMessages) => __async(this, null, function* () {
228
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
229
- setIsLoading(true);
230
- let newMessages = [
231
- new import_runtime_client_gql2.TextMessage({
232
- content: "",
233
- role: import_runtime_client_gql2.Role.Assistant
234
- })
235
- ];
236
- const abortController = new AbortController();
237
- abortControllerRef.current = abortController;
238
- setMessages([...previousMessages, ...newMessages]);
239
- const systemMessage = makeSystemMessageCallback();
240
- const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
241
- const stream = runtimeClient.asStream(
242
- runtimeClient.generateCopilotResponse({
243
- data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
244
- frontend: {
245
- actions: actions.filter(
246
- (action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
247
- ).map((action) => {
248
- let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
249
- if (action.disabled) {
250
- available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
251
- } else if (action.available === "disabled") {
252
- available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
253
- } else if (action.available === "remote") {
254
- available = import_runtime_client_gql2.ActionInputAvailability.Remote;
255
- }
256
- return {
257
- name: action.name,
258
- description: action.description || "",
259
- jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
260
- available
261
- };
262
- }),
263
- url: window.location.href
264
- },
265
- threadId: threadIdRef.current,
266
- runId: runIdRef.current,
267
- messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
268
- }, copilotConfig.cloud ? {
269
- cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
270
- guardrails: {
271
- inputValidationRules: {
272
- allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
273
- denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
345
+ const runChatCompletion = useAsyncCallback(
346
+ (previousMessages) => __async(this, null, function* () {
347
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
348
+ setIsLoading(true);
349
+ let newMessages = [
350
+ new import_runtime_client_gql2.TextMessage({
351
+ content: "",
352
+ role: import_runtime_client_gql2.Role.Assistant
353
+ })
354
+ ];
355
+ const abortController = new AbortController();
356
+ abortControllerRef.current = abortController;
357
+ setMessages([...previousMessages, ...newMessages]);
358
+ const systemMessage = makeSystemMessageCallback();
359
+ const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
360
+ const stream = runtimeClient.asStream(
361
+ runtimeClient.generateCopilotResponse({
362
+ data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
363
+ frontend: {
364
+ actions: actions.filter(
365
+ (action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
366
+ ).map((action) => {
367
+ let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
368
+ if (action.disabled) {
369
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
370
+ } else if (action.available === "disabled") {
371
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
372
+ } else if (action.available === "remote") {
373
+ available = import_runtime_client_gql2.ActionInputAvailability.Remote;
374
+ }
375
+ return {
376
+ name: action.name,
377
+ description: action.description || "",
378
+ jsonSchema: JSON.stringify(
379
+ (0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
380
+ ),
381
+ available
382
+ };
383
+ }),
384
+ url: window.location.href
385
+ },
386
+ threadId: threadIdRef.current,
387
+ runId: runIdRef.current,
388
+ messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
389
+ }, copilotConfig.cloud ? {
390
+ cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
391
+ guardrails: {
392
+ inputValidationRules: {
393
+ allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
394
+ denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
395
+ }
274
396
  }
397
+ } : {})
398
+ } : {}), {
399
+ metadata: {
400
+ requestType: import_runtime_client_gql2.CopilotRequestType.Chat
275
401
  }
276
- } : {})
277
- } : {}), {
278
- metadata: {
279
- requestType: import_runtime_client_gql2.CopilotRequestType.Chat
402
+ }), agentSessionRef.current ? {
403
+ agentSession: agentSessionRef.current
404
+ } : {}), {
405
+ agentStates: Object.values(coagentStatesRef.current).map((state) => ({
406
+ agentName: state.name,
407
+ state: JSON.stringify(state.state)
408
+ }))
409
+ }),
410
+ properties: copilotConfig.properties,
411
+ signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
412
+ })
413
+ );
414
+ const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
415
+ const reader = stream.getReader();
416
+ let actionResults = {};
417
+ let executedCoAgentStateRenders = [];
418
+ let followUp = void 0;
419
+ try {
420
+ while (true) {
421
+ let done, value;
422
+ try {
423
+ const readResult = yield reader.read();
424
+ done = readResult.done;
425
+ value = readResult.value;
426
+ } catch (readError) {
427
+ break;
280
428
  }
281
- }), agentSessionRef.current ? {
282
- agentSession: agentSessionRef.current
283
- } : {}), {
284
- agentStates: Object.values(coagentStatesRef.current).map((state) => ({
285
- agentName: state.name,
286
- state: JSON.stringify(state.state)
287
- }))
288
- }),
289
- properties: copilotConfig.properties,
290
- signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
291
- })
292
- );
293
- const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
294
- const reader = stream.getReader();
295
- let actionResults = {};
296
- let executedCoAgentStateRenders = [];
297
- let followUp = void 0;
298
- try {
299
- while (true) {
300
- let done, value;
301
- try {
302
- const readResult = yield reader.read();
303
- done = readResult.done;
304
- value = readResult.value;
305
- } catch (readError) {
306
- break;
307
- }
308
- if (done) {
309
- break;
310
- }
311
- if (!(value == null ? void 0 : value.generateCopilotResponse)) {
312
- continue;
313
- }
314
- threadIdRef.current = value.generateCopilotResponse.threadId || null;
315
- runIdRef.current = value.generateCopilotResponse.runId || null;
316
- const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
317
- (0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
318
- );
319
- if (messages2.length === 0) {
320
- continue;
321
- }
322
- newMessages = [];
323
- if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
324
- newMessages = [
325
- new import_runtime_client_gql2.TextMessage({
326
- role: import_runtime_client_gql2.MessageRole.Assistant,
327
- content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
328
- })
329
- ];
330
- } else {
331
- for (const message of messages2) {
332
- newMessages.push(message);
333
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
334
- if (!(message.id in actionResults)) {
429
+ if (done) {
430
+ break;
431
+ }
432
+ if (!(value == null ? void 0 : value.generateCopilotResponse)) {
433
+ continue;
434
+ }
435
+ threadIdRef.current = value.generateCopilotResponse.threadId || null;
436
+ runIdRef.current = value.generateCopilotResponse.runId || null;
437
+ const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
438
+ (0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
439
+ );
440
+ if (messages2.length === 0) {
441
+ continue;
442
+ }
443
+ newMessages = [];
444
+ if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
445
+ newMessages = [
446
+ new import_runtime_client_gql2.TextMessage({
447
+ role: import_runtime_client_gql2.MessageRole.Assistant,
448
+ content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
449
+ })
450
+ ];
451
+ } else {
452
+ for (const message of messages2) {
453
+ newMessages.push(message);
454
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
455
+ if (!(message.id in actionResults)) {
456
+ if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
457
+ break;
458
+ }
459
+ try {
460
+ setMessages([...previousMessages, ...newMessages]);
461
+ const action = actions.find((action2) => action2.name === message.name);
462
+ if (action) {
463
+ followUp = action.followUp;
464
+ }
465
+ const result = yield onFunctionCall({
466
+ messages: previousMessages,
467
+ name: message.name,
468
+ args: message.arguments
469
+ });
470
+ actionResults[message.id] = result;
471
+ } catch (e) {
472
+ actionResults[message.id] = `Failed to execute action ${message.name}`;
473
+ console.error(`Failed to execute action ${message.name}: ${e}`);
474
+ }
475
+ }
476
+ newMessages.push(
477
+ new import_runtime_client_gql2.ResultMessage({
478
+ result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
479
+ actionExecutionId: message.id,
480
+ actionName: message.name
481
+ })
482
+ );
483
+ }
484
+ if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
335
485
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
336
486
  break;
337
487
  }
338
- try {
339
- setMessages([...previousMessages, ...newMessages]);
340
- const action = actions.find((action2) => action2.name === message.name);
341
- if (action) {
342
- followUp = action.followUp;
343
- }
344
- const result = yield onFunctionCall({
345
- messages: previousMessages,
346
- name: message.name,
347
- args: message.arguments
348
- });
349
- actionResults[message.id] = result;
350
- } catch (e) {
351
- actionResults[message.id] = `Failed to execute action ${message.name}`;
352
- console.error(`Failed to execute action ${message.name}: ${e}`);
353
- }
488
+ yield onCoAgentStateRender({
489
+ name: message.agentName,
490
+ nodeName: message.nodeName,
491
+ state: message.state
492
+ });
493
+ executedCoAgentStateRenders.push(message.id);
354
494
  }
355
- newMessages.push(
356
- new import_runtime_client_gql2.ResultMessage({
357
- result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
358
- actionExecutionId: message.id,
359
- actionName: message.name
360
- })
361
- );
362
495
  }
363
- if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
364
- if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
365
- break;
496
+ const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
497
+ if (lastAgentStateMessage) {
498
+ setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
499
+ [lastAgentStateMessage.agentName]: {
500
+ name: lastAgentStateMessage.agentName,
501
+ state: lastAgentStateMessage.state,
502
+ running: lastAgentStateMessage.running,
503
+ active: lastAgentStateMessage.active,
504
+ threadId: lastAgentStateMessage.threadId,
505
+ nodeName: lastAgentStateMessage.nodeName,
506
+ runId: lastAgentStateMessage.runId
507
+ }
508
+ }));
509
+ if (lastAgentStateMessage.running) {
510
+ setAgentSession({
511
+ threadId: lastAgentStateMessage.threadId,
512
+ agentName: lastAgentStateMessage.agentName,
513
+ nodeName: lastAgentStateMessage.nodeName
514
+ });
515
+ } else {
516
+ setAgentSession(null);
366
517
  }
367
- yield onCoAgentStateRender({
368
- name: message.agentName,
369
- nodeName: message.nodeName,
370
- state: message.state
371
- });
372
- executedCoAgentStateRenders.push(message.id);
373
518
  }
374
519
  }
375
- const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
376
- if (lastAgentStateMessage) {
377
- setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
378
- [lastAgentStateMessage.agentName]: {
379
- name: lastAgentStateMessage.agentName,
380
- state: lastAgentStateMessage.state,
381
- running: lastAgentStateMessage.running,
382
- active: lastAgentStateMessage.active,
383
- threadId: lastAgentStateMessage.threadId,
384
- nodeName: lastAgentStateMessage.nodeName,
385
- runId: lastAgentStateMessage.runId
386
- }
387
- }));
388
- if (lastAgentStateMessage.running) {
389
- setAgentSession({
390
- threadId: lastAgentStateMessage.threadId,
391
- agentName: lastAgentStateMessage.agentName,
392
- nodeName: lastAgentStateMessage.nodeName
393
- });
394
- } else {
395
- setAgentSession(null);
396
- }
520
+ if (newMessages.length > 0) {
521
+ setMessages([...previousMessages, ...newMessages]);
397
522
  }
398
523
  }
399
- if (newMessages.length > 0) {
400
- setMessages([...previousMessages, ...newMessages]);
524
+ if (
525
+ // if followUp is not explicitly false
526
+ followUp !== false && // if we have client side results
527
+ (Object.values(actionResults).length || // or the last message we received is a result
528
+ newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
529
+ ) {
530
+ yield new Promise((resolve) => setTimeout(resolve, 10));
531
+ return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
532
+ } else {
533
+ return newMessages.slice();
401
534
  }
535
+ } finally {
536
+ setIsLoading(false);
402
537
  }
403
- if (
404
- // if followUp is not explicitly false
405
- followUp !== false && // if we have client side results
406
- (Object.values(actionResults).length || // or the last message we received is a result
407
- newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
408
- ) {
409
- yield new Promise((resolve) => setTimeout(resolve, 10));
410
- return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
411
- } else {
412
- return newMessages.slice();
413
- }
414
- } finally {
415
- setIsLoading(false);
416
- }
417
- });
538
+ }),
539
+ [
540
+ messages,
541
+ setMessages,
542
+ makeSystemMessageCallback,
543
+ copilotConfig,
544
+ setIsLoading,
545
+ initialMessages,
546
+ isLoading,
547
+ actions,
548
+ onFunctionCall,
549
+ onCoAgentStateRender,
550
+ setCoagentStatesWithRef,
551
+ coagentStatesRef,
552
+ agentSession,
553
+ setAgentSession
554
+ ]
555
+ );
418
556
  runChatCompletionRef.current = runChatCompletion;
419
- const runChatCompletionAndHandleFunctionCall = (messages2) => __async(this, null, function* () {
420
- yield runChatCompletionRef.current(messages2);
421
- });
422
- const append = (message) => __async(this, null, function* () {
423
- if (isLoading) {
424
- return;
425
- }
426
- const newMessages = [...messages, message];
427
- setMessages(newMessages);
428
- return runChatCompletionAndHandleFunctionCall(newMessages);
429
- });
430
- const reload = () => __async(this, null, function* () {
557
+ const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
558
+ (messages2) => __async(this, null, function* () {
559
+ yield runChatCompletionRef.current(messages2);
560
+ }),
561
+ [messages]
562
+ );
563
+ const append = useAsyncCallback(
564
+ (message) => __async(this, null, function* () {
565
+ if (isLoading) {
566
+ return;
567
+ }
568
+ const newMessages = [...messages, message];
569
+ setMessages(newMessages);
570
+ return runChatCompletionAndHandleFunctionCall(newMessages);
571
+ }),
572
+ [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
573
+ );
574
+ const reload = useAsyncCallback(() => __async(this, null, function* () {
431
575
  if (isLoading || messages.length === 0) {
432
576
  return;
433
577
  }
@@ -438,7 +582,7 @@ function useChat(options) {
438
582
  }
439
583
  setMessages(newMessages);
440
584
  return runChatCompletionAndHandleFunctionCall(newMessages);
441
- });
585
+ }), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
442
586
  const stop = () => {
443
587
  var _a;
444
588
  (_a = abortControllerRef.current) == null ? void 0 : _a.abort();
@@ -452,19 +596,19 @@ function useChat(options) {
452
596
  }
453
597
 
454
598
  // src/components/copilot-provider/copilotkit.tsx
455
- var import_react6 = require("react");
599
+ var import_react7 = require("react");
456
600
  var import_react_dom = require("react-dom");
457
601
  var import_shared2 = require("@copilotkit/shared");
458
602
 
459
603
  // src/context/copilot-messages-context.tsx
460
- var import_react5 = __toESM(require("react"));
604
+ var import_react6 = __toESM(require("react"));
461
605
  var emptyCopilotContext2 = {
462
606
  messages: [],
463
607
  setMessages: () => []
464
608
  };
465
- var CopilotMessagesContext = import_react5.default.createContext(emptyCopilotContext2);
609
+ var CopilotMessagesContext = import_react6.default.createContext(emptyCopilotContext2);
466
610
  function useCopilotMessagesContext() {
467
- const context = import_react5.default.useContext(CopilotMessagesContext);
611
+ const context = import_react6.default.useContext(CopilotMessagesContext);
468
612
  if (context === emptyCopilotContext2) {
469
613
  throw new Error(
470
614
  "A messages consuming component was not wrapped with `<CopilotMessages> {...} </CopilotMessages>`"
@@ -474,7 +618,7 @@ function useCopilotMessagesContext() {
474
618
  }
475
619
 
476
620
  // src/components/copilot-provider/copilotkit.tsx
477
- var import_jsx_runtime2 = require("react/jsx-runtime");
621
+ var import_jsx_runtime4 = require("react/jsx-runtime");
478
622
  var defaultCopilotContextCategories = ["global"];
479
623
 
480
624
  // src/hooks/use-copilot-chat.ts
@@ -500,13 +644,13 @@ function useCopilotChat(_a = {}) {
500
644
  } = useCopilotContext();
501
645
  const { messages, setMessages } = useCopilotMessagesContext();
502
646
  const latestGetContextString = useUpdatedRef(getContextString);
503
- const deleteMessage = (0, import_react7.useCallback)(
647
+ const deleteMessage = (0, import_react8.useCallback)(
504
648
  (messageId) => {
505
649
  setMessages((prev) => prev.filter((message) => message.id !== messageId));
506
650
  },
507
651
  [setMessages]
508
652
  );
509
- const makeSystemMessageCallback = (0, import_react7.useCallback)(() => {
653
+ const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
510
654
  const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
511
655
  const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
512
656
  return new import_runtime_client_gql3.TextMessage({
@@ -514,7 +658,7 @@ function useCopilotChat(_a = {}) {
514
658
  role: import_runtime_client_gql3.Role.System
515
659
  });
516
660
  }, [getContextString, makeSystemMessage, chatInstructions]);
517
- const onCoAgentStateRender = (0, import_react7.useCallback)(
661
+ const onCoAgentStateRender = useAsyncCallback(
518
662
  (args) => __async(this, null, function* () {
519
663
  var _a2;
520
664
  const { name, nodeName, state } = args;
@@ -549,38 +693,38 @@ function useCopilotChat(_a = {}) {
549
693
  setAgentSession
550
694
  }));
551
695
  const latestAppend = useUpdatedRef(append);
552
- const latestAppendFunc = (0, import_react7.useCallback)(
553
- (message) => {
554
- return latestAppend.current(message);
555
- },
696
+ const latestAppendFunc = useAsyncCallback(
697
+ (message) => __async(this, null, function* () {
698
+ return yield latestAppend.current(message);
699
+ }),
556
700
  [latestAppend]
557
701
  );
558
702
  const latestReload = useUpdatedRef(reload);
559
- const latestReloadFunc = (0, import_react7.useCallback)(() => {
560
- return latestReload.current();
561
- }, [latestReload]);
703
+ const latestReloadFunc = useAsyncCallback(() => __async(this, null, function* () {
704
+ return yield latestReload.current();
705
+ }), [latestReload]);
562
706
  const latestStop = useUpdatedRef(stop);
563
- const latestStopFunc = (0, import_react7.useCallback)(() => {
707
+ const latestStopFunc = (0, import_react8.useCallback)(() => {
564
708
  return latestStop.current();
565
709
  }, [latestStop]);
566
710
  const latestDelete = useUpdatedRef(deleteMessage);
567
- const latestDeleteFunc = (0, import_react7.useCallback)(
711
+ const latestDeleteFunc = (0, import_react8.useCallback)(
568
712
  (messageId) => {
569
713
  return latestDelete.current(messageId);
570
714
  },
571
715
  [latestDelete]
572
716
  );
573
717
  const latestSetMessages = useUpdatedRef(setMessages);
574
- const latestSetMessagesFunc = (0, import_react7.useCallback)(
718
+ const latestSetMessagesFunc = (0, import_react8.useCallback)(
575
719
  (messages2) => {
576
720
  return latestSetMessages.current(messages2);
577
721
  },
578
722
  [latestSetMessages]
579
723
  );
580
724
  const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
581
- const latestRunChatCompletionFunc = (0, import_react7.useCallback)(() => {
582
- return latestRunChatCompletion.current();
583
- }, [latestRunChatCompletion]);
725
+ const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
726
+ return yield latestRunChatCompletion.current();
727
+ }), [latestRunChatCompletion]);
584
728
  return {
585
729
  visibleMessages: messages,
586
730
  appendMessage: latestAppendFunc,
@@ -593,8 +737,8 @@ function useCopilotChat(_a = {}) {
593
737
  };
594
738
  }
595
739
  function useUpdatedRef(value) {
596
- const ref = (0, import_react7.useRef)(value);
597
- (0, import_react7.useEffect)(() => {
740
+ const ref = (0, import_react8.useRef)(value);
741
+ (0, import_react8.useEffect)(() => {
598
742
  ref.current = value;
599
743
  }, [value]);
600
744
  return ref;