@copilotkit/react-core 1.5.1-next.2 → 1.5.1-next.3

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 (146) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/{chunk-LNI2Z45S.mjs → chunk-2KCEHGSI.mjs} +50 -100
  3. package/dist/chunk-2KCEHGSI.mjs.map +1 -0
  4. package/dist/{chunk-2KT73RVG.mjs → chunk-6OR25P32.mjs} +19 -75
  5. package/dist/chunk-6OR25P32.mjs.map +1 -0
  6. package/dist/{chunk-3GQPEN4M.mjs → chunk-DDVXFNYA.mjs} +32 -66
  7. package/dist/chunk-DDVXFNYA.mjs.map +1 -0
  8. package/dist/{chunk-XOQMISG3.mjs → chunk-FXHKK52V.mjs} +13 -14
  9. package/dist/chunk-FXHKK52V.mjs.map +1 -0
  10. package/dist/{chunk-HIUT2NLX.mjs → chunk-H4VZMKR6.mjs} +2 -2
  11. package/dist/{chunk-X36DNILG.mjs → chunk-H7LSKIDK.mjs} +23 -71
  12. package/dist/chunk-H7LSKIDK.mjs.map +1 -0
  13. package/dist/chunk-JDQCJCAQ.mjs +295 -0
  14. package/dist/chunk-JDQCJCAQ.mjs.map +1 -0
  15. package/dist/chunk-L34MHAXR.mjs +1 -0
  16. package/dist/{chunk-WXREY7UP.mjs → chunk-LODRWFMB.mjs} +4 -16
  17. package/dist/chunk-LODRWFMB.mjs.map +1 -0
  18. package/dist/{chunk-EWKJMQOF.mjs → chunk-MWZO6TUR.mjs} +13 -29
  19. package/dist/chunk-MWZO6TUR.mjs.map +1 -0
  20. package/dist/{chunk-6BQVZFNO.mjs → chunk-ODN4H66E.mjs} +2 -6
  21. package/dist/chunk-ODN4H66E.mjs.map +1 -0
  22. package/dist/{chunk-FQ53HQYZ.mjs → chunk-QDGDXRRJ.mjs} +2 -2
  23. package/dist/{chunk-22XKTBPF.mjs → chunk-XINZBP3J.mjs} +3 -15
  24. package/dist/chunk-XINZBP3J.mjs.map +1 -0
  25. package/dist/components/copilot-provider/copilot-messages.d.ts +0 -9
  26. package/dist/components/copilot-provider/copilotkit-props.d.ts +0 -21
  27. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  28. package/dist/components/copilot-provider/copilotkit.d.ts +0 -9
  29. package/dist/components/copilot-provider/copilotkit.js +95 -224
  30. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  31. package/dist/components/copilot-provider/copilotkit.mjs +8 -9
  32. package/dist/components/copilot-provider/index.d.ts +0 -9
  33. package/dist/components/copilot-provider/index.js +95 -224
  34. package/dist/components/copilot-provider/index.js.map +1 -1
  35. package/dist/components/copilot-provider/index.mjs +8 -9
  36. package/dist/components/index.d.ts +0 -9
  37. package/dist/components/index.js +95 -224
  38. package/dist/components/index.js.map +1 -1
  39. package/dist/components/index.mjs +8 -9
  40. package/dist/components/toast/toast-provider.d.ts +1 -2
  41. package/dist/components/toast/toast-provider.js +63 -77
  42. package/dist/components/toast/toast-provider.js.map +1 -1
  43. package/dist/components/toast/toast-provider.mjs +1 -1
  44. package/dist/context/copilot-context.d.ts +4 -37
  45. package/dist/context/copilot-context.js +3 -15
  46. package/dist/context/copilot-context.js.map +1 -1
  47. package/dist/context/copilot-context.mjs +1 -1
  48. package/dist/context/index.d.ts +1 -1
  49. package/dist/context/index.js +3 -15
  50. package/dist/context/index.js.map +1 -1
  51. package/dist/context/index.mjs +4 -4
  52. package/dist/hooks/index.d.ts +1 -3
  53. package/dist/hooks/index.js +297 -703
  54. package/dist/hooks/index.js.map +1 -1
  55. package/dist/hooks/index.mjs +23 -35
  56. package/dist/hooks/use-chat.d.ts +3 -35
  57. package/dist/hooks/use-chat.js +205 -453
  58. package/dist/hooks/use-chat.js.map +1 -1
  59. package/dist/hooks/use-chat.mjs +3 -4
  60. package/dist/hooks/use-coagent-state-render.d.ts +2 -2
  61. package/dist/hooks/use-coagent-state-render.js +8 -43
  62. package/dist/hooks/use-coagent-state-render.js.map +1 -1
  63. package/dist/hooks/use-coagent-state-render.mjs +2 -4
  64. package/dist/hooks/use-coagent.d.ts +1 -14
  65. package/dist/hooks/use-coagent.js +265 -603
  66. package/dist/hooks/use-coagent.js.map +1 -1
  67. package/dist/hooks/use-coagent.mjs +12 -20
  68. package/dist/hooks/use-copilot-action.d.ts +2 -12
  69. package/dist/hooks/use-copilot-action.js +19 -169
  70. package/dist/hooks/use-copilot-action.js.map +1 -1
  71. package/dist/hooks/use-copilot-action.mjs +2 -4
  72. package/dist/hooks/use-copilot-chat.d.ts +0 -2
  73. package/dist/hooks/use-copilot-chat.js +240 -545
  74. package/dist/hooks/use-copilot-chat.js.map +1 -1
  75. package/dist/hooks/use-copilot-chat.mjs +11 -13
  76. package/dist/hooks/use-copilot-readable.js +3 -15
  77. package/dist/hooks/use-copilot-readable.js.map +1 -1
  78. package/dist/hooks/use-copilot-readable.mjs +2 -2
  79. package/dist/hooks/use-copilot-runtime-client.js +4 -110
  80. package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
  81. package/dist/hooks/use-copilot-runtime-client.mjs +2 -2
  82. package/dist/hooks/use-make-copilot-document-readable.js +3 -15
  83. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  84. package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
  85. package/dist/index.d.ts +3 -4
  86. package/dist/index.js +398 -812
  87. package/dist/index.js.map +1 -1
  88. package/dist/index.mjs +31 -43
  89. package/dist/lib/copilot-task.d.ts +1 -6
  90. package/dist/lib/copilot-task.js +17 -55
  91. package/dist/lib/copilot-task.js.map +1 -1
  92. package/dist/lib/copilot-task.mjs +9 -11
  93. package/dist/lib/index.d.ts +1 -1
  94. package/dist/lib/index.js +17 -55
  95. package/dist/lib/index.js.map +1 -1
  96. package/dist/lib/index.mjs +9 -11
  97. package/dist/types/frontend-action.d.ts +2 -21
  98. package/dist/types/frontend-action.js +0 -34
  99. package/dist/types/frontend-action.js.map +1 -1
  100. package/dist/types/frontend-action.mjs +0 -7
  101. package/dist/types/index.d.ts +1 -2
  102. package/dist/types/index.js.map +1 -1
  103. package/dist/utils/extract.d.ts +2 -3
  104. package/dist/utils/extract.js +3 -21
  105. package/dist/utils/extract.js.map +1 -1
  106. package/dist/utils/extract.mjs +8 -9
  107. package/dist/utils/index.js +3 -21
  108. package/dist/utils/index.js.map +1 -1
  109. package/dist/utils/index.mjs +9 -10
  110. package/package.json +5 -5
  111. package/dist/chunk-22XKTBPF.mjs.map +0 -1
  112. package/dist/chunk-2KT73RVG.mjs.map +0 -1
  113. package/dist/chunk-3GQPEN4M.mjs.map +0 -1
  114. package/dist/chunk-6BQVZFNO.mjs.map +0 -1
  115. package/dist/chunk-EWKJMQOF.mjs.map +0 -1
  116. package/dist/chunk-LHKIIAUQ.mjs +0 -59
  117. package/dist/chunk-LHKIIAUQ.mjs.map +0 -1
  118. package/dist/chunk-LNI2Z45S.mjs.map +0 -1
  119. package/dist/chunk-NR2BTA6Z.mjs +0 -1
  120. package/dist/chunk-VGOFRULA.mjs +0 -401
  121. package/dist/chunk-VGOFRULA.mjs.map +0 -1
  122. package/dist/chunk-VNTDIJSG.mjs +0 -37
  123. package/dist/chunk-VNTDIJSG.mjs.map +0 -1
  124. package/dist/chunk-WXREY7UP.mjs.map +0 -1
  125. package/dist/chunk-X36DNILG.mjs.map +0 -1
  126. package/dist/chunk-XERJQUHA.mjs +0 -31
  127. package/dist/chunk-XERJQUHA.mjs.map +0 -1
  128. package/dist/chunk-XOQMISG3.mjs.map +0 -1
  129. package/dist/components/error-boundary/error-boundary.d.ts +0 -22
  130. package/dist/components/error-boundary/error-boundary.js +0 -183
  131. package/dist/components/error-boundary/error-boundary.js.map +0 -1
  132. package/dist/components/error-boundary/error-boundary.mjs +0 -12
  133. package/dist/components/error-boundary/error-boundary.mjs.map +0 -1
  134. package/dist/components/error-boundary/error-utils.d.ts +0 -11
  135. package/dist/components/error-boundary/error-utils.js +0 -177
  136. package/dist/components/error-boundary/error-utils.js.map +0 -1
  137. package/dist/components/error-boundary/error-utils.mjs +0 -13
  138. package/dist/components/error-boundary/error-utils.mjs.map +0 -1
  139. package/dist/hooks/use-copilot-authenticated-action.d.ts +0 -8
  140. package/dist/hooks/use-copilot-authenticated-action.js +0 -418
  141. package/dist/hooks/use-copilot-authenticated-action.js.map +0 -1
  142. package/dist/hooks/use-copilot-authenticated-action.mjs +0 -12
  143. package/dist/hooks/use-copilot-authenticated-action.mjs.map +0 -1
  144. /package/dist/{chunk-HIUT2NLX.mjs.map → chunk-H4VZMKR6.mjs.map} +0 -0
  145. /package/dist/{chunk-NR2BTA6Z.mjs.map → chunk-L34MHAXR.mjs.map} +0 -0
  146. /package/dist/{chunk-FQ53HQYZ.mjs.map → chunk-QDGDXRRJ.mjs.map} +0 -0
