@copilotkit/react-core 1.4.8-no-pino-redact.1 → 1.5.0-coagents-v0-3.0

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 (141) hide show
  1. package/CHANGELOG.md +22 -3
  2. package/dist/{chunk-JHEAUB3Z.mjs → chunk-35EN6BG4.mjs} +2 -2
  3. package/dist/{chunk-JHEAUB3Z.mjs.map → chunk-35EN6BG4.mjs.map} +1 -1
  4. package/dist/{chunk-O22KGHOQ.mjs → chunk-42N5VKIX.mjs} +38 -16
  5. package/dist/chunk-42N5VKIX.mjs.map +1 -0
  6. package/dist/{chunk-AG7FH7OD.mjs → chunk-5FYKUKG3.mjs} +2 -2
  7. package/dist/{chunk-ODN4H66E.mjs → chunk-7LRDVJH5.mjs} +6 -2
  8. package/dist/chunk-7LRDVJH5.mjs.map +1 -0
  9. package/dist/{chunk-Y7MI4PBB.mjs → chunk-ALR5W5JK.mjs} +22 -10
  10. package/dist/chunk-ALR5W5JK.mjs.map +1 -0
  11. package/dist/{chunk-XBVKTDXP.mjs → chunk-BT6WK2JZ.mjs} +57 -17
  12. package/dist/chunk-BT6WK2JZ.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-QTDCEDOC.mjs +392 -0
  16. package/dist/chunk-QTDCEDOC.mjs.map +1 -0
  17. package/dist/{chunk-OT67R4NB.mjs → chunk-QX6V774L.mjs} +6 -8
  18. package/dist/chunk-QX6V774L.mjs.map +1 -0
  19. package/dist/{chunk-2KCEHGSI.mjs → chunk-SFPANIOY.mjs} +99 -49
  20. package/dist/chunk-SFPANIOY.mjs.map +1 -0
  21. package/dist/{chunk-XQFVXX6R.mjs → chunk-TQN3EZWQ.mjs} +10 -2
  22. package/dist/chunk-TQN3EZWQ.mjs.map +1 -0
  23. package/dist/{chunk-UOVONDR6.mjs → chunk-V3PFWGIY.mjs} +2 -2
  24. package/dist/{chunk-DHGXL5PC.mjs → chunk-VMP6JWBB.mjs} +18 -6
  25. package/dist/chunk-VMP6JWBB.mjs.map +1 -0
  26. package/dist/chunk-XERJQUHA.mjs +31 -0
  27. package/dist/chunk-XERJQUHA.mjs.map +1 -0
  28. package/dist/components/copilot-provider/copilotkit.js +175 -93
  29. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  30. package/dist/components/copilot-provider/copilotkit.mjs +5 -4
  31. package/dist/components/copilot-provider/index.js +175 -93
  32. package/dist/components/copilot-provider/index.js.map +1 -1
  33. package/dist/components/copilot-provider/index.mjs +5 -4
  34. package/dist/components/error-boundary/error-boundary.d.ts +22 -0
  35. package/dist/components/error-boundary/error-boundary.js +183 -0
  36. package/dist/components/error-boundary/error-boundary.js.map +1 -0
  37. package/dist/components/error-boundary/error-boundary.mjs +12 -0
  38. package/dist/components/error-boundary/error-boundary.mjs.map +1 -0
  39. package/dist/components/error-boundary/error-utils.d.ts +11 -0
  40. package/dist/components/error-boundary/error-utils.js +177 -0
  41. package/dist/components/error-boundary/error-utils.js.map +1 -0
  42. package/dist/components/error-boundary/error-utils.mjs +13 -0
  43. package/dist/components/error-boundary/error-utils.mjs.map +1 -0
  44. package/dist/components/index.js +175 -93
  45. package/dist/components/index.js.map +1 -1
  46. package/dist/components/index.mjs +5 -4
  47. package/dist/components/toast/toast-provider.d.ts +2 -1
  48. package/dist/components/toast/toast-provider.js +76 -62
  49. package/dist/components/toast/toast-provider.js.map +1 -1
  50. package/dist/components/toast/toast-provider.mjs +1 -1
  51. package/dist/context/copilot-context.d.ts +8 -2
  52. package/dist/context/copilot-context.js +9 -1
  53. package/dist/context/copilot-context.js.map +1 -1
  54. package/dist/context/copilot-context.mjs +1 -1
  55. package/dist/context/index.d.ts +1 -1
  56. package/dist/context/index.js +9 -1
  57. package/dist/context/index.js.map +1 -1
  58. package/dist/context/index.mjs +1 -1
  59. package/dist/hooks/index.d.ts +2 -1
  60. package/dist/hooks/index.js +584 -270
  61. package/dist/hooks/index.js.map +1 -1
  62. package/dist/hooks/index.mjs +19 -11
  63. package/dist/hooks/use-chat.d.ts +20 -0
  64. package/dist/hooks/use-chat.js +438 -200
  65. package/dist/hooks/use-chat.js.map +1 -1
  66. package/dist/hooks/use-chat.mjs +4 -3
  67. package/dist/hooks/use-coagent-state-render.d.ts +2 -2
  68. package/dist/hooks/use-coagent-state-render.js +9 -1
  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.d.ts +14 -1
  72. package/dist/hooks/use-coagent.js +547 -242
  73. package/dist/hooks/use-coagent.js.map +1 -1
  74. package/dist/hooks/use-coagent.mjs +15 -7
  75. package/dist/hooks/use-copilot-action.d.ts +12 -2
  76. package/dist/hooks/use-copilot-action.js +156 -14
  77. package/dist/hooks/use-copilot-action.js.map +1 -1
  78. package/dist/hooks/use-copilot-action.mjs +4 -2
  79. package/dist/hooks/use-copilot-chat.d.ts +1 -0
  80. package/dist/hooks/use-copilot-chat.js +514 -231
  81. package/dist/hooks/use-copilot-chat.js.map +1 -1
  82. package/dist/hooks/use-copilot-chat.mjs +8 -6
  83. package/dist/hooks/use-copilot-readable.js +9 -1
  84. package/dist/hooks/use-copilot-readable.js.map +1 -1
  85. package/dist/hooks/use-copilot-readable.mjs +2 -2
  86. package/dist/hooks/use-copilot-runtime-client.js +110 -4
  87. package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
  88. package/dist/hooks/use-copilot-runtime-client.mjs +2 -2
  89. package/dist/hooks/use-make-copilot-document-readable.js +9 -1
  90. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  91. package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
  92. package/dist/index.d.ts +2 -2
  93. package/dist/index.js +642 -363
  94. package/dist/index.js.map +1 -1
  95. package/dist/index.mjs +20 -12
  96. package/dist/lib/copilot-task.d.ts +1 -1
  97. package/dist/lib/copilot-task.js +33 -13
  98. package/dist/lib/copilot-task.js.map +1 -1
  99. package/dist/lib/copilot-task.mjs +7 -5
  100. package/dist/lib/index.d.ts +1 -1
  101. package/dist/lib/index.js +33 -13
  102. package/dist/lib/index.js.map +1 -1
  103. package/dist/lib/index.mjs +7 -5
  104. package/dist/types/frontend-action.d.ts +21 -2
  105. package/dist/types/frontend-action.js +34 -0
  106. package/dist/types/frontend-action.js.map +1 -1
  107. package/dist/types/frontend-action.mjs +7 -0
  108. package/dist/types/index.d.ts +2 -1
  109. package/dist/types/index.js.map +1 -1
  110. package/dist/utils/extract.js.map +1 -1
  111. package/dist/utils/extract.mjs +5 -4
  112. package/dist/utils/index.js.map +1 -1
  113. package/dist/utils/index.mjs +5 -4
  114. package/package.json +3 -3
  115. package/src/components/copilot-provider/copilotkit.tsx +14 -1
  116. package/src/components/error-boundary/error-boundary.tsx +42 -0
  117. package/src/components/error-boundary/error-utils.tsx +95 -0
  118. package/src/components/toast/toast-provider.tsx +10 -49
  119. package/src/context/copilot-context.tsx +30 -2
  120. package/src/hooks/index.ts +1 -1
  121. package/src/hooks/use-chat.ts +391 -256
  122. package/src/hooks/use-coagent-state-render.ts +2 -2
  123. package/src/hooks/use-coagent.ts +35 -15
  124. package/src/hooks/use-copilot-action.ts +41 -12
  125. package/src/hooks/use-copilot-chat.ts +52 -11
  126. package/src/hooks/use-copilot-runtime-client.ts +4 -0
  127. package/src/lib/copilot-task.ts +2 -8
  128. package/src/types/frontend-action.ts +55 -2
  129. package/src/types/index.ts +5 -1
  130. package/dist/chunk-2KCEHGSI.mjs.map +0 -1
  131. package/dist/chunk-DHGXL5PC.mjs.map +0 -1
  132. package/dist/chunk-EUIBVFV6.mjs +0 -294
  133. package/dist/chunk-EUIBVFV6.mjs.map +0 -1
  134. package/dist/chunk-O22KGHOQ.mjs.map +0 -1
  135. package/dist/chunk-ODN4H66E.mjs.map +0 -1
  136. package/dist/chunk-OT67R4NB.mjs.map +0 -1
  137. package/dist/chunk-XBVKTDXP.mjs.map +0 -1
  138. package/dist/chunk-XQFVXX6R.mjs.map +0 -1
  139. package/dist/chunk-Y7MI4PBB.mjs.map +0 -1
  140. /package/dist/{chunk-AG7FH7OD.mjs.map → chunk-5FYKUKG3.mjs.map} +0 -0
  141. /package/dist/{chunk-UOVONDR6.mjs.map → chunk-V3PFWGIY.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"));
@@ -139,7 +139,15 @@ var emptyCopilotContext = {
139
139
  },
140
140
  agentSession: null,
141
141
  setAgentSession: () => {
142
- }
142
+ },
143
+ agentLock: null,
144
+ threadId: null,
145
+ setThreadId: () => {
146
+ },
147
+ runId: null,
148
+ setRunId: () => {
149
+ },
150
+ chatAbortControllerRef: { current: null }
143
151
  };
