@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
@@ -60,16 +60,131 @@ __export(use_chat_exports, {
60
60
  useChat: () => useChat
61
61
  });
62
62
  module.exports = __toCommonJS(use_chat_exports);
63
- var import_react3 = require("react");
63
+ var import_react4 = require("react");
64
64
  var import_shared = require("@copilotkit/shared");
65
65
  var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
66
66
 
67
67
  // src/components/toast/toast-provider.tsx
68
+ var import_react2 = require("react");
69
+
70
+ // src/components/error-boundary/error-utils.tsx
68
71
  var import_react = require("react");
72
+
73
+ // src/components/toast/exclamation-mark-icon.tsx
69
74
  var import_jsx_runtime = require("react/jsx-runtime");
70
- var ToastContext = (0, import_react.createContext)(void 0);
75
+ var ExclamationMarkIcon = ({
76
+ className,
77
+ style
78
+ }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
79
+ "svg",
80
+ {
81
+ xmlns: "http://www.w3.org/2000/svg",
82
+ width: "24",
83
+ height: "24",
84
+ viewBox: "0 0 24 24",
85
+ fill: "none",
86
+ stroke: "currentColor",
87
+ strokeWidth: "2",
88
+ strokeLinecap: "round",
89
+ strokeLinejoin: "round",
90
+ className: `lucide lucide-circle-alert ${className ? className : ""}`,
91
+ style,
92
+ children: [
93
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
96
+ ]
97
+ }
98
+ );
99
+
100
+ // src/components/error-boundary/error-utils.tsx
101
+ var import_jsx_runtime2 = require("react/jsx-runtime");
102
+ function ErrorToast({ errors }) {
103
+ const errorsToRender = errors.map((error, idx) => {
104
+ var _a, _b, _c;
105
+ const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
106
+ const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
107
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
108
+ "div",
109
+ {
110
+ style: {
111
+ marginTop: idx === 0 ? 0 : 10,
112
+ marginBottom: 14
113
+ },
114
+ children: [
115
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
116
+ code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
117
+ "div",
118
+ {
119
+ style: {
120
+ fontWeight: "600",
121
+ marginBottom: 4
122
+ },
123
+ children: [
124
+ "Copilot Cloud Error:",
125
+ " ",
126
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
127
+ ]
128
+ }
129
+ ),
130
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
131
+ ]
132
+ },
133
+ idx
134
+ );
135
+ });
136
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
137
+ "div",
138
+ {
139
+ style: {
140
+ fontSize: "13px",
141
+ maxWidth: "600px"
142
+ },
143
+ children: [
144
+ errorsToRender,
145
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
146
+ ]
147
+ }
148
+ );
149
+ }
150
+ function useErrorToast() {
151
+ const { addToast } = useToast();
152
+ return (0, import_react.useCallback)(
153
+ (error) => {
154
+ const errorId = error.map((err) => {
155
+ var _a, _b;
156
+ const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
157
+ const stack = err.stack || "";
158
+ return btoa(message + stack).slice(0, 32);
159
+ }).join("|");
160
+ addToast({
161
+ type: "error",
162
+ id: errorId,
163
+ // Toast libraries typically dedupe by id
164
+ message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
165
+ });
166
+ },
167
+ [addToast]
168
+ );
169
+ }
170
+ function useAsyncCallback(callback, deps) {
171
+ const addErrorToast = useErrorToast();
172
+ return (0, import_react.useCallback)((...args) => __async(this, null, function* () {
173
+ try {
174
+ return yield callback(...args);
175
+ } catch (error) {
176
+ console.error("Error in async callback:", error);
177
+ addErrorToast([error]);
178
+ throw error;
179
+ }
180
+ }), deps);
181
+ }
182
+
183
+ // src/components/toast/toast-provider.tsx
184
+ var import_jsx_runtime3 = require("react/jsx-runtime");
185
+ var ToastContext = (0, import_react2.createContext)(void 0);
71
186
  function useToast() {
72
- const context = (0, import_react.useContext)(ToastContext);
187
+ const context = (0, import_react2.useContext)(ToastContext);
73
188
  if (!context) {
74
189
  throw new Error("useToast must be used within a ToastProvider");
75
190
  }
@@ -78,14 +193,17 @@ function useToast() {
78
193
 
79
194
  // src/hooks/use-copilot-runtime-client.ts
80
195
  var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
81
- var import_react2 = require("react");
196
+ var import_react3 = require("react");
82
197
  var useCopilotRuntimeClient = (options) => {
83
198
  const { addGraphQLErrorsToast } = useToast();
84
- const runtimeClient = (0, import_react2.useMemo)(() => {
199
+ const addErrorToast = useErrorToast();
200
+ const runtimeClient = (0, import_react3.useMemo)(() => {
85
201
  return new import_runtime_client_gql.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
86
202
  handleGQLErrors: (error) => {
87
203
  if (error.graphQLErrors.length) {
88
204
  addGraphQLErrorsToast(error.graphQLErrors);
205
+ } else {
206
+ addErrorToast([error]);
89
207
  }
90
208
  }
91
209
  }));
@@ -111,12 +229,12 @@ function useChat(options) {
111
229
  agentSession,
112
230
  setAgentSession
113
231
  } = options;
114
- const abortControllerRef = (0, import_react3.useRef)();
115
- const threadIdRef = (0, import_react3.useRef)(null);
116
- const runIdRef = (0, import_react3.useRef)(null);
232
+ const abortControllerRef = (0, import_react4.useRef)();
233
+ const threadIdRef = (0, import_react4.useRef)(null);
234
+ const runIdRef = (0, import_react4.useRef)(null);
117
235
  const { addGraphQLErrorsToast } = useToast();
118
- const runChatCompletionRef = (0, import_react3.useRef)();
119
- const agentSessionRef = (0, import_react3.useRef)(agentSession);
236
+ const runChatCompletionRef = (0, import_react4.useRef)();
237
+ const agentSessionRef = (0, import_react4.useRef)(agentSession);
120
238
  agentSessionRef.current = agentSession;
121
239
  const publicApiKey = copilotConfig.publicApiKey;
122
240
  const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
@@ -126,211 +244,236 @@ function useChat(options) {
126
244
  headers,
127
245
  credentials: copilotConfig.credentials
128
246
  });
129
- const runChatCompletion = (previousMessages) => __async(this, null, function* () {
130
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
131
- setIsLoading(true);
132
- let newMessages = [
133
- new import_runtime_client_gql2.TextMessage({
134
- content: "",
135
- role: import_runtime_client_gql2.Role.Assistant
136
- })
137
- ];
138
- const abortController = new AbortController();
139
- abortControllerRef.current = abortController;
140
- setMessages([...previousMessages, ...newMessages]);
141
- const systemMessage = makeSystemMessageCallback();
142
- const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
143
- const stream = runtimeClient.asStream(
144
- runtimeClient.generateCopilotResponse({
145
- data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
146
- frontend: {
147
- actions: actions.filter(
148
- (action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
149
- ).map((action) => {
150
- let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
151
- if (action.disabled) {
152
- available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
153
- } else if (action.available === "disabled") {
154
- available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
155
- } else if (action.available === "remote") {
156
- available = import_runtime_client_gql2.ActionInputAvailability.Remote;
157
- }
158
- return {
159
- name: action.name,
160
- description: action.description || "",
161
- jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
162
- available
163
- };
164
- }),
165
- url: window.location.href
166
- },
167
- threadId: threadIdRef.current,
168
- runId: runIdRef.current,
169
- messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
170
- }, copilotConfig.cloud ? {
171
- cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
172
- guardrails: {
173
- inputValidationRules: {
174
- allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
175
- denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
247
+ const runChatCompletion = useAsyncCallback(
248
+ (previousMessages) => __async(this, null, function* () {
249
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
250
+ setIsLoading(true);
251
+ let newMessages = [
252
+ new import_runtime_client_gql2.TextMessage({
253
+ content: "",
254
+ role: import_runtime_client_gql2.Role.Assistant
255
+ })
256
+ ];
257
+ const abortController = new AbortController();
258
+ abortControllerRef.current = abortController;
259
+ setMessages([...previousMessages, ...newMessages]);
260
+ const systemMessage = makeSystemMessageCallback();
261
+ const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
262
+ const stream = runtimeClient.asStream(
263
+ runtimeClient.generateCopilotResponse({
264
+ data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
265
+ frontend: {
266
+ actions: actions.filter(
267
+ (action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
268
+ ).map((action) => {
269
+ let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
270
+ if (action.disabled) {
271
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
272
+ } else if (action.available === "disabled") {
273
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
274
+ } else if (action.available === "remote") {
275
+ available = import_runtime_client_gql2.ActionInputAvailability.Remote;
276
+ }
277
+ return {
278
+ name: action.name,
279
+ description: action.description || "",
280
+ jsonSchema: JSON.stringify(
281
+ (0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
282
+ ),
283
+ available
284
+ };
285
+ }),
286
+ url: window.location.href
287
+ },
288
+ threadId: threadIdRef.current,
289
+ runId: runIdRef.current,
290
+ messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
291
+ }, copilotConfig.cloud ? {
292
+ cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
293
+ guardrails: {
294
+ inputValidationRules: {
295
+ allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
296
+ denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
297
+ }
176
298
  }
299
+ } : {})
300
+ } : {}), {
301
+ metadata: {
302
+ requestType: import_runtime_client_gql2.CopilotRequestType.Chat
177
303
  }
178
- } : {})
179
- } : {}), {
180
- metadata: {
181
- requestType: import_runtime_client_gql2.CopilotRequestType.Chat
304
+ }), agentSessionRef.current ? {
305
+ agentSession: agentSessionRef.current
306
+ } : {}), {
307
+ agentStates: Object.values(coagentStatesRef.current).map((state) => ({
308
+ agentName: state.name,
309
+ state: JSON.stringify(state.state)
310
+ }))
311
+ }),
312
+ properties: copilotConfig.properties,
313
+ signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
314
+ })
315
+ );
316
+ const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
317
+ const reader = stream.getReader();
318
+ let actionResults = {};
319
+ let executedCoAgentStateRenders = [];
320
+ let followUp = void 0;
321
+ try {
322
+ while (true) {
323
+ let done, value;
324
+ try {
325
+ const readResult = yield reader.read();
326
+ done = readResult.done;
327
+ value = readResult.value;
328
+ } catch (readError) {
329
+ break;
182
330
  }
183
- }), agentSessionRef.current ? {
184
- agentSession: agentSessionRef.current
185
- } : {}), {
186
- agentStates: Object.values(coagentStatesRef.current).map((state) => ({
187
- agentName: state.name,
188
- state: JSON.stringify(state.state)
189
- })),
190
- forwardedParameters: options.forwardedParameters || {}
191
- }),
192
- properties: copilotConfig.properties,
193
- signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
194
- })
195
- );
196
- const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
197
- const reader = stream.getReader();
198
- let actionResults = {};
199
- let executedCoAgentStateRenders = [];
200
- let followUp = void 0;
201
- try {
202
- while (true) {
203
- let done, value;
204
- try {
205
- const readResult = yield reader.read();
206
- done = readResult.done;
207
- value = readResult.value;
208
- } catch (readError) {
209
- break;
210
- }
211
- if (done) {
212
- break;
213
- }
214
- if (!(value == null ? void 0 : value.generateCopilotResponse)) {
215
- continue;
216
- }
217
- threadIdRef.current = value.generateCopilotResponse.threadId || null;
218
- runIdRef.current = value.generateCopilotResponse.runId || null;
219
- const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
220
- (0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
221
- );
222
- if (messages2.length === 0) {
223
- continue;
224
- }
225
- newMessages = [];
226
- if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
227
- newMessages = [
228
- new import_runtime_client_gql2.TextMessage({
229
- role: import_runtime_client_gql2.MessageRole.Assistant,
230
- content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
231
- })
232
- ];
233
- } else {
234
- for (const message of messages2) {
235
- newMessages.push(message);
236
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
237
- if (!(message.id in actionResults)) {
331
+ if (done) {
332
+ break;
333
+ }
334
+ if (!(value == null ? void 0 : value.generateCopilotResponse)) {
335
+ continue;
336
+ }
337
+ threadIdRef.current = value.generateCopilotResponse.threadId || null;
338
+ runIdRef.current = value.generateCopilotResponse.runId || null;
339
+ const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
340
+ (0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
341
+ );
342
+ if (messages2.length === 0) {
343
+ continue;
344
+ }
345
+ newMessages = [];
346
+ if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
347
+ newMessages = [
348
+ new import_runtime_client_gql2.TextMessage({
349
+ role: import_runtime_client_gql2.MessageRole.Assistant,
350
+ content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
351
+ })
352
+ ];
353
+ } else {
354
+ for (const message of messages2) {
355
+ newMessages.push(message);
356
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
357
+ if (!(message.id in actionResults)) {
358
+ if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
359
+ break;
360
+ }
361
+ try {
362
+ setMessages([...previousMessages, ...newMessages]);
363
+ const action = actions.find((action2) => action2.name === message.name);
364
+ if (action) {
365
+ followUp = action.followUp;
366
+ }
367
+ const result = yield onFunctionCall({
368
+ messages: previousMessages,
369
+ name: message.name,
370
+ args: message.arguments
371
+ });
372
+ actionResults[message.id] = result;
373
+ } catch (e) {
374
+ actionResults[message.id] = `Failed to execute action ${message.name}`;
375
+ console.error(`Failed to execute action ${message.name}: ${e}`);
376
+ }
377
+ }
378
+ newMessages.push(
379
+ new import_runtime_client_gql2.ResultMessage({
380
+ result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
381
+ actionExecutionId: message.id,
382
+ actionName: message.name
383
+ })
384
+ );
385
+ }
386
+ if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
238
387
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
239
388
  break;
240
389
  }
241
- try {
242
- setMessages([...previousMessages, ...newMessages]);
243
- const action = actions.find((action2) => action2.name === message.name);
244
- if (action) {
245
- followUp = action.followUp;
246
- }
247
- const result = yield onFunctionCall({
248
- messages: previousMessages,
249
- name: message.name,
250
- args: message.arguments
251
- });
252
- actionResults[message.id] = result;
253
- } catch (e) {
254
- actionResults[message.id] = `Failed to execute action ${message.name}`;
255
- console.error(`Failed to execute action ${message.name}: ${e}`);
256
- }
390
+ yield onCoAgentStateRender({
391
+ name: message.agentName,
392
+ nodeName: message.nodeName,
393
+ state: message.state
394
+ });
395
+ executedCoAgentStateRenders.push(message.id);
257
396
  }
258
- newMessages.push(
259
- new import_runtime_client_gql2.ResultMessage({
260
- result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
261
- actionExecutionId: message.id,
262
- actionName: message.name
263
- })
264
- );
265
397
  }
266
- if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
267
- if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
268
- break;
398
+ const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
399
+ if (lastAgentStateMessage) {
400
+ setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
401
+ [lastAgentStateMessage.agentName]: {
402
+ name: lastAgentStateMessage.agentName,
403
+ state: lastAgentStateMessage.state,
404
+ running: lastAgentStateMessage.running,
405
+ active: lastAgentStateMessage.active,
406
+ threadId: lastAgentStateMessage.threadId,
407
+ nodeName: lastAgentStateMessage.nodeName,
408
+ runId: lastAgentStateMessage.runId
409
+ }
410
+ }));
411
+ if (lastAgentStateMessage.running) {
412
+ setAgentSession({
413
+ threadId: lastAgentStateMessage.threadId,
414
+ agentName: lastAgentStateMessage.agentName,
415
+ nodeName: lastAgentStateMessage.nodeName
416
+ });
417
+ } else {
418
+ setAgentSession(null);
269
419
  }