@@ -60,159 +60,16 @@ __export(use_chat_exports, {
60
60
  useChat: () => useChat
61
61
  });
62
62
  module.exports = __toCommonJS(use_chat_exports);
63
- var import_react4 = require("react");
64
- var import_shared2 = require("@copilotkit/shared");
65
- var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
66
-
67
- // src/types/frontend-action.ts
68
- var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
63
+ var import_react3 = require("react");
69
64
  var import_shared = require("@copilotkit/shared");
70
- function processActionsForRuntimeRequest(actions) {
71
- const filteredActions = actions.filter(
72
- (action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
73
- ).map((action) => {
74
- let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
75
- if (action.disabled) {
76
- available = import_runtime_client_gql.ActionInputAvailability.Disabled;
77
- } else if (action.available === "disabled") {
78
- available = import_runtime_client_gql.ActionInputAvailability.Disabled;
79
- } else if (action.available === "remote") {
80
- available = import_runtime_client_gql.ActionInputAvailability.Remote;
81
- }
82
- return {
83
- name: action.name,
84
- description: action.description || "",
85
- jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
86
- available
87
- };
88
- });
89
- return filteredActions;
90
- }
91
-
92
- // src/hooks/use-copilot-runtime-client.ts
93
65
  var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
94
66
 
95
67
  // src/components/toast/toast-provider.tsx
96
- var import_react2 = require("react");
97
-
98
- // src/components/error-boundary/error-utils.tsx
99
68
  var import_react = require("react");
100
-
101
- // src/components/toast/exclamation-mark-icon.tsx
102
69
  var import_jsx_runtime = require("react/jsx-runtime");
103
- var ExclamationMarkIcon = ({
104
- className,
105
- style
106
- }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
107
- "svg",
108
- {
109
- xmlns: "http://www.w3.org/2000/svg",
110
- width: "24",
111
- height: "24",
112
- viewBox: "0 0 24 24",
113
- fill: "none",
114
- stroke: "currentColor",
115
- strokeWidth: "2",
116
- strokeLinecap: "round",
117
- strokeLinejoin: "round",
118
- className: `lucide lucide-circle-alert ${className ? className : ""}`,
119
- style,
120
- children: [
121
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
122
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
123
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
124
- ]
125
- }
126
- );
127
-
128
- // src/components/error-boundary/error-utils.tsx
129
- var import_jsx_runtime2 = require("react/jsx-runtime");
130
- function ErrorToast({ errors }) {
131
- const errorsToRender = errors.map((error, idx) => {
132
- var _a, _b, _c;
133
- const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
134
- const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
135
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
136
- "div",
137
- {
138
- style: {
139
- marginTop: idx === 0 ? 0 : 10,
140
- marginBottom: 14
141
- },
142
- children: [
143
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
144
- code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
145
- "div",
146
- {
147
- style: {
148
- fontWeight: "600",
149
- marginBottom: 4
150
- },
151
- children: [
152
- "Copilot Cloud Error:",
153
- " ",
154
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
155
- ]
156
- }
157
- ),
158
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
159
- ]
160
- },
161
- idx
162
- );
163
- });
164
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
165
- "div",
166
- {
167
- style: {
168
- fontSize: "13px",
169
- maxWidth: "600px"
170
- },
171
- children: [
172
- errorsToRender,
173
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
174
- ]
175
- }
176
- );
177
- }
178
- function useErrorToast() {
179
- const { addToast } = useToast();
180
- return (0, import_react.useCallback)(
181
- (error) => {
182
- const errorId = error.map((err) => {
183
- var _a, _b;
184
- const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
185
- const stack = err.stack || "";
186
- return btoa(message + stack).slice(0, 32);
187
- }).join("|");
188
- addToast({
189
- type: "error",
190
- id: errorId,
191
- // Toast libraries typically dedupe by id
192
- message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
193
- });
194
- },
195
- [addToast]
196
- );
197
- }
198
- function useAsyncCallback(callback, deps) {
199
- const addErrorToast = useErrorToast();
200
- return (0, import_react.useCallback)((...args) => __async(this, null, function* () {
201
- try {
202
- return yield callback(...args);
203
- } catch (error) {
204
- console.error("Error in async callback:", error);
205
- addErrorToast([error]);
206
- throw error;
207
- }
208
- }), deps);
209
- }
210
-
211
- // src/components/toast/toast-provider.tsx
212
- var import_jsx_runtime3 = require("react/jsx-runtime");
213
- var ToastContext = (0, import_react2.createContext)(void 0);
70
+ var ToastContext = (0, import_react.createContext)(void 0);
214
71
  function useToast() {
215
- const context = (0, import_react2.useContext)(ToastContext);
72
+ const context = (0, import_react.useContext)(ToastContext);
216
73
  if (!context) {
217
74
  throw new Error("useToast must be used within a ToastProvider");
218
75
  }
@@ -220,17 +77,15 @@ function useToast() {
220
77
  }
221
78
 
222
79
  // src/hooks/use-copilot-runtime-client.ts
223
- var import_react3 = require("react");
80
+ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
81
+ var import_react2 = require("react");
224
82
  var useCopilotRuntimeClient = (options) => {
225
83
  const { addGraphQLErrorsToast } = useToast();
226
- const addErrorToast = useErrorToast();
227
- const runtimeClient = (0, import_react3.useMemo)(() => {
228
- return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
84
+ const runtimeClient = (0, import_react2.useMemo)(() => {
85
+ return new import_runtime_client_gql.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
229
86
  handleGQLErrors: (error) => {
230
87
  if (error.graphQLErrors.length) {
231
88
  addGraphQLErrorsToast(error.graphQLErrors);
232
- } else {
233
- addErrorToast([error]);
234
89
  }
235
90
  }
236
91
  }));
@@ -251,317 +106,232 @@ function useChat(options) {
251
106
  actions,
252
107
  onFunctionCall,
253
108
  onCoAgentStateRender,
254
- setCoagentStatesWithRef,
255
- coagentStatesRef,
109
+ setCoagentStates,
110
+ coagentStates,
256
111
  agentSession,
257
- setAgentSession,
258
- threadId,
259
- setThreadId,
260
- runId,
261
- setRunId,
262
- chatAbortControllerRef,
263
- agentLock
112
+ setAgentSession
264
113
  } = options;
265
- const runChatCompletionRef = (0, import_react4.useRef)();
266
- const agentSessionRef = (0, import_react4.useRef)(agentSession);
114
+ const abortControllerRef = (0, import_react3.useRef)();
115
+ const threadIdRef = (0, import_react3.useRef)(null);
116
+ const runIdRef = (0, import_react3.useRef)(null);
117
+ const { addGraphQLErrorsToast } = useToast();
118
+ const runChatCompletionRef = (0, import_react3.useRef)();
119
+ const coagentStatesRef = (0, import_react3.useRef)(coagentStates);
120
+ coagentStatesRef.current = coagentStates;
121
+ const agentSessionRef = (0, import_react3.useRef)(agentSession);
267
122
  agentSessionRef.current = agentSession;
268
- const threadIdRef = (0, import_react4.useRef)(threadId);
269
- threadIdRef.current = threadId;
270
- const runIdRef = (0, import_react4.useRef)(runId);
271
- runIdRef.current = runId;
272
123
  const publicApiKey = copilotConfig.publicApiKey;
273
- const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
124
+ const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
274
125
  const runtimeClient = useCopilotRuntimeClient({
275
126
  url: copilotConfig.chatApiEndpoint,
276
127
  publicApiKey: copilotConfig.publicApiKey,
277
128
  headers,
278
129
  credentials: copilotConfig.credentials
279
130
  });
280
- const runChatCompletion = useAsyncCallback(
281
- (previousMessages) => __async(this, null, function* () {
282
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
283
- setIsLoading(true);
284
- let newMessages = [
285
- new import_runtime_client_gql3.TextMessage({
286
- content: "",
287
- role: import_runtime_client_gql3.Role.Assistant
288
- })
289
- ];
290
- chatAbortControllerRef.current = new AbortController();
291
- setMessages([...previousMessages, ...newMessages]);
292
- const systemMessage = makeSystemMessageCallback();
293
- const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
294
- const isAgentRun = agentSessionRef.current !== null;
295
- const stream = runtimeClient.asStream(
296
- runtimeClient.generateCopilotResponse({
297
- data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
298
- frontend: {
299
- actions: processActionsForRuntimeRequest(actions),
300
- url: window.location.href
301
- },
302
- threadId: threadIdRef.current,
303
- runId: runIdRef.current,
304
- messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
305
- }, copilotConfig.cloud ? {
306
- cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
307
- guardrails: {
308
- inputValidationRules: {
309
- allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
310
- denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
311
- }
131
+ const runChatCompletion = (previousMessages) => __async(this, null, function* () {
132
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
133
+ setIsLoading(true);
134
+ let newMessages = [
135
+ new import_runtime_client_gql2.TextMessage({
136
+ content: "",
137
+ role: import_runtime_client_gql2.Role.Assistant
138
+ })
139
+ ];
140
+ const abortController = new AbortController();
141
+ abortControllerRef.current = abortController;
142
+ setMessages([...previousMessages, ...newMessages]);
143
+ const systemMessage = makeSystemMessageCallback();
144
+ const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
145
+ const stream = runtimeClient.asStream(
146
+ runtimeClient.generateCopilotResponse({
147
+ data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
148
+ frontend: {
149
+ actions: actions.filter(
150
+ (action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
151
+ ).map((action) => {
152
+ let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
153
+ if (action.disabled) {
154
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
155
+ } else if (action.available === "disabled") {
156
+ available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
157
+ } else if (action.available === "remote") {
158
+ available = import_runtime_client_gql2.ActionInputAvailability.Remote;
159
+ }
160
+ return {
161
+ name: action.name,
162
+ description: action.description || "",
163
+ jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
164
+ available
165
+ };
166
+ }),
167
+ url: window.location.href
168
+ },
169
+ threadId: threadIdRef.current,
170
+ runId: runIdRef.current,
171
+ messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
172
+ }, copilotConfig.cloud ? {
173
+ cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
174
+ guardrails: {
175
+ inputValidationRules: {
176
+ allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
177
+ denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
312
178
  }
313
- } : {})
314
- } : {}), {
315
- metadata: {
316
- requestType: import_runtime_client_gql3.CopilotRequestType.Chat
317
- }
318
- }), agentSessionRef.current ? {
319
- agentSession: agentSessionRef.current
320
- } : {}), {
321
- agentStates: Object.values(coagentStatesRef.current).map((state) => ({
322
- agentName: state.name,
323
- state: JSON.stringify(state.state)
324
- })),
325
- forwardedParameters: options.forwardedParameters || {}
326
- }),
327
- properties: copilotConfig.properties,
328
- signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
329
- })
330
- );
331
- const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
332
- const reader = stream.getReader();
333
- let executedCoAgentStateRenders = [];
334
- let followUp = void 0;
335
- let messages2 = [];
336
- let syncedMessages = [];
337
- try {
338
- while (true) {
339
- let done, value;
340
- try {
341
- const readResult = yield reader.read();
342
- done = readResult.done;
343
- value = readResult.value;
344
- } catch (readError) {
345
- break;
346
- }
347
- if (done) {
348
- if (chatAbortControllerRef.current.signal.aborted) {
349
- return [];
350
179
  }
351
- break;
352
- }
353
- if (!(value == null ? void 0 : value.generateCopilotResponse)) {
354
- continue;
355
- }
356
- threadIdRef.current = value.generateCopilotResponse.threadId || null;
357
- runIdRef.current = value.generateCopilotResponse.runId || null;
358
- setThreadId(threadIdRef.current);
359
- setRunId(runIdRef.current);
360
- messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
361
- (0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
362
- );
363
- if (messages2.length === 0) {
364
- continue;
180
+ } : {})
181
+ } : {}), {
182
+ metadata: {
183
+ requestType: import_runtime_client_gql2.CopilotRequestType.Chat
365
184
  }
366
- newMessages = [];
367
- if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
368
- newMessages = [
369
- new import_runtime_client_gql3.TextMessage({
370
- role: import_runtime_client_gql3.MessageRole.Assistant,
371
- content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
372
- })
373
- ];
374
- setMessages([...previousMessages, ...newMessages]);
375
- break;
376
- } else {
377
- newMessages = [...messages2];
378
- for (const message of messages2) {
379
- if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
185
+ }), agentSessionRef.current ? {
186
+ agentSession: agentSessionRef.current
187
+ } : {}), {
188
+ agentStates: Object.values(coagentStatesRef.current).map((state) => ({
189
+ agentName: state.name,
190
+ state: JSON.stringify(state.state)
191
+ }))
192
+ }),
193
+ properties: copilotConfig.properties,
194
+ signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
195
+ })
196
+ );
197
+ const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
198
+ const reader = stream.getReader();
199
+ let actionResults = {};
200
+ let executedCoAgentStateRenders = [];
201
+ let followUp = void 0;
202
+ try {
203
+ while (true) {
204
+ let done, value;
205
+ try {
206
+ const readResult = yield reader.read();
207
+ done = readResult.done;
208
+ value = readResult.value;
209
+ } catch (readError) {
210
+ break;
211
+ }
212
+ if (done) {
213
+ break;
214
+ }
215
+ if (!(value == null ? void 0 : value.generateCopilotResponse)) {
216
+ continue;
217
+ }
218
+ threadIdRef.current = value.generateCopilotResponse.threadId || null;
219
+ runIdRef.current = value.generateCopilotResponse.runId || null;
220
+ const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
221
+ (0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
222
+ );
223
+ if (messages2.length === 0) {
224
+ continue;
225
+ }
226
+ newMessages = [];
227
+ if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
228
+ newMessages = [
229
+ new import_runtime_client_gql2.TextMessage({
230
+ role: import_runtime_client_gql2.MessageRole.Assistant,
231
+ content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
232
+ })
233
+ ];
234
+ } else {
235
+ for (const message of messages2) {
236
+ newMessages.push(message);
237
+ if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
238
+ if (!(message.id in actionResults)) {
380
239
  if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
381
240
  break;
382
241
  }
383
- yield onCoAgentStateRender({
384
- name: message.agentName,
385
- nodeName: message.nodeName,
386
- state: message.state
387
- });
388
- executedCoAgentStateRenders.push(message.id);
389
- }
390
- }
391
- const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
392
- if (lastAgentStateMessage) {
393
- if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
394
- syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
395
- lastAgentStateMessage.state.messages
396
- );
397
- }
398
- setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
399
- [lastAgentStateMessage.agentName]: {
400
- name: lastAgentStateMessage.agentName,
401
- state: lastAgentStateMessage.state,
402
- running: lastAgentStateMessage.running,
403
- active: lastAgentStateMessage.active,
404
- threadId: lastAgentStateMessage.threadId,
405
- nodeName: lastAgentStateMessage.nodeName,
406
- runId: lastAgentStateMessage.runId
407
- }
408
- }));
409
- if (lastAgentStateMessage.running) {
410
- setAgentSession({
411
- threadId: lastAgentStateMessage.threadId,
412
- agentName: lastAgentStateMessage.agentName,
413
- nodeName: lastAgentStateMessage.nodeName
414
- });
415
- } else {
416
- if (agentLock) {
417
- setAgentSession({
418
- threadId: (0, import_shared2.randomId)(),
419
- agentName: agentLock,
420
- nodeName: void 0
421
- });
422
- } else {
423
- setAgentSession(null);
424
- }
425
- }
426
- }
427
- }
428
- if (newMessages.length > 0) {
429
- setMessages([...previousMessages, ...newMessages]);
430
- }
431
- }
432
- const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
433
- let didExecuteAction = false;
434
- if (onFunctionCall) {
435
- const lastMessages = [];
436
- for (let i = finalMessages.length - 1; i >= 0; i--) {
437
- const message = finalMessages[i];
438
- if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
439
- lastMessages.unshift(message);
440
- } else {
441
- break;
442
- }
443
- }
444
- for (const message of lastMessages) {
445
- setMessages(finalMessages);
446
- const action = actions.find((action2) => action2.name === message.name);
447
- if (action) {
448
- followUp = action.followUp;
449
- let result;
450
- try {
451
- result = yield Promise.race([
452
- onFunctionCall({
242
+ try {
243
+ setMessages([...previousMessages, ...newMessages]);
244
+ const action = actions.find((action2) => action2.name === message.name);
245
+ if (action) {
246
+ followUp = action.followUp;
247
+ }
248
+ const result = yield onFunctionCall({
453
249
  messages: previousMessages,
454
250
  name: message.name,
455
251
  args: message.arguments
456
- }),
457
- new Promise(
458
- (resolve) => {
459
- var _a2;
460
- return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
461
- "abort",
462
- () => resolve("Operation was aborted by the user")
463
- );
464
- }
465
- ),
466
- // if the user stopped generation, we also abort consecutive actions
467
- new Promise((resolve) => {
468
- var _a2;
469
- if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
470
- resolve("Operation was aborted by the user");
471
- }
472
- })
473
- ]);
474
- } catch (e) {
475
- result = `Failed to execute action ${message.name}`;
476
- console.error(`Failed to execute action ${message.name}: ${e}`);
252
+ });
253
+ actionResults[message.id] = result;
254
+ } catch (e) {
255
+ actionResults[message.id] = `Failed to execute action ${message.name}`;
256
+ console.error(`Failed to execute action ${message.name}: ${e}`);
257
+ }
477
258
  }
