@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.
- package/CHANGELOG.md +22 -3
- package/dist/{chunk-JHEAUB3Z.mjs → chunk-35EN6BG4.mjs} +2 -2
- package/dist/{chunk-JHEAUB3Z.mjs.map → chunk-35EN6BG4.mjs.map} +1 -1
- package/dist/{chunk-O22KGHOQ.mjs → chunk-42N5VKIX.mjs} +38 -16
- package/dist/chunk-42N5VKIX.mjs.map +1 -0
- package/dist/{chunk-AG7FH7OD.mjs → chunk-5FYKUKG3.mjs} +2 -2
- package/dist/{chunk-ODN4H66E.mjs → chunk-7LRDVJH5.mjs} +6 -2
- package/dist/chunk-7LRDVJH5.mjs.map +1 -0
- package/dist/{chunk-Y7MI4PBB.mjs → chunk-ALR5W5JK.mjs} +22 -10
- package/dist/chunk-ALR5W5JK.mjs.map +1 -0
- package/dist/{chunk-XBVKTDXP.mjs → chunk-BT6WK2JZ.mjs} +57 -17
- package/dist/chunk-BT6WK2JZ.mjs.map +1 -0
- package/dist/chunk-QCUP6HLK.mjs +37 -0
- package/dist/chunk-QCUP6HLK.mjs.map +1 -0
- package/dist/chunk-QTDCEDOC.mjs +392 -0
- package/dist/chunk-QTDCEDOC.mjs.map +1 -0
- package/dist/{chunk-OT67R4NB.mjs → chunk-QX6V774L.mjs} +6 -8
- package/dist/chunk-QX6V774L.mjs.map +1 -0
- package/dist/{chunk-2KCEHGSI.mjs → chunk-SFPANIOY.mjs} +99 -49
- package/dist/chunk-SFPANIOY.mjs.map +1 -0
- package/dist/{chunk-XQFVXX6R.mjs → chunk-TQN3EZWQ.mjs} +10 -2
- package/dist/chunk-TQN3EZWQ.mjs.map +1 -0
- package/dist/{chunk-UOVONDR6.mjs → chunk-V3PFWGIY.mjs} +2 -2
- package/dist/{chunk-DHGXL5PC.mjs → chunk-VMP6JWBB.mjs} +18 -6
- package/dist/chunk-VMP6JWBB.mjs.map +1 -0
- package/dist/chunk-XERJQUHA.mjs +31 -0
- package/dist/chunk-XERJQUHA.mjs.map +1 -0
- package/dist/components/copilot-provider/copilotkit.js +175 -93
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +5 -4
- package/dist/components/copilot-provider/index.js +175 -93
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +5 -4
- package/dist/components/error-boundary/error-boundary.d.ts +22 -0
- package/dist/components/error-boundary/error-boundary.js +183 -0
- package/dist/components/error-boundary/error-boundary.js.map +1 -0
- package/dist/components/error-boundary/error-boundary.mjs +12 -0
- package/dist/components/error-boundary/error-boundary.mjs.map +1 -0
- package/dist/components/error-boundary/error-utils.d.ts +11 -0
- package/dist/components/error-boundary/error-utils.js +177 -0
- package/dist/components/error-boundary/error-utils.js.map +1 -0
- package/dist/components/error-boundary/error-utils.mjs +13 -0
- package/dist/components/error-boundary/error-utils.mjs.map +1 -0
- package/dist/components/index.js +175 -93
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +5 -4
- package/dist/components/toast/toast-provider.d.ts +2 -1
- package/dist/components/toast/toast-provider.js +76 -62
- package/dist/components/toast/toast-provider.js.map +1 -1
- package/dist/components/toast/toast-provider.mjs +1 -1
- package/dist/context/copilot-context.d.ts +8 -2
- package/dist/context/copilot-context.js +9 -1
- package/dist/context/copilot-context.js.map +1 -1
- package/dist/context/copilot-context.mjs +1 -1
- package/dist/context/index.d.ts +1 -1
- package/dist/context/index.js +9 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +1 -1
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.js +584 -270
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +19 -11
- package/dist/hooks/use-chat.d.ts +20 -0
- package/dist/hooks/use-chat.js +438 -200
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +4 -3
- package/dist/hooks/use-coagent-state-render.d.ts +2 -2
- package/dist/hooks/use-coagent-state-render.js +9 -1
- package/dist/hooks/use-coagent-state-render.js.map +1 -1
- package/dist/hooks/use-coagent-state-render.mjs +2 -2
- package/dist/hooks/use-coagent.d.ts +14 -1
- package/dist/hooks/use-coagent.js +547 -242
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +15 -7
- package/dist/hooks/use-copilot-action.d.ts +12 -2
- package/dist/hooks/use-copilot-action.js +156 -14
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +4 -2
- package/dist/hooks/use-copilot-chat.d.ts +1 -0
- package/dist/hooks/use-copilot-chat.js +514 -231
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +8 -6
- package/dist/hooks/use-copilot-readable.js +9 -1
- package/dist/hooks/use-copilot-readable.js.map +1 -1
- package/dist/hooks/use-copilot-readable.mjs +2 -2
- package/dist/hooks/use-copilot-runtime-client.js +110 -4
- package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
- package/dist/hooks/use-copilot-runtime-client.mjs +2 -2
- package/dist/hooks/use-make-copilot-document-readable.js +9 -1
- package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
- package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +642 -363
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -12
- package/dist/lib/copilot-task.d.ts +1 -1
- package/dist/lib/copilot-task.js +33 -13
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +7 -5
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +33 -13
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +7 -5
- package/dist/types/frontend-action.d.ts +21 -2
- package/dist/types/frontend-action.js +34 -0
- package/dist/types/frontend-action.js.map +1 -1
- package/dist/types/frontend-action.mjs +7 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/extract.js.map +1 -1
- package/dist/utils/extract.mjs +5 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +5 -4
- package/package.json +3 -3
- package/src/components/copilot-provider/copilotkit.tsx +14 -1
- package/src/components/error-boundary/error-boundary.tsx +42 -0
- package/src/components/error-boundary/error-utils.tsx +95 -0
- package/src/components/toast/toast-provider.tsx +10 -49
- package/src/context/copilot-context.tsx +30 -2
- package/src/hooks/index.ts +1 -1
- package/src/hooks/use-chat.ts +391 -256
- package/src/hooks/use-coagent-state-render.ts +2 -2
- package/src/hooks/use-coagent.ts +35 -15
- package/src/hooks/use-copilot-action.ts +41 -12
- package/src/hooks/use-copilot-chat.ts +52 -11
- package/src/hooks/use-copilot-runtime-client.ts +4 -0
- package/src/lib/copilot-task.ts +2 -8
- package/src/types/frontend-action.ts +55 -2
- package/src/types/index.ts +5 -1
- package/dist/chunk-2KCEHGSI.mjs.map +0 -1
- package/dist/chunk-DHGXL5PC.mjs.map +0 -1
- package/dist/chunk-EUIBVFV6.mjs +0 -294
- package/dist/chunk-EUIBVFV6.mjs.map +0 -1
- package/dist/chunk-O22KGHOQ.mjs.map +0 -1
- package/dist/chunk-ODN4H66E.mjs.map +0 -1
- package/dist/chunk-OT67R4NB.mjs.map +0 -1
- package/dist/chunk-XBVKTDXP.mjs.map +0 -1
- package/dist/chunk-XQFVXX6R.mjs.map +0 -1
- package/dist/chunk-Y7MI4PBB.mjs.map +0 -1
- /package/dist/{chunk-AG7FH7OD.mjs.map → chunk-5FYKUKG3.mjs.map} +0 -0
- /package/dist/{chunk-UOVONDR6.mjs.map → chunk-V3PFWGIY.mjs.map} +0 -0
package/dist/hooks/index.js
CHANGED
|
@@ -79,6 +79,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
79
79
|
// src/hooks/index.ts
|
|
80
80
|
var hooks_exports = {};
|
|
81
81
|
__export(hooks_exports, {
|
|
82
|
+
runAgent: () => runAgent,
|
|
83
|
+
startAgent: () => startAgent,
|
|
84
|
+
stopAgent: () => stopAgent,
|
|
82
85
|
useCoAgent: () => useCoAgent,
|
|
83
86
|
useCoAgentStateRender: () => useCoAgentStateRender,
|
|
84
87
|
useCopilotAction: () => useCopilotAction,
|
|
@@ -90,7 +93,7 @@ __export(hooks_exports, {
|
|
|
90
93
|
module.exports = __toCommonJS(hooks_exports);
|
|
91
94
|
|
|
92
95
|
// src/hooks/use-copilot-chat.ts
|
|
93
|
-
var
|
|
96
|
+
var import_react8 = require("react");
|
|
94
97
|
|
|
95
98
|
// src/context/copilot-context.tsx
|
|
96
99
|
var import_react = __toESM(require("react"));
|
|
@@ -146,7 +149,15 @@ var emptyCopilotContext = {
|
|
|
146
149
|
},
|
|
147
150
|
agentSession: null,
|
|
148
151
|
setAgentSession: () => {
|
|
149
|
-
}
|
|
152
|
+
},
|
|
153
|
+
agentLock: null,
|
|
154
|
+
threadId: null,
|
|
155
|
+
setThreadId: () => {
|
|
156
|
+
},
|
|
157
|
+
runId: null,
|
|
158
|
+
setRunId: () => {
|
|
159
|
+
},
|
|
160
|
+
chatAbortControllerRef: { current: null }
|
|
150
161
|
};
|
|
151
162
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
152
163
|
function useCopilotContext() {
|
|
@@ -162,19 +173,159 @@ function returnAndThrowInDebug(value) {
|
|
|
162
173
|
}
|
|
163
174
|
|
|
164
175
|
// src/hooks/use-copilot-chat.ts
|
|
165
|
-
var
|
|
176
|
+
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
166
177
|
|
|
167
178
|
// src/hooks/use-chat.ts
|
|
168
|
-
var
|
|
179
|
+
var import_react5 = require("react");
|
|
180
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
181
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
182
|
+
|
|
183
|
+
// src/types/frontend-action.ts
|
|
184
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
169
185
|
var import_shared = require("@copilotkit/shared");
|
|
170
|
-
|
|
186
|
+
function processActionsForRuntimeRequest(actions) {
|
|
187
|
+
const filteredActions = actions.filter(
|
|
188
|
+
(action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
|
|
189
|
+
).map((action) => {
|
|
190
|
+
let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
|
|
191
|
+
if (action.disabled) {
|
|
192
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
193
|
+
} else if (action.available === "disabled") {
|
|
194
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
195
|
+
} else if (action.available === "remote") {
|
|
196
|
+
available = import_runtime_client_gql.ActionInputAvailability.Remote;
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
name: action.name,
|
|
200
|
+
description: action.description || "",
|
|
201
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
202
|
+
available
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
return filteredActions;
|
|
206
|
+
}
|
|
171
207
|
|
|
172
208
|
// src/components/toast/toast-provider.tsx
|
|
209
|
+
var import_react3 = require("react");
|
|
210
|
+
|
|
211
|
+
// src/components/error-boundary/error-utils.tsx
|
|
173
212
|
var import_react2 = require("react");
|
|
213
|
+
|
|
214
|
+
// src/components/toast/exclamation-mark-icon.tsx
|
|
174
215
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
175
|
-
var
|
|
216
|
+
var ExclamationMarkIcon = ({
|
|
217
|
+
className,
|
|
218
|
+
style
|
|
219
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
220
|
+
"svg",
|
|
221
|
+
{
|
|
222
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
223
|
+
width: "24",
|
|
224
|
+
height: "24",
|
|
225
|
+
viewBox: "0 0 24 24",
|
|
226
|
+
fill: "none",
|
|
227
|
+
stroke: "currentColor",
|
|
228
|
+
strokeWidth: "2",
|
|
229
|
+
strokeLinecap: "round",
|
|
230
|
+
strokeLinejoin: "round",
|
|
231
|
+
className: `lucide lucide-circle-alert ${className ? className : ""}`,
|
|
232
|
+
style,
|
|
233
|
+
children: [
|
|
234
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
235
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
|
|
236
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
// src/components/error-boundary/error-utils.tsx
|
|
242
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
243
|
+
function ErrorToast({ errors }) {
|
|
244
|
+
const errorsToRender = errors.map((error, idx) => {
|
|
245
|
+
var _a, _b, _c;
|
|
246
|
+
const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
|
|
247
|
+
const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
|
|
248
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
249
|
+
"div",
|
|
250
|
+
{
|
|
251
|
+
style: {
|
|
252
|
+
marginTop: idx === 0 ? 0 : 10,
|
|
253
|
+
marginBottom: 14
|
|
254
|
+
},
|
|
255
|
+
children: [
|
|
256
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
|
|
257
|
+
code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
258
|
+
"div",
|
|
259
|
+
{
|
|
260
|
+
style: {
|
|
261
|
+
fontWeight: "600",
|
|
262
|
+
marginBottom: 4
|
|
263
|
+
},
|
|
264
|
+
children: [
|
|
265
|
+
"Copilot Cloud Error:",
|
|
266
|
+
" ",
|
|
267
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
),
|
|
271
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
|
|
272
|
+
]
|
|
273
|
+
},
|
|
274
|
+
idx
|
|
275
|
+
);
|
|
276
|
+
});
|
|
277
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
278
|
+
"div",
|
|
279
|
+
{
|
|
280
|
+
style: {
|
|
281
|
+
fontSize: "13px",
|
|
282
|
+
maxWidth: "600px"
|
|
283
|
+
},
|
|
284
|
+
children: [
|
|
285
|
+
errorsToRender,
|
|
286
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
function useErrorToast() {
|
|
292
|
+
const { addToast } = useToast();
|
|
293
|
+
return (0, import_react2.useCallback)(
|
|
294
|
+
(error) => {
|
|
295
|
+
const errorId = error.map((err) => {
|
|
296
|
+
var _a, _b;
|
|
297
|
+
const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
|
|
298
|
+
const stack = err.stack || "";
|
|
299
|
+
return btoa(message + stack).slice(0, 32);
|
|
300
|
+
}).join("|");
|
|
301
|
+
addToast({
|
|
302
|
+
type: "error",
|
|
303
|
+
id: errorId,
|
|
304
|
+
// Toast libraries typically dedupe by id
|
|
305
|
+
message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
|
|
306
|
+
});
|
|
307
|
+
},
|
|
308
|
+
[addToast]
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
function useAsyncCallback(callback, deps) {
|
|
312
|
+
const addErrorToast = useErrorToast();
|
|
313
|
+
return (0, import_react2.useCallback)((...args) => __async(this, null, function* () {
|
|
314
|
+
try {
|
|
315
|
+
return yield callback(...args);
|
|
316
|
+
} catch (error) {
|
|
317
|
+
console.error("Error in async callback:", error);
|
|
318
|
+
addErrorToast([error]);
|
|
319
|
+
throw error;
|
|
320
|
+
}
|
|
321
|
+
}), deps);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// src/components/toast/toast-provider.tsx
|
|
325
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
326
|
+
var ToastContext = (0, import_react3.createContext)(void 0);
|
|
176
327
|
function useToast() {
|
|
177
|
-
const context = (0,
|
|
328
|
+
const context = (0, import_react3.useContext)(ToastContext);
|
|
178
329
|
if (!context) {
|
|
179
330
|
throw new Error("useToast must be used within a ToastProvider");
|
|
180
331
|
}
|
|
@@ -182,15 +333,18 @@ function useToast() {
|
|
|
182
333
|
}
|
|
183
334
|
|
|
184
335
|
// src/hooks/use-copilot-runtime-client.ts
|
|
185
|
-
var
|
|
186
|
-
var
|
|
336
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
337
|
+
var import_react4 = require("react");
|
|
187
338
|
var useCopilotRuntimeClient = (options) => {
|
|
188
339
|
const { addGraphQLErrorsToast } = useToast();
|
|
189
|
-
const
|
|
190
|
-
|
|
340
|
+
const addErrorToast = useErrorToast();
|
|
341
|
+
const runtimeClient = (0, import_react4.useMemo)(() => {
|
|
342
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
191
343
|
handleGQLErrors: (error) => {
|
|
192
344
|
if (error.graphQLErrors.length) {
|
|
193
345
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
346
|
+
} else {
|
|
347
|
+
addErrorToast([error]);
|
|
194
348
|
}
|
|
195
349
|
}
|
|
196
350
|
}));
|
|
@@ -214,227 +368,305 @@ function useChat(options) {
|
|
|
214
368
|
setCoagentStatesWithRef,
|
|
215
369
|
coagentStatesRef,
|
|
216
370
|
agentSession,
|
|
217
|
-
setAgentSession
|
|
371
|
+
setAgentSession,
|
|
372
|
+
threadId,
|
|
373
|
+
setThreadId,
|
|
374
|
+
runId,
|
|
375
|
+
setRunId,
|
|
376
|
+
chatAbortControllerRef
|
|
218
377
|
} = options;
|
|
219
|
-
const abortControllerRef = (0, import_react4.useRef)();
|
|
220
|
-
const threadIdRef = (0, import_react4.useRef)(null);
|
|
221
|
-
const runIdRef = (0, import_react4.useRef)(null);
|
|
222
378
|
const { addGraphQLErrorsToast } = useToast();
|
|
223
|
-
const runChatCompletionRef = (0,
|
|
224
|
-
const agentSessionRef = (0,
|
|
379
|
+
const runChatCompletionRef = (0, import_react5.useRef)();
|
|
380
|
+
const agentSessionRef = (0, import_react5.useRef)(agentSession);
|
|
225
381
|
agentSessionRef.current = agentSession;
|
|
382
|
+
const threadIdRef = (0, import_react5.useRef)(threadId);
|
|
383
|
+
threadIdRef.current = threadId;
|
|
384
|
+
const runIdRef = (0, import_react5.useRef)(runId);
|
|
385
|
+
runIdRef.current = runId;
|
|
226
386
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
227
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
387
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
228
388
|
const runtimeClient = useCopilotRuntimeClient({
|
|
229
389
|
url: copilotConfig.chatApiEndpoint,
|
|
230
390
|
publicApiKey: copilotConfig.publicApiKey,
|
|
231
391
|
headers,
|
|
232
392
|
credentials: copilotConfig.credentials
|
|
233
393
|
});
|
|
234
|
-
const runChatCompletion = (
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
runtimeClient.
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
(
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
267
|
-
available
|
|
268
|
-
};
|
|
269
|
-
}),
|
|
270
|
-
url: window.location.href
|
|
271
|
-
},
|
|
272
|
-
threadId: threadIdRef.current,
|
|
273
|
-
runId: runIdRef.current,
|
|
274
|
-
messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
|
|
275
|
-
}, copilotConfig.cloud ? {
|
|
276
|
-
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
277
|
-
guardrails: {
|
|
278
|
-
inputValidationRules: {
|
|
279
|
-
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
280
|
-
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
394
|
+
const runChatCompletion = useAsyncCallback(
|
|
395
|
+
(previousMessages) => __async(this, null, function* () {
|
|
396
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
397
|
+
setIsLoading(true);
|
|
398
|
+
let newMessages = [
|
|
399
|
+
new import_runtime_client_gql3.TextMessage({
|
|
400
|
+
content: "",
|
|
401
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
402
|
+
})
|
|
403
|
+
];
|
|
404
|
+
chatAbortControllerRef.current = new AbortController();
|
|
405
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
406
|
+
const systemMessage = makeSystemMessageCallback();
|
|
407
|
+
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
408
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
409
|
+
const stream = runtimeClient.asStream(
|
|
410
|
+
runtimeClient.generateCopilotResponse({
|
|
411
|
+
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
412
|
+
frontend: {
|
|
413
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
414
|
+
url: window.location.href
|
|
415
|
+
},
|
|
416
|
+
threadId: threadIdRef.current,
|
|
417
|
+
runId: runIdRef.current,
|
|
418
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
419
|
+
}, copilotConfig.cloud ? {
|
|
420
|
+
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
421
|
+
guardrails: {
|
|
422
|
+
inputValidationRules: {
|
|
423
|
+
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
424
|
+
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
425
|
+
}
|
|
281
426
|
}
|
|
427
|
+
} : {})
|
|
428
|
+
} : {}), {
|
|
429
|
+
metadata: {
|
|
430
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
282
431
|
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
432
|
+
}), agentSessionRef.current ? {
|
|
433
|
+
agentSession: agentSessionRef.current
|
|
434
|
+
} : {}), {
|
|
435
|
+
agentStates: Object.values(coagentStatesRef.current).map((state) => ({
|
|
436
|
+
agentName: state.name,
|
|
437
|
+
state: JSON.stringify(state.state)
|
|
438
|
+
}))
|
|
439
|
+
}),
|
|
440
|
+
properties: copilotConfig.properties,
|
|
441
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
442
|
+
})
|
|
443
|
+
);
|
|
444
|
+
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
445
|
+
const reader = stream.getReader();
|
|
446
|
+
let executedCoAgentStateRenders = [];
|
|
447
|
+
let followUp = void 0;
|
|
448
|
+
let messages2 = [];
|
|
449
|
+
let syncedMessages = [];
|
|
450
|
+
try {
|
|
451
|
+
while (true) {
|
|
452
|
+
let done, value;
|
|
453
|
+
try {
|
|
454
|
+
const readResult = yield reader.read();
|
|
455
|
+
done = readResult.done;
|
|
456
|
+
value = readResult.value;
|
|
457
|
+
} catch (readError) {
|
|
458
|
+
break;
|
|
287
459
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
322
|
-
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
323
|
-
const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
|
|
324
|
-
(0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
325
|
-
);
|
|
326
|
-
if (messages2.length === 0) {
|
|
327
|
-
continue;
|
|
328
|
-
}
|
|
329
|
-
newMessages = [];
|
|
330
|
-
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
331
|
-
newMessages = [
|
|
332
|
-
new import_runtime_client_gql2.TextMessage({
|
|
333
|
-
role: import_runtime_client_gql2.MessageRole.Assistant,
|
|
334
|
-
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
335
|
-
})
|
|
336
|
-
];
|
|
337
|
-
} else {
|
|
338
|
-
for (const message of messages2) {
|
|
339
|
-
newMessages.push(message);
|
|
340
|
-
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
341
|
-
if (!(message.id in actionResults)) {
|
|
460
|
+
if (done) {
|
|
461
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
462
|
+
return [];
|
|
463
|
+
}
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
469
|
+
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
470
|
+
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
471
|
+
setThreadId(threadIdRef.current);
|
|
472
|
+
setRunId(runIdRef.current);
|
|
473
|
+
messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
|
|
474
|
+
(0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
475
|
+
);
|
|
476
|
+
if (messages2.length === 0) {
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
479
|
+
newMessages = [];
|
|
480
|
+
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
481
|
+
newMessages = [
|
|
482
|
+
new import_runtime_client_gql3.TextMessage({
|
|
483
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
484
|
+
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
485
|
+
})
|
|
486
|
+
];
|
|
487
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
488
|
+
break;
|
|
489
|
+
} else {
|
|
490
|
+
newMessages = [...messages2];
|
|
491
|
+
for (const message of messages2) {
|
|
492
|
+
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
342
493
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
343
494
|
break;
|
|
344
495
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
496
|
+
yield onCoAgentStateRender({
|
|
497
|
+
name: message.agentName,
|
|
498
|
+
nodeName: message.nodeName,
|
|
499
|
+
state: message.state
|
|
500
|
+
});
|
|
501
|
+
executedCoAgentStateRenders.push(message.id);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
505
|
+
if (lastAgentStateMessage) {
|
|
506
|
+
if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
|
|
507
|
+
syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
|
|
508
|
+
lastAgentStateMessage.state.messages
|
|
509
|
+
);
|
|
510
|
+
}
|
|
511
|
+
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
512
|
+
[lastAgentStateMessage.agentName]: {
|
|
513
|
+
name: lastAgentStateMessage.agentName,
|
|
514
|
+
state: lastAgentStateMessage.state,
|
|
515
|
+
running: lastAgentStateMessage.running,
|
|
516
|
+
active: lastAgentStateMessage.active,
|
|
517
|
+
threadId: lastAgentStateMessage.threadId,
|
|
518
|
+
nodeName: lastAgentStateMessage.nodeName,
|
|
519
|
+
runId: lastAgentStateMessage.runId
|
|
520
|
+
}
|
|
521
|
+
}));
|
|
522
|
+
if (lastAgentStateMessage.running) {
|
|
523
|
+
setAgentSession({
|
|
524
|
+
threadId: lastAgentStateMessage.threadId,
|
|
525
|
+
agentName: lastAgentStateMessage.agentName,
|
|
526
|
+
nodeName: lastAgentStateMessage.nodeName
|
|
527
|
+
});
|
|
528
|
+
} else {
|
|
529
|
+
setAgentSession(null);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (newMessages.length > 0) {
|
|
534
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
|
|
538
|
+
let didExecuteAction = false;
|
|
539
|
+
if (onFunctionCall) {
|
|
540
|
+
const lastMessages = [];
|
|
541
|
+
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
542
|
+
const message = finalMessages[i];
|
|
543
|
+
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
|
|
544
|
+
lastMessages.unshift(message);
|
|
545
|
+
} else {
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
for (const message of lastMessages) {
|
|
550
|
+
setMessages(finalMessages);
|
|
551
|
+
const action = actions.find((action2) => action2.name === message.name);
|
|
552
|
+
if (action) {
|
|
553
|
+
followUp = action.followUp;
|
|
554
|
+
let result;
|
|
555
|
+
try {
|
|
556
|
+
result = yield Promise.race([
|
|
557
|
+
onFunctionCall({
|
|
352
558
|
messages: previousMessages,
|
|
353
559
|
name: message.name,
|
|
354
560
|
args: message.arguments
|
|
355
|
-
})
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
561
|
+
}),
|
|
562
|
+
new Promise(
|
|
563
|
+
(resolve) => {
|
|
564
|
+
var _a2;
|
|
565
|
+
return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
|
|
566
|
+
"abort",
|
|
567
|
+
() => resolve("Operation was aborted by the user")
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
),
|
|
571
|
+
// if the user stopped generation, we also abort consecutive actions
|
|
572
|
+
new Promise((resolve) => {
|
|
573
|
+
var _a2;
|
|
574
|
+
if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
|
|
575
|
+
resolve("Operation was aborted by the user");
|
|
576
|
+
}
|
|
577
|
+
})
|
|
578
|
+
]);
|
|
579
|
+
} catch (e) {
|
|
580
|
+
result = `Failed to execute action ${message.name}`;
|
|
581
|
+
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
361
582
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
583
|
+
didExecuteAction = true;
|
|
584
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
|
|
585
|
+
finalMessages.splice(
|
|
586
|
+
messageIndex + 1,
|
|
587
|
+
0,
|
|
588
|
+
new import_runtime_client_gql3.ResultMessage({
|
|
589
|
+
id: "result-" + message.id,
|
|
590
|
+
result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
|
|
365
591
|
actionExecutionId: message.id,
|
|
366
592
|
actionName: message.name
|
|
367
593
|
})
|
|
368
594
|
);
|
|
369
595
|
}
|
|
370
|
-
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
371
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
yield onCoAgentStateRender({
|
|
375
|
-
name: message.agentName,
|
|
376
|
-
nodeName: message.nodeName,
|
|
377
|
-
state: message.state
|
|
378
|
-
});
|
|
379
|
-
executedCoAgentStateRenders.push(message.id);
|
|
380
|
-
}
|
|
381
596
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
if (
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
nodeName: lastAgentStateMessage.nodeName
|
|
400
|
-
});
|
|
401
|
-
} else {
|
|
402
|
-
setAgentSession(null);
|
|
597
|
+
setMessages(finalMessages);
|
|
598
|
+
}
|
|
599
|
+
if (
|
|
600
|
+
// if followUp is not explicitly false
|
|
601
|
+
followUp !== false && // and we executed an action
|
|
602
|
+
(didExecuteAction || // the last message is a server side result
|
|
603
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
604
|
+
!((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
|
|
605
|
+
) {
|
|
606
|
+
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
607
|
+
return yield runChatCompletionRef.current(finalMessages);
|
|
608
|
+
} else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
|
|
609
|
+
const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
|
|
610
|
+
if (message.isActionExecutionMessage()) {
|
|
611
|
+
return finalMessages.find(
|
|
612
|
+
(msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
|
|
613
|
+
);
|
|
403
614
|
}
|
|
615
|
+
return true;
|
|
616
|
+
});
|
|
617
|
+
const repairedMessageIds = repairedMessages.map((message) => message.id);
|
|
618
|
+
setMessages(repairedMessages);
|
|
619
|
+
if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
|
|
620
|
+
setAgentSession({
|
|
621
|
+
threadId: agentSessionRef.current.threadId,
|
|
622
|
+
agentName: agentSessionRef.current.agentName,
|
|
623
|
+
nodeName: "__end__"
|
|
624
|
+
});
|
|
404
625
|
}
|
|
626
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
627
|
+
} else {
|
|
628
|
+
return newMessages.slice();
|
|
405
629
|
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
if (
|
|
411
|
-
// if followUp is not explicitly false
|
|
412
|
-
followUp !== false && // if we have client side results
|
|
413
|
-
(Object.values(actionResults).length || // or the last message we received is a result
|
|
414
|
-
newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
|
|
415
|
-
) {
|
|
416
|
-
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
417
|
-
return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
|
|
418
|
-
} else {
|
|
419
|
-
return newMessages.slice();
|
|
630
|
+
} finally {
|
|
631
|
+
setIsLoading(false);
|
|
420
632
|
}
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
633
|
+
}),
|
|
634
|
+
[
|
|
635
|
+
messages,
|
|
636
|
+
setMessages,
|
|
637
|
+
makeSystemMessageCallback,
|
|
638
|
+
copilotConfig,
|
|
639
|
+
setIsLoading,
|
|
640
|
+
initialMessages,
|
|
641
|
+
isLoading,
|
|
642
|
+
actions,
|
|
643
|
+
onFunctionCall,
|
|
644
|
+
onCoAgentStateRender,
|
|
645
|
+
setCoagentStatesWithRef,
|
|
646
|
+
coagentStatesRef,
|
|
647
|
+
agentSession,
|
|
648
|
+
setAgentSession
|
|
649
|
+
]
|
|
650
|
+
);
|
|
425
651
|
runChatCompletionRef.current = runChatCompletion;
|
|
426
|
-
const runChatCompletionAndHandleFunctionCall = (
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
652
|
+
const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
|
|
653
|
+
(messages2) => __async(this, null, function* () {
|
|
654
|
+
yield runChatCompletionRef.current(messages2);
|
|
655
|
+
}),
|
|
656
|
+
[messages]
|
|
657
|
+
);
|
|
658
|
+
const append = useAsyncCallback(
|
|
659
|
+
(message) => __async(this, null, function* () {
|
|
660
|
+
if (isLoading) {
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
const newMessages = [...messages, message];
|
|
664
|
+
setMessages(newMessages);
|
|
665
|
+
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
666
|
+
}),
|
|
667
|
+
[isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
|
|
668
|
+
);
|
|
669
|
+
const reload = useAsyncCallback(() => __async(this, null, function* () {
|
|
438
670
|
if (isLoading || messages.length === 0) {
|
|
439
671
|
return;
|
|
440
672
|
}
|
|
@@ -445,10 +677,10 @@ function useChat(options) {
|
|
|
445
677
|
}
|
|
446
678
|
setMessages(newMessages);
|
|
447
679
|
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
448
|
-
});
|
|
680
|
+
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
449
681
|
const stop = () => {
|
|
450
682
|
var _a;
|
|
451
|
-
(_a =
|
|
683
|
+
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
452
684
|
};
|
|
453
685
|
return {
|
|
454
686
|
append,
|
|
@@ -457,21 +689,38 @@ function useChat(options) {
|
|
|
457
689
|
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
458
690
|
};
|
|
459
691
|
}
|
|
692
|
+
function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
693
|
+
const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
|
|
694
|
+
if (syncedMessages.length > 0) {
|
|
695
|
+
const messagesWithAgentState = [...previousMessages, ...newMessages];
|
|
696
|
+
let previousMessageId = void 0;
|
|
697
|
+
for (const message of messagesWithAgentState) {
|
|
698
|
+
if (message.isAgentStateMessage()) {
|
|
699
|
+
const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
|
|
700
|
+
if (index !== -1) {
|
|
701
|
+
finalMessages.splice(index + 1, 0, message);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
previousMessageId = message.id;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
return finalMessages;
|
|
708
|
+
}
|
|
460
709
|
|
|
461
710
|
// src/components/copilot-provider/copilotkit.tsx
|
|
462
|
-
var
|
|
711
|
+
var import_react7 = require("react");
|
|
463
712
|
var import_react_dom = require("react-dom");
|
|
464
|
-
var
|
|
713
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
465
714
|
|
|
466
715
|
// src/context/copilot-messages-context.tsx
|
|
467
|
-
var
|
|
716
|
+
var import_react6 = __toESM(require("react"));
|
|
468
717
|
var emptyCopilotContext2 = {
|
|
469
718
|
messages: [],
|
|
470
719
|
setMessages: () => []
|
|
471
720
|
};
|
|
472
|
-
var CopilotMessagesContext =
|
|
721
|
+
var CopilotMessagesContext = import_react6.default.createContext(emptyCopilotContext2);
|
|
473
722
|
function useCopilotMessagesContext() {
|
|
474
|
-
const context =
|
|
723
|
+
const context = import_react6.default.useContext(CopilotMessagesContext);
|
|
475
724
|
if (context === emptyCopilotContext2) {
|
|
476
725
|
throw new Error(
|
|
477
726
|
"A messages consuming component was not wrapped with `<CopilotMessages> {...} </CopilotMessages>`"
|
|
@@ -481,7 +730,7 @@ function useCopilotMessagesContext() {
|
|
|
481
730
|
}
|
|
482
731
|
|
|
483
732
|
// src/components/copilot-provider/copilotkit.tsx
|
|
484
|
-
var
|
|
733
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
485
734
|
var defaultCopilotContextCategories = ["global"];
|
|
486
735
|
|
|
487
736
|
// src/hooks/use-copilot-chat.ts
|
|
@@ -503,25 +752,31 @@ function useCopilotChat(_a = {}) {
|
|
|
503
752
|
setCoagentStatesWithRef,
|
|
504
753
|
coAgentStateRenders,
|
|
505
754
|
agentSession,
|
|
506
|
-
setAgentSession
|
|
755
|
+
setAgentSession,
|
|
756
|
+
agentLock,
|
|
757
|
+
threadId,
|
|
758
|
+
setThreadId,
|
|
759
|
+
runId,
|
|
760
|
+
setRunId,
|
|
761
|
+
chatAbortControllerRef
|
|
507
762
|
} = useCopilotContext();
|
|
508
763
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
509
764
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
510
|
-
const deleteMessage = (0,
|
|
765
|
+
const deleteMessage = (0, import_react8.useCallback)(
|
|
511
766
|
(messageId) => {
|
|
512
767
|
setMessages((prev) => prev.filter((message) => message.id !== messageId));
|
|
513
768
|
},
|
|
514
769
|
[setMessages]
|
|
515
770
|
);
|
|
516
|
-
const makeSystemMessageCallback = (0,
|
|
771
|
+
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
517
772
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
518
773
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
519
|
-
return new
|
|
774
|
+
return new import_runtime_client_gql4.TextMessage({
|
|
520
775
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
521
|
-
role:
|
|
776
|
+
role: import_runtime_client_gql4.Role.System
|
|
522
777
|
});
|
|
523
778
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
524
|
-
const onCoAgentStateRender = (
|
|
779
|
+
const onCoAgentStateRender = useAsyncCallback(
|
|
525
780
|
(args) => __async(this, null, function* () {
|
|
526
781
|
var _a2;
|
|
527
782
|
const { name, nodeName, state } = args;
|
|
@@ -553,55 +808,86 @@ function useCopilotChat(_a = {}) {
|
|
|
553
808
|
coagentStatesRef,
|
|
554
809
|
setCoagentStatesWithRef,
|
|
555
810
|
agentSession,
|
|
556
|
-
setAgentSession
|
|
811
|
+
setAgentSession,
|
|
812
|
+
threadId,
|
|
813
|
+
setThreadId,
|
|
814
|
+
runId,
|
|
815
|
+
setRunId,
|
|
816
|
+
chatAbortControllerRef
|
|
557
817
|
}));
|
|
558
818
|
const latestAppend = useUpdatedRef(append);
|
|
559
|
-
const latestAppendFunc = (
|
|
560
|
-
(message) => {
|
|
561
|
-
return latestAppend.current(message);
|
|
562
|
-
},
|
|
819
|
+
const latestAppendFunc = useAsyncCallback(
|
|
820
|
+
(message) => __async(this, null, function* () {
|
|
821
|
+
return yield latestAppend.current(message);
|
|
822
|
+
}),
|
|
563
823
|
[latestAppend]
|
|
564
824
|
);
|
|
565
825
|
const latestReload = useUpdatedRef(reload);
|
|
566
|
-
const latestReloadFunc = (
|
|
567
|
-
return latestReload.current();
|
|
568
|
-
}, [latestReload]);
|
|
826
|
+
const latestReloadFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
827
|
+
return yield latestReload.current();
|
|
828
|
+
}), [latestReload]);
|
|
569
829
|
const latestStop = useUpdatedRef(stop);
|
|
570
|
-
const latestStopFunc = (0,
|
|
830
|
+
const latestStopFunc = (0, import_react8.useCallback)(() => {
|
|
571
831
|
return latestStop.current();
|
|
572
832
|
}, [latestStop]);
|
|
573
833
|
const latestDelete = useUpdatedRef(deleteMessage);
|
|
574
|
-
const latestDeleteFunc = (0,
|
|
834
|
+
const latestDeleteFunc = (0, import_react8.useCallback)(
|
|
575
835
|
(messageId) => {
|
|
576
836
|
return latestDelete.current(messageId);
|
|
577
837
|
},
|
|
578
838
|
[latestDelete]
|
|
579
839
|
);
|
|
580
840
|
const latestSetMessages = useUpdatedRef(setMessages);
|
|
581
|
-
const latestSetMessagesFunc = (0,
|
|
841
|
+
const latestSetMessagesFunc = (0, import_react8.useCallback)(
|
|
582
842
|
(messages2) => {
|
|
583
843
|
return latestSetMessages.current(messages2);
|
|
584
844
|
},
|
|
585
845
|
[latestSetMessages]
|
|
586
846
|
);
|
|
587
847
|
const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
|
|
588
|
-
const latestRunChatCompletionFunc = (
|
|
589
|
-
return latestRunChatCompletion.current();
|
|
590
|
-
}, [latestRunChatCompletion]);
|
|
848
|
+
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
849
|
+
return yield latestRunChatCompletion.current();
|
|
850
|
+
}), [latestRunChatCompletion]);
|
|
851
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
852
|
+
latestStopFunc();
|
|
853
|
+
setMessages([]);
|
|
854
|
+
setThreadId(null);
|
|
855
|
+
setRunId(null);
|
|
856
|
+
setCoagentStatesWithRef({});
|
|
857
|
+
let initialAgentSession = null;
|
|
858
|
+
if (agentLock) {
|
|
859
|
+
initialAgentSession = {
|
|
860
|
+
agentName: agentLock
|
|
861
|
+
};
|
|
862
|
+
}
|
|
863
|
+
setAgentSession(initialAgentSession);
|
|
864
|
+
}, [
|
|
865
|
+
latestStopFunc,
|
|
866
|
+
setMessages,
|
|
867
|
+
setThreadId,
|
|
868
|
+
setCoagentStatesWithRef,
|
|
869
|
+
setAgentSession,
|
|
870
|
+
agentLock
|
|
871
|
+
]);
|
|
872
|
+
const latestReset = useUpdatedRef(reset);
|
|
873
|
+
const latestResetFunc = (0, import_react8.useCallback)(() => {
|
|
874
|
+
return latestReset.current();
|
|
875
|
+
}, [latestReset]);
|
|
591
876
|
return {
|
|
592
877
|
visibleMessages: messages,
|
|
593
878
|
appendMessage: latestAppendFunc,
|
|
594
879
|
setMessages: latestSetMessagesFunc,
|
|
595
880
|
reloadMessages: latestReloadFunc,
|
|
596
881
|
stopGeneration: latestStopFunc,
|
|
882
|
+
reset: latestResetFunc,
|
|
597
883
|
deleteMessage: latestDeleteFunc,
|
|
598
884
|
runChatCompletion: latestRunChatCompletionFunc,
|
|
599
885
|
isLoading
|
|
600
886
|
};
|
|
601
887
|
}
|
|
602
888
|
function useUpdatedRef(value) {
|
|
603
|
-
const ref = (0,
|
|
604
|
-
(0,
|
|
889
|
+
const ref = (0, import_react8.useRef)(value);
|
|
890
|
+
(0, import_react8.useEffect)(() => {
|
|
605
891
|
ref.current = value;
|
|
606
892
|
}, [value]);
|
|
607
893
|
return ref;
|
|
@@ -631,18 +917,22 @@ ${additionalInstructions}` : "");
|
|
|
631
917
|
}
|
|
632
918
|
|
|
633
919
|
// src/hooks/use-copilot-action.ts
|
|
634
|
-
var
|
|
635
|
-
var
|
|
920
|
+
var import_shared4 = require("@copilotkit/shared");
|
|
921
|
+
var import_react9 = require("react");
|
|
636
922
|
function useCopilotAction(action, dependencies) {
|
|
637
923
|
const { setAction, removeAction, actions, chatComponentsCache } = useCopilotContext();
|
|
638
|
-
const idRef = (0,
|
|
639
|
-
const renderAndWaitRef = (0,
|
|
924
|
+
const idRef = (0, import_react9.useRef)((0, import_shared4.randomId)());
|
|
925
|
+
const renderAndWaitRef = (0, import_react9.useRef)(null);
|
|
640
926
|
action = __spreadValues({}, action);
|
|
641
|
-
if (
|
|
927
|
+
if (
|
|
928
|
+
// renderAndWaitForResponse is not available for catch all actions
|
|
929
|
+
isFrontendAction(action) && // check if renderAndWaitForResponse is set
|
|
930
|
+
(action.renderAndWait || action.renderAndWaitForResponse)
|
|
931
|
+
) {
|
|
642
932
|
const renderAndWait = action.renderAndWait || action.renderAndWaitForResponse;
|
|
643
933
|
action.renderAndWait = void 0;
|
|
644
934
|
action.renderAndWaitForResponse = void 0;
|
|
645
|
-
action.handler = () => __async(this, null, function* () {
|
|
935
|
+
action.handler = useAsyncCallback(() => __async(this, null, function* () {
|
|
646
936
|
let resolve;
|
|
647
937
|
let reject;
|
|
648
938
|
const promise = new Promise((resolvePromise, rejectPromise) => {
|
|
@@ -651,7 +941,7 @@ function useCopilotAction(action, dependencies) {
|
|
|
651
941
|
});
|
|
652
942
|
renderAndWaitRef.current = { promise, resolve, reject };
|
|
653
943
|
return yield promise;
|
|
654
|
-
});
|
|
944
|
+
}), []);
|
|
655
945
|
action.render = (props) => {
|
|
656
946
|
const waitProps = {
|
|
657
947
|
status: props.status,
|
|
@@ -671,12 +961,14 @@ function useCopilotAction(action, dependencies) {
|
|
|
671
961
|
return renderAndWait(waitProps);
|
|
672
962
|
}
|
|
673
963
|
}
|
|
674
|
-
return (0,
|
|
964
|
+
return (0, import_react9.createElement)(import_react9.Fragment);
|
|
675
965
|
};
|
|
676
966
|
}
|
|
677
967
|
if (dependencies === void 0) {
|
|
678
968
|
if (actions[idRef.current]) {
|
|
679
|
-
|
|
969
|
+
if (isFrontendAction(action)) {
|
|
970
|
+
actions[idRef.current].handler = action.handler;
|
|
971
|
+
}
|
|
680
972
|
if (typeof action.render === "function") {
|
|
681
973
|
if (chatComponentsCache.current !== null) {
|
|
682
974
|
chatComponentsCache.current.actions[action.name] = action.render;
|
|
@@ -684,7 +976,7 @@ function useCopilotAction(action, dependencies) {
|
|
|
684
976
|
}
|
|
685
977
|
}
|
|
686
978
|
}
|
|
687
|
-
(0,
|
|
979
|
+
(0, import_react9.useEffect)(() => {
|
|
688
980
|
setAction(idRef.current, action);
|
|
689
981
|
if (chatComponentsCache.current !== null && action.render !== void 0) {
|
|
690
982
|
chatComponentsCache.current.actions[action.name] = action.render;
|
|
@@ -695,31 +987,34 @@ function useCopilotAction(action, dependencies) {
|
|
|
695
987
|
}, [
|
|
696
988
|
setAction,
|
|
697
989
|
removeAction,
|
|
698
|
-
action.description,
|
|
990
|
+
isFrontendAction(action) ? action.description : void 0,
|
|
699
991
|
action.name,
|
|
700
|
-
action.disabled,
|
|
701
|
-
action.available,
|
|
992
|
+
isFrontendAction(action) ? action.disabled : void 0,
|
|
993
|
+
isFrontendAction(action) ? action.available : void 0,
|
|
702
994
|
// This should be faster than deep equality checking
|
|
703
995
|
// In addition, all major JS engines guarantee the order of object keys
|
|
704
|
-
JSON.stringify(action.parameters),
|
|
996
|
+
JSON.stringify(isFrontendAction(action) ? action.parameters : []),
|
|
705
997
|
// include render only if it's a string
|
|
706
998
|
typeof action.render === "string" ? action.render : void 0,
|
|
707
999
|
// dependencies set by the developer
|
|
708
1000
|
...dependencies || []
|
|
709
1001
|
]);
|
|
710
1002
|
}
|
|
1003
|
+
function isFrontendAction(action) {
|
|
1004
|
+
return action.name !== "*";
|
|
1005
|
+
}
|
|
711
1006
|
|
|
712
1007
|
// src/hooks/use-coagent-state-render.ts
|
|
713
|
-
var
|
|
714
|
-
var
|
|
1008
|
+
var import_react10 = require("react");
|
|
1009
|
+
var import_shared5 = require("@copilotkit/shared");
|
|
715
1010
|
function useCoAgentStateRender(action, dependencies) {
|
|
716
1011
|
const {
|
|
717
1012
|
setCoAgentStateRender,
|
|
718
1013
|
removeCoAgentStateRender,
|
|
719
1014
|
coAgentStateRenders,
|
|
720
1015
|
chatComponentsCache
|
|
721
|
-
} = (0,
|
|
722
|
-
const idRef = (0,
|
|
1016
|
+
} = (0, import_react10.useContext)(CopilotContext);
|
|
1017
|
+
const idRef = (0, import_react10.useRef)((0, import_shared5.randomId)());
|
|
723
1018
|
const key = `${action.name}-${action.nodeName || "global"}`;
|
|
724
1019
|
if (dependencies === void 0) {
|
|
725
1020
|
if (coAgentStateRenders[idRef.current]) {
|
|
@@ -731,7 +1026,7 @@ function useCoAgentStateRender(action, dependencies) {
|
|
|
731
1026
|
}
|
|
732
1027
|
}
|
|
733
1028
|
}
|
|
734
|
-
(0,
|
|
1029
|
+
(0, import_react10.useEffect)(() => {
|
|
735
1030
|
setCoAgentStateRender(idRef.current, action);
|
|
736
1031
|
if (chatComponentsCache.current !== null && action.render !== void 0) {
|
|
737
1032
|
chatComponentsCache.current.coAgentStateRenders[key] = action.render;
|
|
@@ -751,11 +1046,11 @@ function useCoAgentStateRender(action, dependencies) {
|
|
|
751
1046
|
}
|
|
752
1047
|
|
|
753
1048
|
// src/hooks/use-make-copilot-document-readable.ts
|
|
754
|
-
var
|
|
1049
|
+
var import_react11 = require("react");
|
|
755
1050
|
function useMakeCopilotDocumentReadable(document, categories, dependencies = []) {
|
|
756
1051
|
const { addDocumentContext, removeDocumentContext } = useCopilotContext();
|
|
757
|
-
const idRef = (0,
|
|
758
|
-
(0,
|
|
1052
|
+
const idRef = (0, import_react11.useRef)();
|
|
1053
|
+
(0, import_react11.useEffect)(() => {
|
|
759
1054
|
const id = addDocumentContext(document, categories);
|
|
760
1055
|
idRef.current = id;
|
|
761
1056
|
return () => {
|
|
@@ -766,16 +1061,16 @@ function useMakeCopilotDocumentReadable(document, categories, dependencies = [])
|
|
|
766
1061
|
}
|
|
767
1062
|
|
|
768
1063
|
// src/hooks/use-copilot-readable.ts
|
|
769
|
-
var
|
|
1064
|
+
var import_react12 = require("react");
|
|
770
1065
|
function convertToJSON(description, value) {
|
|
771
1066
|
return `${description}: ${typeof value === "string" ? value : JSON.stringify(value)}`;
|
|
772
1067
|
}
|
|
773
1068
|
function useCopilotReadable({ description, value, parentId, categories, convert }, dependencies) {
|
|
774
1069
|
const { addContext, removeContext } = useCopilotContext();
|
|
775
|
-
const idRef = (0,
|
|
1070
|
+
const idRef = (0, import_react12.useRef)();
|
|
776
1071
|
convert = convert || convertToJSON;
|
|
777
1072
|
const information = convert(description, value);
|
|
778
|
-
(0,
|
|
1073
|
+
(0, import_react12.useEffect)(() => {
|
|
779
1074
|
const id = addContext(information, parentId, categories);
|
|
780
1075
|
idRef.current = id;
|
|
781
1076
|
return () => {
|
|
@@ -786,7 +1081,7 @@ function useCopilotReadable({ description, value, parentId, categories, convert
|
|
|
786
1081
|
}
|
|
787
1082
|
|
|
788
1083
|
// src/hooks/use-coagent.ts
|
|
789
|
-
var
|
|
1084
|
+
var import_react13 = require("react");
|
|
790
1085
|
function useCoAgent(options) {
|
|
791
1086
|
const isExternalStateManagement = (options2) => {
|
|
792
1087
|
return "state" in options2 && "setState" in options2;
|
|
@@ -826,28 +1121,33 @@ function useCoAgent(options) {
|
|
|
826
1121
|
};
|
|
827
1122
|
const coagentState = getCoagentState(coagentStates, name);
|
|
828
1123
|
const state = isExternalStateManagement(options) ? options.state : coagentState.state;
|
|
829
|
-
(0,
|
|
1124
|
+
(0, import_react13.useEffect)(() => {
|
|
830
1125
|
if (isExternalStateManagement(options)) {
|
|
831
1126
|
setState(options.state);
|
|
832
1127
|
} else if (coagentStates[name] === void 0) {
|
|
833
1128
|
setState(options.initialState === void 0 ? {} : options.initialState);
|
|
834
1129
|
}
|
|
835
|
-
}, [
|
|
1130
|
+
}, [
|
|
1131
|
+
isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0,
|
|
1132
|
+
// reset initialstate on reset
|
|
1133
|
+
coagentStates[name] === void 0
|
|
1134
|
+
]);
|
|
1135
|
+
const runAgentCallback = useAsyncCallback(
|
|
1136
|
+
(hint) => __async(this, null, function* () {
|
|
1137
|
+
yield runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
1138
|
+
}),
|
|
1139
|
+
[name, context, appendMessage, runChatCompletion]
|
|
1140
|
+
);
|
|
836
1141
|
return {
|
|
837
1142
|
name,
|
|
838
1143
|
nodeName: coagentState.nodeName,
|
|
839
|
-
|
|
840
|
-
setState,
|
|
1144
|
+
threadId: coagentState.threadId,
|
|
841
1145
|
running: coagentState.running,
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
stop: () =>
|
|
846
|
-
|
|
847
|
-
},
|
|
848
|
-
run: (hint) => {
|
|
849
|
-
return runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
850
|
-
}
|
|
1146
|
+
state: coagentState.state,
|
|
1147
|
+
setState: isExternalStateManagement(options) ? options.setState : setState,
|
|
1148
|
+
start: () => startAgent(name, context),
|
|
1149
|
+
stop: () => stopAgent(name, context),
|
|
1150
|
+
run: runAgentCallback
|
|
851
1151
|
};
|
|
852
1152
|
}
|
|
853
1153
|
function startAgent(name, context) {
|
|
@@ -860,6 +1160,17 @@ function stopAgent(name, context) {
|
|
|
860
1160
|
const { agentSession, setAgentSession } = context;
|
|
861
1161
|
if (agentSession && agentSession.agentName === name) {
|
|
862
1162
|
setAgentSession(null);
|
|
1163
|
+
context.setCoagentStates((prevAgentStates) => {
|
|
1164
|
+
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
1165
|
+
[name]: __spreadProps(__spreadValues({}, prevAgentStates[name]), {
|
|
1166
|
+
running: false,
|
|
1167
|
+
active: false,
|
|
1168
|
+
threadId: void 0,
|
|
1169
|
+
nodeName: void 0,
|
|
1170
|
+
runId: void 0
|
|
1171
|
+
})
|
|
1172
|
+
});
|
|
1173
|
+
});
|
|
863
1174
|
} else {
|
|
864
1175
|
console.warn(`No agent session found for ${name}`);
|
|
865
1176
|
}
|
|
@@ -895,6 +1206,9 @@ function runAgent(name, context, appendMessage, runChatCompletion, hint) {
|
|
|
895
1206
|
}
|
|
896
1207
|
// Annotate the CommonJS export names for ESM import in node:
|
|
897
1208
|
0 && (module.exports = {
|
|
1209
|
+
runAgent,
|
|
1210
|
+
startAgent,
|
|
1211
|
+
stopAgent,
|
|
898
1212
|
useCoAgent,
|
|
899
1213
|
useCoAgentStateRender,
|
|
900
1214
|
useCopilotAction,
|