144
152
  var CopilotContext = import_react.default.createContext(emptyCopilotContext);
145
153
  function useCopilotContext() {
@@ -155,19 +163,159 @@ function returnAndThrowInDebug(value) {
155
163
  }
156
164
 
157
165
  // src/hooks/use-copilot-chat.ts
158
- var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
166
+ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
159
167
 
160
168
  // src/hooks/use-chat.ts
161
- var import_react4 = require("react");
169
+ var import_react5 = require("react");
170
+ var import_shared2 = require("@copilotkit/shared");
171
+ var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
172
+
173
+ // src/types/frontend-action.ts
174
+ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
162
175
  var import_shared = require("@copilotkit/shared");
163
- var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
176
+ function processActionsForRuntimeRequest(actions) {
177
+ const filteredActions = actions.filter(
178
+ (action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
179
+ ).map((action) => {
180
+ let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
181
+ if (action.disabled) {
182
+ available = import_runtime_client_gql.ActionInputAvailability.Disabled;
183
+ } else if (action.available === "disabled") {
184
+ available = import_runtime_client_gql.ActionInputAvailability.Disabled;
185
+ } else if (action.available === "remote") {
186
+ available = import_runtime_client_gql.ActionInputAvailability.Remote;
187
+ }
188
+ return {
189
+ name: action.name,
190
+ description: action.description || "",
191
+ jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
192
+ available
193
+ };
194
+ });
195
+ return filteredActions;
196
+ }
164
197
 
165
198
  // src/components/toast/toast-provider.tsx
199
+ var import_react3 = require("react");
200
+
201
+ // src/components/error-boundary/error-utils.tsx
166
202
  var import_react2 = require("react");
203
+
204
+ // src/components/toast/exclamation-mark-icon.tsx
167
205
  var import_jsx_runtime = require("react/jsx-runtime");
168
- var ToastContext = (0, import_react2.createContext)(void 0);
206
+ var ExclamationMarkIcon = ({
207
+ className,
208
+ style
209
+ }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
210
+ "svg",
211
+ {
212
+ xmlns: "http://www.w3.org/2000/svg",
213
+ width: "24",
214
+ height: "24",
215
+ viewBox: "0 0 24 24",
216
+ fill: "none",
217
+ stroke: "currentColor",
218
+ strokeWidth: "2",
219
+ strokeLinecap: "round",
220
+ strokeLinejoin: "round",
221
+ className: `lucide lucide-circle-alert ${className ? className : ""}`,
222
+ style,
223
+ children: [
224
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
225
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
226
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
227
+ ]
228
+ }
229
+ );
230
+
231
+ // src/components/error-boundary/error-utils.tsx
232
+ var import_jsx_runtime2 = require("react/jsx-runtime");
233
+ function ErrorToast({ errors }) {
234
+ const errorsToRender = errors.map((error, idx) => {
235
+ var _a, _b, _c;
236
+ const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
237
+ const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
238
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
239
+ "div",
240
+ {
241
+ style: {
242
+ marginTop: idx === 0 ? 0 : 10,
243
+ marginBottom: 14
244
+ },
245
+ children: [
246
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
247
+ code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
248
+ "div",
249
+ {
250
+ style: {
251
+ fontWeight: "600",
252
+ marginBottom: 4
253
+ },
254
+ children: [
255
+ "Copilot Cloud Error:",
256
+ " ",
257
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
258
+ ]
259
+ }
260
+ ),
261
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
262
+ ]
263
+ },
264
+ idx
265
+ );
266
+ });
267
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
268
+ "div",
269
+ {
270
+ style: {
271
+ fontSize: "13px",
272
+ maxWidth: "600px"
273
+ },
274
+ children: [
275
+ errorsToRender,
276
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
277
+ ]
278
+ }
279
+ );
280
+ }
281
+ function useErrorToast() {
282
+ const { addToast } = useToast();
283
+ return (0, import_react2.useCallback)(
284
+ (error) => {
285
+ const errorId = error.map((err) => {
286
+ var _a, _b;
287
+ const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
288
+ const stack = err.stack || "";
289
+ return btoa(message + stack).slice(0, 32);
290
+ }).join("|");
291
+ addToast({
292
+ type: "error",
293
+ id: errorId,
294
+ // Toast libraries typically dedupe by id
295
+ message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
296
+ });
297
+ },
298
+ [addToast]
299
+ );
300
+ }
301
+ function useAsyncCallback(callback, deps) {
302
+ const addErrorToast = useErrorToast();
303
+ return (0, import_react2.useCallback)((...args) => __async(this, null, function* () {
304
+ try {
305
+ return yield callback(...args);
306
+ } catch (error) {
307
+ console.error("Error in async callback:", error);
308
+ addErrorToast([error]);
309
+ throw error;
310
+ }
311
+ }), deps);
312
+ }
313
+
314
+ // src/components/toast/toast-provider.tsx
315
+ var import_jsx_runtime3 = require("react/jsx-runtime");
316
+ var ToastContext = (0, import_react3.createContext)(void 0);
169
317
  function useToast() {
170
- const context = (0, import_react2.useContext)(ToastContext);
318
+ const context = (0, import_react3.useContext)(ToastContext);
171
319
  if (!context) {
172
320
  throw new Error("useToast must be used within a ToastProvider");
173
321
  }
@@ -175,15 +323,18 @@ function useToast() {
175
323
  }
176
324
 
177
325
  // src/hooks/use-copilot-runtime-client.ts
178
- var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
179
- var import_react3 = require("react");
326
+ var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
327
+ var import_react4 = require("react");
180
328
  var useCopilotRuntimeClient = (options) => {
181
329
  const { addGraphQLErrorsToast } = useToast();
182
- const runtimeClient = (0, import_react3.useMemo)(() => {
183
- return new import_runtime_client_gql.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
330
+ const addErrorToast = useErrorToast();
331
+ const runtimeClient = (0, import_react4.useMemo)(() => {
332
+ return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
184
333
  handleGQLErrors: (error) => {
185
334
  if (error.graphQLErrors.length) {
186
335
  addGraphQLErrorsToast(error.graphQLErrors);
336
+ } else {
337
+ addErrorToast([error]);
187
338
  }
188
339
  }
189
340
  }));
@@ -207,227 +358,305 @@ function useChat(options) {
207
358
  setCoagentStatesWithRef,
208
359
  coagentStatesRef,
209
360
  agentSession,
210
- setAgentSession
361
+ setAgentSession,
362
+ threadId,
363
+ setThreadId,
364
+ runId,
365
+ setRunId,
366
+ chatAbortControllerRef
211
367
  } = options;
212
- const abortControllerRef = (0, import_react4.useRef)();
213
- const threadIdRef = (0, import_react4.useRef)(null);
214
- const runIdRef = (0, import_react4.useRef)(null);
215
368
  const { addGraphQLErrorsToast } = useToast();
216
- const runChatCompletionRef = (0, import_react4.useRef)();
217
- const agentSessionRef = (0, import_react4.useRef)(agentSession);
369
+ const runChatCompletionRef = (0, import_react5.useRef)();
370
+ const agentSessionRef = (0, import_react5.useRef)(agentSession);
218
371
  agentSessionRef.current = agentSession;
372
+ const threadIdRef = (0, import_react5.useRef)(threadId);
373
+ threadIdRef.current = threadId;
374
+ const runIdRef = (0, import_react5.useRef)(runId);
375
+ runIdRef.current = runId;
219
376
  const publicApiKey = copilotConfig.publicApiKey;
220
- const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
377
+ const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
221
378
  const runtimeClient = useCopilotRuntimeClient({
222
379
  url: copilotConfig.chatApiEndpoint,
223
380
  publicApiKey: copilotConfig.publicApiKey,
224
381
  headers,
225
382
  credentials: copilotConfig.credentials
226
383
  });
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
384
+ const runChatCompletion = useAsyncCallback(
385
+ (previousMessages) => __async(this, null, function* () {
386
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
387
+ setIsLoading(true);
388
+ let newMessages = [
389
+ new import_runtime_client_gql3.TextMessage({
390
+ content: "",
391
+ role: import_runtime_client_gql3.Role.Assistant
392
+ })
393
+ ];
394
+ chatAbortControllerRef.current = new AbortController();
395
+ setMessages([...previousMessages, ...newMessages]);
396
+ const systemMessage = makeSystemMessageCallback();
397
+ const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
398
+ const isAgentRun = agentSessionRef.current !== null;
399
+ const stream = runtimeClient.asStream(
400
+ runtimeClient.generateCopilotResponse({
401
+ data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
402
+ frontend: {
403
+ actions: processActionsForRuntimeRequest(actions),
404
+ url: window.location.href
405
+ },
406
+ threadId: threadIdRef.current,
407
+ runId: runIdRef.current,
408
+ messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
409
+ }, copilotConfig.cloud ? {
410
+ cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
411
+ guardrails: {
412
+ inputValidationRules: {
413
+ allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
414
+ denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
415
+ }
274
416
  }
417
+ } : {})
418
+ } : {}), {
419
+ metadata: {
420
+ requestType: import_runtime_client_gql3.CopilotRequestType.Chat
275
421
  }
276
- } : {})
277
- } : {}), {
278
- metadata: {
279
- requestType: import_runtime_client_gql2.CopilotRequestType.Chat
422
+ }), agentSessionRef.current ? {
423
+ agentSession: agentSessionRef.current
424
+ } : {}), {
425
+ agentStates: Object.values(coagentStatesRef.current).map((state) => ({
426
+ agentName: state.name,
427
+ state: JSON.stringify(state.state)
428
+ }))
429
+ }),
430
+ properties: copilotConfig.properties,
431
+ signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
432
+ })
433
+ );
434
+ const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
435
+ const reader = stream.getReader();
436
+ let executedCoAgentStateRenders = [];
437
+ let followUp = void 0;
438
+ let messages2 = [];
439
+ let syncedMessages = [];
440
+ try {
441
+ while (true) {
442
+ let done, value;
443
+ try {
444
+ const readResult = yield reader.read();
445
+ done = readResult.done;
446
+ value = readResult.value;
447
+ } catch (readError) {
448
+ break;
280
449
  }
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)) {
450
+ if (done) {
451
+ if (chatAbortControllerRef.current.signal.aborted) {
452
+ return [];
453
+ }
454
+ break;
455
+ }
456
+ if (!(value == null ? void 0 : value.generateCopilotResponse)) {
457
+ continue;
458
+ }
459
+ threadIdRef.current = value.generateCopilotResponse.threadId || null;
460
+ runIdRef.current = value.generateCopilotResponse.runId || null;
461
+ setThreadId(threadIdRef.current);
462
+ setRunId(runIdRef.current);
463
+ messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
464
+ (0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
465
+ );
466
+ if (messages2.length === 0) {
467
+ continue;
468
+ }
469
+ newMessages = [];
470
+ if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
471
+ newMessages = [
472
+ new import_runtime_client_gql3.TextMessage({
473
+ role: import_runtime_client_gql3.MessageRole.Assistant,
474
+ content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
475
+ })
476
+ ];
477
+ setMessages([...previousMessages, ...newMessages]);
478
+ break;
479
+ } else {
480
+ newMessages = [...messages2];
481
+ for (const message of messages2) {
482
+ if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
335
483
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
336
484
  break;
337
485
  }
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({
486
+ yield onCoAgentStateRender({
487
+ name: message.agentName,
488
+ nodeName: message.nodeName,
489
+ state: message.state
490
+ });
491
+ executedCoAgentStateRenders.push(message.id);
492
+ }
493
+ }
494
+ const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
495
+ if (lastAgentStateMessage) {
496
+ if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
497
+ syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
498
+ lastAgentStateMessage.state.messages
499
+ );
500
+ }
501
+ setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
502
+ [lastAgentStateMessage.agentName]: {
503
+ name: lastAgentStateMessage.agentName,
504
+ state: lastAgentStateMessage.state,
505
+ running: lastAgentStateMessage.running,
506
+ active: lastAgentStateMessage.active,
507
+ threadId: lastAgentStateMessage.threadId,
508
+ nodeName: lastAgentStateMessage.nodeName,
509
+ runId: lastAgentStateMessage.runId
510
+ }
511
+ }));
512
+ if (lastAgentStateMessage.running) {
513
+ setAgentSession({
514
+ threadId: lastAgentStateMessage.threadId,
515
+ agentName: lastAgentStateMessage.agentName,
516
+ nodeName: lastAgentStateMessage.nodeName
517
+ });
518
+ } else {
519
+ setAgentSession(null);
520
+ }
521
+ }
522
+ }
523
+ if (newMessages.length > 0) {
524
+ setMessages([...previousMessages, ...newMessages]);
525
+ }
526
+ }
527
+ const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
528
+ let didExecuteAction = false;
529
+ if (onFunctionCall) {
530
+ const lastMessages = [];
531
+ for (let i = finalMessages.length - 1; i >= 0; i--) {
532
+ const message = finalMessages[i];
533
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
534
+ lastMessages.unshift(message);
535
+ } else {
536
+ break;
537
+ }
538
+ }
539
+ for (const message of lastMessages) {
540
+ setMessages(finalMessages);
541
+ const action = actions.find((action2) => action2.name === message.name);
542
+ if (action) {
543
+ followUp = action.followUp;
544
+ let result;
545
+ try {
546
+ result = yield Promise.race([
547
+ onFunctionCall({
345
548
  messages: previousMessages,
346
549
  name: message.name,
347
550
  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
- }
551
+ }),
552
+ new Promise(
553
+ (resolve) => {
554
+ var _a2;
555
+ return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
556
+ "abort",
557
+ () => resolve("Operation was aborted by the user")
558
+ );
559
+ }
560
+ ),
561
+ // if the user stopped generation, we also abort consecutive actions
562
+ new Promise((resolve) => {
563
+ var _a2;
564
+ if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
565
+ resolve("Operation was aborted by the user");
566
+ }
567
+ })
568
+ ]);
569
+ } catch (e) {
570
+ result = `Failed to execute action ${message.name}`;
571
+ console.error(`Failed to execute action ${message.name}: ${e}`);
354
572
  }
