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