270
- yield onCoAgentStateRender({
271
- name: message.agentName,
272
- nodeName: message.nodeName,
273
- state: message.state
274
- });
275
- executedCoAgentStateRenders.push(message.id);
276
420
  }
277
421
  }
278
- const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
279
- if (lastAgentStateMessage) {
280
- setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
281
- [lastAgentStateMessage.agentName]: {
282
- name: lastAgentStateMessage.agentName,
283
- state: lastAgentStateMessage.state,
284
- running: lastAgentStateMessage.running,
285
- active: lastAgentStateMessage.active,
286
- threadId: lastAgentStateMessage.threadId,
287
- nodeName: lastAgentStateMessage.nodeName,
288
- runId: lastAgentStateMessage.runId
289
- }
290
- }));
291
- if (lastAgentStateMessage.running) {
292
- setAgentSession({
293
- threadId: lastAgentStateMessage.threadId,
294
- agentName: lastAgentStateMessage.agentName,
295
- nodeName: lastAgentStateMessage.nodeName
296
- });
297
- } else {
298
- setAgentSession(null);
299
- }
422
+ if (newMessages.length > 0) {
423
+ setMessages([...previousMessages, ...newMessages]);
300
424
  }
301
425
  }
302
- if (newMessages.length > 0) {
303
- setMessages([...previousMessages, ...newMessages]);
426
+ if (
427
+ // if followUp is not explicitly false
428
+ followUp !== false && // if we have client side results
429
+ (Object.values(actionResults).length || // or the last message we received is a result
430
+ newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
431
+ ) {
432
+ yield new Promise((resolve) => setTimeout(resolve, 10));
433
+ return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
434
+ } else {
435
+ return newMessages.slice();
304
436
  }
437
+ } finally {
438
+ setIsLoading(false);
305
439
  }
306
- if (
307
- // if followUp is not explicitly false
308
- followUp !== false && // if we have client side results
309
- (Object.values(actionResults).length || // or the last message we received is a result
310
- newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
311
- ) {
312
- yield new Promise((resolve) => setTimeout(resolve, 10));
313
- return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
314
- } else {
315
- return newMessages.slice();
316
- }
317
- } finally {
318
- setIsLoading(false);
319
- }
320
- });
440
+ }),
441
+ [
442
+ messages,
443
+ setMessages,
444
+ makeSystemMessageCallback,
445
+ copilotConfig,
446
+ setIsLoading,
447
+ initialMessages,
448
+ isLoading,
449
+ actions,
450
+ onFunctionCall,
451
+ onCoAgentStateRender,
452
+ setCoagentStatesWithRef,
453
+ coagentStatesRef,
454
+ agentSession,
455
+ setAgentSession
456
+ ]
457
+ );
321
458
  runChatCompletionRef.current = runChatCompletion;