478
- didExecuteAction = true;
479
- const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
480
- finalMessages.splice(
481
- messageIndex + 1,
482
- 0,
483
- new import_runtime_client_gql3.ResultMessage({
484
- id: "result-" + message.id,
485
- result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
259
+ newMessages.push(
260
+ new import_runtime_client_gql2.ResultMessage({
261
+ result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
486
262
  actionExecutionId: message.id,
487
263
  actionName: message.name
488
264
  })
489
265
  );
490
266
  }
267
+ if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
268
+ if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
269
+ break;
270
+ }
271
+ yield onCoAgentStateRender({
272
+ name: message.agentName,
273
+ nodeName: message.nodeName,
274
+ state: message.state
275
+ });
276
+ executedCoAgentStateRenders.push(message.id);
277
+ }
491
278
  }
492
- setMessages(finalMessages);
493
- }
494
- if (
495
- // if followUp is not explicitly false
496
- followUp !== false && // and we executed an action
497
- (didExecuteAction || // the last message is a server side result
498
- !isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
499
- !((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
500
- ) {
501
- yield new Promise((resolve) => setTimeout(resolve, 10));
502
- return yield runChatCompletionRef.current(finalMessages);
503
- } else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
504
- const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
505
- if (message.isActionExecutionMessage()) {
506
- return finalMessages.find(
507
- (msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
508
- );
279
+ const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
280
+ if (lastAgentStateMessage) {
281
+ setCoagentStates((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
282
+ [lastAgentStateMessage.agentName]: {
283
+ name: lastAgentStateMessage.agentName,
284
+ state: lastAgentStateMessage.state,
285
+ running: lastAgentStateMessage.running,
286
+ active: lastAgentStateMessage.active,
287
+ threadId: lastAgentStateMessage.threadId,
288
+ nodeName: lastAgentStateMessage.nodeName,
289
+ runId: lastAgentStateMessage.runId
290
+ }
291
+ }));
292
+ if (lastAgentStateMessage.running) {
293
+ setAgentSession({
294
+ threadId: lastAgentStateMessage.threadId,
295
+ agentName: lastAgentStateMessage.agentName,
296
+ nodeName: lastAgentStateMessage.nodeName
297
+ });
298
+ } else {
299
+ setAgentSession(null);
509
300
  }
510
- return true;
511
- });
512
- const repairedMessageIds = repairedMessages.map((message) => message.id);
513
- setMessages(repairedMessages);
514
- if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
515
- setAgentSession({
516
- threadId: agentSessionRef.current.threadId,
517
- agentName: agentSessionRef.current.agentName,
518
- nodeName: "__end__"
519
- });
520
301
  }
521
- return newMessages.filter((message) => repairedMessageIds.includes(message.id));
522
- } else {
523
- return newMessages.slice();
524
302
  }
525
- } finally {
526
- setIsLoading(false);
303
+ if (newMessages.length > 0) {
304
+ setMessages([...previousMessages, ...newMessages]);
305
+ }
527
306
  }