355
- newMessages.push(
356
- new import_runtime_client_gql2.ResultMessage({
357
- result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
573
+ didExecuteAction = true;
574
+ const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
575
+ finalMessages.splice(
576
+ messageIndex + 1,
577
+ 0,
578
+ new import_runtime_client_gql3.ResultMessage({
579
+ id: "result-" + message.id,
580
+ result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
358
581
  actionExecutionId: message.id,
359
582
  actionName: message.name
360
583
  })
361
584
  );
362
585
  }
363
- if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
364
- if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
365
- break;
366
- }
367
- yield onCoAgentStateRender({
368
- name: message.agentName,
369
- nodeName: message.nodeName,
370
- state: message.state
371
- });
372
- executedCoAgentStateRenders.push(message.id);
373
- }
374
586
  }
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);
587
+ setMessages(finalMessages);
588
+ }
589
+ if (
590
+ // if followUp is not explicitly false
591
+ followUp !== false && // and we executed an action
592
+ (didExecuteAction || // the last message is a server side result
593
+ !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
594
+ !((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
595
+ ) {
596
+ yield new Promise((resolve) => setTimeout(resolve, 10));
597
+ return yield runChatCompletionRef.current(finalMessages);
598
+ } else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
599
+ const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
600
+ if (message.isActionExecutionMessage()) {
601
+ return finalMessages.find(
602
+ (msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
603
+ );
396
604
  }
605
+ return true;
606
+ });
607
+ const repairedMessageIds = repairedMessages.map((message) => message.id);
608
+ setMessages(repairedMessages);
609
+ if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
610
+ setAgentSession({
611
+ threadId: agentSessionRef.current.threadId,
612
+ agentName: agentSessionRef.current.agentName,
613
+ nodeName: "__end__"
614
+ });
397
615
  }
616
+ return newMessages.filter((message) => repairedMessageIds.includes(message.id));
617
+ } else {
618
+ return newMessages.slice();
398
619
  }