322
- const runChatCompletionAndHandleFunctionCall = (messages2) => __async(this, null, function* () {
323
- yield runChatCompletionRef.current(messages2);
324
- });
325
- const append = (message) => __async(this, null, function* () {
326
- if (isLoading) {
327
- return;
328
- }
329
- const newMessages = [...messages, message];
330
- setMessages(newMessages);
331
- return runChatCompletionAndHandleFunctionCall(newMessages);
332
- });
333
- const reload = () => __async(this, null, function* () {
459
+ const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
460
+ (messages2) => __async(this, null, function* () {
461
+ yield runChatCompletionRef.current(messages2);
462
+ }),
463
+ [messages]
464
+ );
465
+ const append = useAsyncCallback(
466
+ (message) => __async(this, null, function* () {
467
+ if (isLoading) {
468
+ return;
469
+ }
470
+ const newMessages = [...messages, message];
471
+ setMessages(newMessages);
472
+ return runChatCompletionAndHandleFunctionCall(newMessages);
473
+ }),
474
+ [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
475
+ );
476
+ const reload = useAsyncCallback(() => __async(this, null, function* () {
334
477
  if (isLoading || messages.length === 0) {
335
478
  return;
336
479
  }
@@ -341,7 +484,7 @@ function useChat(options) {
341
484
  }
342
485
  setMessages(newMessages);
343
486
  return runChatCompletionAndHandleFunctionCall(newMessages);
344
- });
487
+ }), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
345
488
  const stop = () => {
346
489
  var _a;
347
490
  (_a = abortControllerRef.current) == null ? void 0 : _a.abort();