528
- }),
529
- [
530
- messages,
531
- setMessages,
532
- makeSystemMessageCallback,
533
- copilotConfig,
534
- setIsLoading,
535
- initialMessages,
536
- isLoading,
537
- actions,
538
- onFunctionCall,
539
- onCoAgentStateRender,
540
- setCoagentStatesWithRef,
541
- coagentStatesRef,
542
- agentSession,
543
- setAgentSession
544
- ]
545
- );
546
- runChatCompletionRef.current = runChatCompletion;
547
- const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
548
- (messages2) => __async(this, null, function* () {
549
- yield runChatCompletionRef.current(messages2);
550
- }),
551
- [messages]
552
- );
553
- const append = useAsyncCallback(
554
- (message) => __async(this, null, function* () {
555
- if (isLoading) {
556
- return;
307
+ if (
308
+ // if followUp is not explicitly false
309
+ followUp !== false && // if we have client side results
310
+ (Object.values(actionResults).length || // or the last message we received is a result
311
+ newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
312
+ ) {
313
+ yield new Promise((resolve) => setTimeout(resolve, 10));
314
+ return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
315
+ } else {
316
+ return newMessages.slice();
557
317
  }
558
- const newMessages = [...messages, message];
559
- setMessages(newMessages);
560
- return runChatCompletionAndHandleFunctionCall(newMessages);
561
- }),
562
- [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
563
- );
564
- const reload = useAsyncCallback(() => __async(this, null, function* () {
318
+ } finally {
319
+ setIsLoading(false);
320
+ }
321
+ });
322
+ runChatCompletionRef.current = runChatCompletion;
323
+ const runChatCompletionAndHandleFunctionCall = (messages2) => __async(this, null, function* () {
324
+ yield runChatCompletionRef.current(messages2);
325
+ });
326
+ const append = (message) => __async(this, null, function* () {
327
+ if (isLoading) {
328
+ return;
329
+ }
330
+ const newMessages = [...messages, message];
331
+ setMessages(newMessages);
332
+ return runChatCompletionAndHandleFunctionCall(newMessages);
333
+ });
334
+ const reload = () => __async(this, null, function* () {
565
335
  if (isLoading || messages.length === 0) {
566
336
  return;
567
337
  }
@@ -572,35 +342,17 @@ function useChat(options) {
572
342
  }
573
343
  setMessages(newMessages);
574
344
  return runChatCompletionAndHandleFunctionCall(newMessages);
575
- }), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
345
+ });
576
346
  const stop = () => {
577
347
  var _a;
578
- (_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
348
+ (_a = abortControllerRef.current) == null ? void 0 : _a.abort();
579
349
  };
580
350
  return {
581
351
  append,
582
352
  reload,
583
- stop,
584
- runChatCompletion: () => runChatCompletionRef.current(messages)
353
+ stop
585
354
  };
586
355
  }
587
- function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
588
- const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
589
- if (syncedMessages.length > 0) {
590
- const messagesWithAgentState = [...previousMessages, ...newMessages];
591
- let previousMessageId = void 0;
592
- for (const message of messagesWithAgentState) {
593
- if (message.isAgentStateMessage()) {
594
- const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
595
- if (index !== -1) {
596
- finalMessages.splice(index + 1, 0, message);
597
- }
598
- }
599
- previousMessageId = message.id;
600
- }
601
- }
602
- return finalMessages;
603
- }
604
356
  // Annotate the CommonJS export names for ESM import in node:
605
357
  0 && (module.exports = {
606
358
  useChat