399
- if (newMessages.length > 0) {
400
- setMessages([...previousMessages, ...newMessages]);
401
- }
402
- }
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();
620
+ } finally {
621
+ setIsLoading(false);
413
622
  }
414
- } finally {
415
- setIsLoading(false);
416
- }
417
- });
623
+ }),
624
+ [
625
+ messages,
626
+ setMessages,
627
+ makeSystemMessageCallback,
628
+ copilotConfig,
629
+ setIsLoading,
630
+ initialMessages,
631
+ isLoading,
632
+ actions,
633
+ onFunctionCall,
634
+ onCoAgentStateRender,
635
+ setCoagentStatesWithRef,
636
+ coagentStatesRef,
637
+ agentSession,
638
+ setAgentSession
639
+ ]
640
+ );
418
641
  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* () {
642
+ const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
643
+ (messages2) => __async(this, null, function* () {
644
+ yield runChatCompletionRef.current(messages2);
645
+ }),
646
+ [messages]
647
+ );
648
+ const append = useAsyncCallback(
649
+ (message) => __async(this, null, function* () {
650
+ if (isLoading) {
651
+ return;
652
+ }
653
+ const newMessages = [...messages, message];
654
+ setMessages(newMessages);
655
+ return runChatCompletionAndHandleFunctionCall(newMessages);
656
+ }),
657
+ [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
658
+ );
659
+ const reload = useAsyncCallback(() => __async(this, null, function* () {
431
660
  if (isLoading || messages.length === 0) {
432
661
  return;
433
662
  }
@@ -438,10 +667,10 @@ function useChat(options) {
438
667
  }
439
668
  setMessages(newMessages);
440
669
  return runChatCompletionAndHandleFunctionCall(newMessages);
441
- });
670
+ }), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
442
671
  const stop = () => {
443
672
  var _a;
444
- (_a = abortControllerRef.current) == null ? void 0 : _a.abort();
673
+ (_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
445
674
  };
446
675
  return {
447
676
  append,
@@ -450,21 +679,38 @@ function useChat(options) {
450
679
  runChatCompletion: () => runChatCompletionRef.current(messages)
451
680
  };
452
681
  }
682
+ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
683
+ const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
684
+ if (syncedMessages.length > 0) {
685
+ const messagesWithAgentState = [...previousMessages, ...newMessages];
686
+ let previousMessageId = void 0;
687
+ for (const message of messagesWithAgentState) {
688
+ if (message.isAgentStateMessage()) {
689
+ const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
690
+ if (index !== -1) {
691
+ finalMessages.splice(index + 1, 0, message);
692
+ }
693
+ }
694
+ previousMessageId = message.id;
695
+ }
696
+ }
697
+ return finalMessages;
698
+ }
453
699
 
454
700
  // src/components/copilot-provider/copilotkit.tsx
455
- var import_react6 = require("react");
701
+ var import_react7 = require("react");
456
702
  var import_react_dom = require("react-dom");
457
- var import_shared2 = require("@copilotkit/shared");
703
+ var import_shared3 = require("@copilotkit/shared");
458
704
 
459
705
  // src/context/copilot-messages-context.tsx
460
- var import_react5 = __toESM(require("react"));
706
+ var import_react6 = __toESM(require("react"));
461
707
  var emptyCopilotContext2 = {
462
708
  messages: [],
463
709
  setMessages: () => []
464
710
  };
465
- var CopilotMessagesContext = import_react5.default.createContext(emptyCopilotContext2);
711
+ var CopilotMessagesContext = import_react6.default.createContext(emptyCopilotContext2);
466
712
  function useCopilotMessagesContext() {
467
- const context = import_react5.default.useContext(CopilotMessagesContext);
713
+ const context = import_react6.default.useContext(CopilotMessagesContext);
468
714
  if (context === emptyCopilotContext2) {
469
715
  throw new Error(
470
716
  "A messages consuming component was not wrapped with `<CopilotMessages> {...} </CopilotMessages>`"
@@ -474,7 +720,7 @@ function useCopilotMessagesContext() {
474
720
  }
475
721
 
476
722
  // src/components/copilot-provider/copilotkit.tsx
477
- var import_jsx_runtime2 = require("react/jsx-runtime");
723
+ var import_jsx_runtime4 = require("react/jsx-runtime");
478
724
  var defaultCopilotContextCategories = ["global"];
479
725
 
480
726
  // src/hooks/use-copilot-chat.ts
@@ -496,25 +742,31 @@ function useCopilotChat(_a = {}) {
496
742
  setCoagentStatesWithRef,
497
743
  coAgentStateRenders,
498
744
  agentSession,
499
- setAgentSession
745
+ setAgentSession,
746
+ agentLock,
747
+ threadId,
748
+ setThreadId,
749
+ runId,
750
+ setRunId,
751
+ chatAbortControllerRef
500
752
  } = useCopilotContext();
501
753
  const { messages, setMessages } = useCopilotMessagesContext();
502
754
  const latestGetContextString = useUpdatedRef(getContextString);
503
- const deleteMessage = (0, import_react7.useCallback)(
755
+ const deleteMessage = (0, import_react8.useCallback)(
504
756
  (messageId) => {
505
757
  setMessages((prev) => prev.filter((message) => message.id !== messageId));
506
758
  },
507
759
  [setMessages]
508
760
  );
509
- const makeSystemMessageCallback = (0, import_react7.useCallback)(() => {
761
+ const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
510
762
  const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
511
763
  const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
512
- return new import_runtime_client_gql3.TextMessage({
764
+ return new import_runtime_client_gql4.TextMessage({
513
765
  content: systemMessageMaker(contextString, chatInstructions),
514
- role: import_runtime_client_gql3.Role.System
766
+ role: import_runtime_client_gql4.Role.System
515
767
  });
516
768
  }, [getContextString, makeSystemMessage, chatInstructions]);
517
- const onCoAgentStateRender = (0, import_react7.useCallback)(
769
+ const onCoAgentStateRender = useAsyncCallback(
518
770
  (args) => __async(this, null, function* () {
519
771
  var _a2;
520
772
  const { name, nodeName, state } = args;
@@ -546,55 +798,86 @@ function useCopilotChat(_a = {}) {
546
798
  coagentStatesRef,
547
799
  setCoagentStatesWithRef,
548
800
  agentSession,
549
- setAgentSession
801
+ setAgentSession,
802
+ threadId,
803
+ setThreadId,
804
+ runId,
805
+ setRunId,
806
+ chatAbortControllerRef
550
807
  }));
551
808
  const latestAppend = useUpdatedRef(append);
552
- const latestAppendFunc = (0, import_react7.useCallback)(
553
- (message) => {
554
- return latestAppend.current(message);
555
- },
809
+ const latestAppendFunc = useAsyncCallback(
810
+ (message) => __async(this, null, function* () {
811
+ return yield latestAppend.current(message);
812
+ }),
556
813
  [latestAppend]
557
814
  );
558
815
  const latestReload = useUpdatedRef(reload);
559
- const latestReloadFunc = (0, import_react7.useCallback)(() => {
560
- return latestReload.current();
561
- }, [latestReload]);
816
+ const latestReloadFunc = useAsyncCallback(() => __async(this, null, function* () {
817
+ return yield latestReload.current();
818
+ }), [latestReload]);
562
819
  const latestStop = useUpdatedRef(stop);
563
- const latestStopFunc = (0, import_react7.useCallback)(() => {
820
+ const latestStopFunc = (0, import_react8.useCallback)(() => {
564
821
  return latestStop.current();
565
822
  }, [latestStop]);
566
823
  const latestDelete = useUpdatedRef(deleteMessage);
567
- const latestDeleteFunc = (0, import_react7.useCallback)(
824
+ const latestDeleteFunc = (0, import_react8.useCallback)(
568
825
  (messageId) => {
569
826
  return latestDelete.current(messageId);
570
827
  },
571
828
  [latestDelete]
572
829
  );
573
830
  const latestSetMessages = useUpdatedRef(setMessages);
574
- const latestSetMessagesFunc = (0, import_react7.useCallback)(
831
+ const latestSetMessagesFunc = (0, import_react8.useCallback)(
575
832
  (messages2) => {
576
833
  return latestSetMessages.current(messages2);
577
834
  },
578
835
  [latestSetMessages]
579
836
  );
580
837
  const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
581
- const latestRunChatCompletionFunc = (0, import_react7.useCallback)(() => {
582
- return latestRunChatCompletion.current();
583
- }, [latestRunChatCompletion]);
838
+ const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
839
+ return yield latestRunChatCompletion.current();
840
+ }), [latestRunChatCompletion]);
841
+ const reset = (0, import_react8.useCallback)(() => {
842
+ latestStopFunc();
843
+ setMessages([]);
844
+ setThreadId(null);
845
+ setRunId(null);
846
+ setCoagentStatesWithRef({});
847
+ let initialAgentSession = null;
848
+ if (agentLock) {
849
+ initialAgentSession = {
850
+ agentName: agentLock
851
+ };
852
+ }
853
+ setAgentSession(initialAgentSession);
854
+ }, [
855
+ latestStopFunc,
856
+ setMessages,
857
+ setThreadId,
858
+ setCoagentStatesWithRef,
859
+ setAgentSession,
860
+ agentLock
861
+ ]);
862
+ const latestReset = useUpdatedRef(reset);
863
+ const latestResetFunc = (0, import_react8.useCallback)(() => {
864
+ return latestReset.current();
865
+ }, [latestReset]);
584
866
  return {
585
867
  visibleMessages: messages,
586
868
  appendMessage: latestAppendFunc,
587
869
  setMessages: latestSetMessagesFunc,
588
870
  reloadMessages: latestReloadFunc,
589
871
  stopGeneration: latestStopFunc,
872
+ reset: latestResetFunc,
590
873
  deleteMessage: latestDeleteFunc,
591
874
  runChatCompletion: latestRunChatCompletionFunc,
592
875
  isLoading
593
876
  };
594
877
  }
595
878
  function useUpdatedRef(value) {
596
- const ref = (0, import_react7.useRef)(value);
597
- (0, import_react7.useEffect)(() => {
879
+ const ref = (0, import_react8.useRef)(value);
880
+ (0, import_react8.useEffect)(() => {
598
881
  ref.current = value;
599
882
  }, [value]);
600
883
  return ref;