@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
|
@@ -79,10 +79,13 @@ var __async = (__this, __arguments, generator) => {
|
|
|
79
79
|
// src/hooks/use-coagent.ts
|
|
80
80
|
var use_coagent_exports = {};
|
|
81
81
|
__export(use_coagent_exports, {
|
|
82
|
+
runAgent: () => runAgent,
|
|
83
|
+
startAgent: () => startAgent,
|
|
84
|
+
stopAgent: () => stopAgent,
|
|
82
85
|
useCoAgent: () => useCoAgent
|
|
83
86
|
});
|
|
84
87
|
module.exports = __toCommonJS(use_coagent_exports);
|
|
85
|
-
var
|
|
88
|
+
var import_react9 = require("react");
|
|
86
89
|
|
|
87
90
|
// src/context/copilot-context.tsx
|
|
88
91
|
var import_react = __toESM(require("react"));
|
|
@@ -138,7 +141,15 @@ var emptyCopilotContext = {
|
|
|
138
141
|
},
|
|
139
142
|
agentSession: null,
|
|
140
143
|
setAgentSession: () => {
|
|
141
|
-
}
|
|
144
|
+
},
|
|
145
|
+
agentLock: null,
|
|
146
|
+
threadId: null,
|
|
147
|
+
setThreadId: () => {
|
|
148
|
+
},
|
|
149
|
+
runId: null,
|
|
150
|
+
setRunId: () => {
|
|
151
|
+
},
|
|
152
|
+
chatAbortControllerRef: { current: null }
|
|
142
153
|
};
|
|
143
154
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
144
155
|
function useCopilotContext() {
|
|
@@ -171,20 +182,160 @@ function useCopilotMessagesContext() {
|
|
|
171
182
|
}
|
|
172
183
|
|
|
173
184
|
// src/hooks/use-copilot-chat.ts
|
|
174
|
-
var
|
|
175
|
-
var
|
|
185
|
+
var import_react8 = require("react");
|
|
186
|
+
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
176
187
|
|
|
177
188
|
// src/hooks/use-chat.ts
|
|
178
|
-
var
|
|
189
|
+
var import_react6 = require("react");
|
|
190
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
191
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
192
|
+
|
|
193
|
+
// src/types/frontend-action.ts
|
|
194
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
179
195
|
var import_shared = require("@copilotkit/shared");
|
|
180
|
-
|
|
196
|
+
function processActionsForRuntimeRequest(actions) {
|
|
197
|
+
const filteredActions = actions.filter(
|
|
198
|
+
(action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
|
|
199
|
+
).map((action) => {
|
|
200
|
+
let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
|
|
201
|
+
if (action.disabled) {
|
|
202
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
203
|
+
} else if (action.available === "disabled") {
|
|
204
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
205
|
+
} else if (action.available === "remote") {
|
|
206
|
+
available = import_runtime_client_gql.ActionInputAvailability.Remote;
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
name: action.name,
|
|
210
|
+
description: action.description || "",
|
|
211
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
212
|
+
available
|
|
213
|
+
};
|
|
214
|
+
});
|
|
215
|
+
return filteredActions;
|
|
216
|
+
}
|
|
181
217
|
|
|
182
218
|
// src/components/toast/toast-provider.tsx
|
|
219
|
+
var import_react4 = require("react");
|
|
220
|
+
|
|
221
|
+
// src/components/error-boundary/error-utils.tsx
|
|
183
222
|
var import_react3 = require("react");
|
|
223
|
+
|
|
224
|
+
// src/components/toast/exclamation-mark-icon.tsx
|
|
184
225
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
185
|
-
var
|
|
226
|
+
var ExclamationMarkIcon = ({
|
|
227
|
+
className,
|
|
228
|
+
style
|
|
229
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
230
|
+
"svg",
|
|
231
|
+
{
|
|
232
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
233
|
+
width: "24",
|
|
234
|
+
height: "24",
|
|
235
|
+
viewBox: "0 0 24 24",
|
|
236
|
+
fill: "none",
|
|
237
|
+
stroke: "currentColor",
|
|
238
|
+
strokeWidth: "2",
|
|
239
|
+
strokeLinecap: "round",
|
|
240
|
+
strokeLinejoin: "round",
|
|
241
|
+
className: `lucide lucide-circle-alert ${className ? className : ""}`,
|
|
242
|
+
style,
|
|
243
|
+
children: [
|
|
244
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
245
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
|
|
246
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
// src/components/error-boundary/error-utils.tsx
|
|
252
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
253
|
+
function ErrorToast({ errors }) {
|
|
254
|
+
const errorsToRender = errors.map((error, idx) => {
|
|
255
|
+
var _a, _b, _c;
|
|
256
|
+
const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
|
|
257
|
+
const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
|
|
258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
259
|
+
"div",
|
|
260
|
+
{
|
|
261
|
+
style: {
|
|
262
|
+
marginTop: idx === 0 ? 0 : 10,
|
|
263
|
+
marginBottom: 14
|
|
264
|
+
},
|
|
265
|
+
children: [
|
|
266
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
|
|
267
|
+
code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
268
|
+
"div",
|
|
269
|
+
{
|
|
270
|
+
style: {
|
|
271
|
+
fontWeight: "600",
|
|
272
|
+
marginBottom: 4
|
|
273
|
+
},
|
|
274
|
+
children: [
|
|
275
|
+
"Copilot Cloud Error:",
|
|
276
|
+
" ",
|
|
277
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
),
|
|
281
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
idx
|
|
285
|
+
);
|
|
286
|
+
});
|
|
287
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
288
|
+
"div",
|
|
289
|
+
{
|
|
290
|
+
style: {
|
|
291
|
+
fontSize: "13px",
|
|
292
|
+
maxWidth: "600px"
|
|
293
|
+
},
|
|
294
|
+
children: [
|
|
295
|
+
errorsToRender,
|
|
296
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
function useErrorToast() {
|
|
302
|
+
const { addToast } = useToast();
|
|
303
|
+
return (0, import_react3.useCallback)(
|
|
304
|
+
(error) => {
|
|
305
|
+
const errorId = error.map((err) => {
|
|
306
|
+
var _a, _b;
|
|
307
|
+
const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
|
|
308
|
+
const stack = err.stack || "";
|
|
309
|
+
return btoa(message + stack).slice(0, 32);
|
|
310
|
+
}).join("|");
|
|
311
|
+
addToast({
|
|
312
|
+
type: "error",
|
|
313
|
+
id: errorId,
|
|
314
|
+
// Toast libraries typically dedupe by id
|
|
315
|
+
message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
|
|
316
|
+
});
|
|
317
|
+
},
|
|
318
|
+
[addToast]
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
function useAsyncCallback(callback, deps) {
|
|
322
|
+
const addErrorToast = useErrorToast();
|
|
323
|
+
return (0, import_react3.useCallback)((...args) => __async(this, null, function* () {
|
|
324
|
+
try {
|
|
325
|
+
return yield callback(...args);
|
|
326
|
+
} catch (error) {
|
|
327
|
+
console.error("Error in async callback:", error);
|
|
328
|
+
addErrorToast([error]);
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}), deps);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// src/components/toast/toast-provider.tsx
|
|
335
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
336
|
+
var ToastContext = (0, import_react4.createContext)(void 0);
|
|
186
337
|
function useToast() {
|
|
187
|
-
const context = (0,
|
|
338
|
+
const context = (0, import_react4.useContext)(ToastContext);
|
|
188
339
|
if (!context) {
|
|
189
340
|
throw new Error("useToast must be used within a ToastProvider");
|
|
190
341
|
}
|
|
@@ -192,15 +343,18 @@ function useToast() {
|
|
|
192
343
|
}
|
|
193
344
|
|
|
194
345
|
// src/hooks/use-copilot-runtime-client.ts
|
|
195
|
-
var
|
|
196
|
-
var
|
|
346
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
347
|
+
var import_react5 = require("react");
|
|
197
348
|
var useCopilotRuntimeClient = (options) => {
|
|
198
349
|
const { addGraphQLErrorsToast } = useToast();
|
|
199
|
-
const
|
|
200
|
-
|
|
350
|
+
const addErrorToast = useErrorToast();
|
|
351
|
+
const runtimeClient = (0, import_react5.useMemo)(() => {
|
|
352
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
201
353
|
handleGQLErrors: (error) => {
|
|
202
354
|
if (error.graphQLErrors.length) {
|
|
203
355
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
356
|
+
} else {
|
|
357
|
+
addErrorToast([error]);
|
|
204
358
|
}
|
|
205
359
|
}
|
|
206
360
|
}));
|
|
@@ -224,227 +378,305 @@ function useChat(options) {
|
|
|
224
378
|
setCoagentStatesWithRef,
|
|
225
379
|
coagentStatesRef,
|
|
226
380
|
agentSession,
|
|
227
|
-
setAgentSession
|
|
381
|
+
setAgentSession,
|
|
382
|
+
threadId,
|
|
383
|
+
setThreadId,
|
|
384
|
+
runId,
|
|
385
|
+
setRunId,
|
|
386
|
+
chatAbortControllerRef
|
|
228
387
|
} = options;
|
|
229
|
-
const abortControllerRef = (0, import_react5.useRef)();
|
|
230
|
-
const threadIdRef = (0, import_react5.useRef)(null);
|
|
231
|
-
const runIdRef = (0, import_react5.useRef)(null);
|
|
232
388
|
const { addGraphQLErrorsToast } = useToast();
|
|
233
|
-
const runChatCompletionRef = (0,
|
|
234
|
-
const agentSessionRef = (0,
|
|
389
|
+
const runChatCompletionRef = (0, import_react6.useRef)();
|
|
390
|
+
const agentSessionRef = (0, import_react6.useRef)(agentSession);
|
|
235
391
|
agentSessionRef.current = agentSession;
|
|
392
|
+
const threadIdRef = (0, import_react6.useRef)(threadId);
|
|
393
|
+
threadIdRef.current = threadId;
|
|
394
|
+
const runIdRef = (0, import_react6.useRef)(runId);
|
|
395
|
+
runIdRef.current = runId;
|
|
236
396
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
237
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
397
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
238
398
|
const runtimeClient = useCopilotRuntimeClient({
|
|
239
399
|
url: copilotConfig.chatApiEndpoint,
|
|
240
400
|
publicApiKey: copilotConfig.publicApiKey,
|
|
241
401
|
headers,
|
|
242
402
|
credentials: copilotConfig.credentials
|
|
243
403
|
});
|
|
244
|
-
const runChatCompletion = (
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
runtimeClient.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
277
|
-
available
|
|
278
|
-
};
|
|
279
|
-
}),
|
|
280
|
-
url: window.location.href
|
|
281
|
-
},
|
|
282
|
-
threadId: threadIdRef.current,
|
|
283
|
-
runId: runIdRef.current,
|
|
284
|
-
messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
|
|
285
|
-
}, copilotConfig.cloud ? {
|
|
286
|
-
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
287
|
-
guardrails: {
|
|
288
|
-
inputValidationRules: {
|
|
289
|
-
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
290
|
-
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
404
|
+
const runChatCompletion = useAsyncCallback(
|
|
405
|
+
(previousMessages) => __async(this, null, function* () {
|
|
406
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
407
|
+
setIsLoading(true);
|
|
408
|
+
let newMessages = [
|
|
409
|
+
new import_runtime_client_gql3.TextMessage({
|
|
410
|
+
content: "",
|
|
411
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
412
|
+
})
|
|
413
|
+
];
|
|
414
|
+
chatAbortControllerRef.current = new AbortController();
|
|
415
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
416
|
+
const systemMessage = makeSystemMessageCallback();
|
|
417
|
+
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
418
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
419
|
+
const stream = runtimeClient.asStream(
|
|
420
|
+
runtimeClient.generateCopilotResponse({
|
|
421
|
+
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
422
|
+
frontend: {
|
|
423
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
424
|
+
url: window.location.href
|
|
425
|
+
},
|
|
426
|
+
threadId: threadIdRef.current,
|
|
427
|
+
runId: runIdRef.current,
|
|
428
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
429
|
+
}, copilotConfig.cloud ? {
|
|
430
|
+
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
431
|
+
guardrails: {
|
|
432
|
+
inputValidationRules: {
|
|
433
|
+
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
434
|
+
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
435
|
+
}
|
|
291
436
|
}
|
|
437
|
+
} : {})
|
|
438
|
+
} : {}), {
|
|
439
|
+
metadata: {
|
|
440
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
292
441
|
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
442
|
+
}), agentSessionRef.current ? {
|
|
443
|
+
agentSession: agentSessionRef.current
|
|
444
|
+
} : {}), {
|
|
445
|
+
agentStates: Object.values(coagentStatesRef.current).map((state) => ({
|
|
446
|
+
agentName: state.name,
|
|
447
|
+
state: JSON.stringify(state.state)
|
|
448
|
+
}))
|
|
449
|
+
}),
|
|
450
|
+
properties: copilotConfig.properties,
|
|
451
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
452
|
+
})
|
|
453
|
+
);
|
|
454
|
+
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
455
|
+
const reader = stream.getReader();
|
|
456
|
+
let executedCoAgentStateRenders = [];
|
|
457
|
+
let followUp = void 0;
|
|
458
|
+
let messages2 = [];
|
|
459
|
+
let syncedMessages = [];
|
|
460
|
+
try {
|
|
461
|
+
while (true) {
|
|
462
|
+
let done, value;
|
|
463
|
+
try {
|
|
464
|
+
const readResult = yield reader.read();
|
|
465
|
+
done = readResult.done;
|
|
466
|
+
value = readResult.value;
|
|
467
|
+
} catch (readError) {
|
|
468
|
+
break;
|
|
297
469
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
332
|
-
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
333
|
-
const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
|
|
334
|
-
(0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
335
|
-
);
|
|
336
|
-
if (messages2.length === 0) {
|
|
337
|
-
continue;
|
|
338
|
-
}
|
|
339
|
-
newMessages = [];
|
|
340
|
-
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
341
|
-
newMessages = [
|
|
342
|
-
new import_runtime_client_gql2.TextMessage({
|
|
343
|
-
role: import_runtime_client_gql2.MessageRole.Assistant,
|
|
344
|
-
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
345
|
-
})
|
|
346
|
-
];
|
|
347
|
-
} else {
|
|
348
|
-
for (const message of messages2) {
|
|
349
|
-
newMessages.push(message);
|
|
350
|
-
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
351
|
-
if (!(message.id in actionResults)) {
|
|
470
|
+
if (done) {
|
|
471
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
472
|
+
return [];
|
|
473
|
+
}
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
479
|
+
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
480
|
+
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
481
|
+
setThreadId(threadIdRef.current);
|
|
482
|
+
setRunId(runIdRef.current);
|
|
483
|
+
messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
|
|
484
|
+
(0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
485
|
+
);
|
|
486
|
+
if (messages2.length === 0) {
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
newMessages = [];
|
|
490
|
+
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
491
|
+
newMessages = [
|
|
492
|
+
new import_runtime_client_gql3.TextMessage({
|
|
493
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
494
|
+
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
495
|
+
})
|
|
496
|
+
];
|
|
497
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
498
|
+
break;
|
|
499
|
+
} else {
|
|
500
|
+
newMessages = [...messages2];
|
|
501
|
+
for (const message of messages2) {
|
|
502
|
+
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
352
503
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
353
504
|
break;
|
|
354
505
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
506
|
+
yield onCoAgentStateRender({
|
|
507
|
+
name: message.agentName,
|
|
508
|
+
nodeName: message.nodeName,
|
|
509
|
+
state: message.state
|
|
510
|
+
});
|
|
511
|
+
executedCoAgentStateRenders.push(message.id);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
515
|
+
if (lastAgentStateMessage) {
|
|
516
|
+
if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
|
|
517
|
+
syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
|
|
518
|
+
lastAgentStateMessage.state.messages
|
|
519
|
+
);
|
|
520
|
+
}
|
|
521
|
+
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
522
|
+
[lastAgentStateMessage.agentName]: {
|
|
523
|
+
name: lastAgentStateMessage.agentName,
|
|
524
|
+
state: lastAgentStateMessage.state,
|
|
525
|
+
running: lastAgentStateMessage.running,
|
|
526
|
+
active: lastAgentStateMessage.active,
|
|
527
|
+
threadId: lastAgentStateMessage.threadId,
|
|
528
|
+
nodeName: lastAgentStateMessage.nodeName,
|
|
529
|
+
runId: lastAgentStateMessage.runId
|
|
530
|
+
}
|
|
531
|
+
}));
|
|
532
|
+
if (lastAgentStateMessage.running) {
|
|
533
|
+
setAgentSession({
|
|
534
|
+
threadId: lastAgentStateMessage.threadId,
|
|
535
|
+
agentName: lastAgentStateMessage.agentName,
|
|
536
|
+
nodeName: lastAgentStateMessage.nodeName
|
|
537
|
+
});
|
|
538
|
+
} else {
|
|
539
|
+
setAgentSession(null);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
if (newMessages.length > 0) {
|
|
544
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
|
|
548
|
+
let didExecuteAction = false;
|
|
549
|
+
if (onFunctionCall) {
|
|
550
|
+
const lastMessages = [];
|
|
551
|
+
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
552
|
+
const message = finalMessages[i];
|
|
553
|
+
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
|
|
554
|
+
lastMessages.unshift(message);
|
|
555
|
+
} else {
|
|
556
|
+
break;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
for (const message of lastMessages) {
|
|
560
|
+
setMessages(finalMessages);
|
|
561
|
+
const action = actions.find((action2) => action2.name === message.name);
|
|
562
|
+
if (action) {
|
|
563
|
+
followUp = action.followUp;
|
|
564
|
+
let result;
|
|
565
|
+
try {
|
|
566
|
+
result = yield Promise.race([
|
|
567
|
+
onFunctionCall({
|
|
362
568
|
messages: previousMessages,
|
|
363
569
|
name: message.name,
|
|
364
570
|
args: message.arguments
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
571
|
+
}),
|
|
572
|
+
new Promise(
|
|
573
|
+
(resolve) => {
|
|
574
|
+
var _a2;
|
|
575
|
+
return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
|
|
576
|
+
"abort",
|
|
577
|
+
() => resolve("Operation was aborted by the user")
|
|
578
|
+
);
|
|
579
|
+
}
|
|
580
|
+
),
|
|
581
|
+
// if the user stopped generation, we also abort consecutive actions
|
|
582
|
+
new Promise((resolve) => {
|
|
583
|
+
var _a2;
|
|
584
|
+
if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
|
|
585
|
+
resolve("Operation was aborted by the user");
|
|
586
|
+
}
|
|
587
|
+
})
|
|
588
|
+
]);
|
|
589
|
+
} catch (e) {
|
|
590
|
+
result = `Failed to execute action ${message.name}`;
|
|
591
|
+
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
371
592
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
593
|
+
didExecuteAction = true;
|
|
594
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
|
|
595
|
+
finalMessages.splice(
|
|
596
|
+
messageIndex + 1,
|
|
597
|
+
0,
|
|
598
|
+
new import_runtime_client_gql3.ResultMessage({
|
|
599
|
+
id: "result-" + message.id,
|
|
600
|
+
result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
|
|
375
601
|
actionExecutionId: message.id,
|
|
376
602
|
actionName: message.name
|
|
377
603
|
})
|
|
378
604
|
);
|
|
379
605
|
}
|
|
380
|
-
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
381
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
382
|
-
break;
|
|
383
|
-
}
|
|
384
|
-
yield onCoAgentStateRender({
|
|
385
|
-
name: message.agentName,
|
|
386
|
-
nodeName: message.nodeName,
|
|
387
|
-
state: message.state
|
|
388
|
-
});
|
|
389
|
-
executedCoAgentStateRenders.push(message.id);
|
|
390
|
-
}
|
|
391
606
|
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
if (
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
nodeName: lastAgentStateMessage.nodeName
|
|
410
|
-
});
|
|
411
|
-
} else {
|
|
412
|
-
setAgentSession(null);
|
|
607
|
+
setMessages(finalMessages);
|
|
608
|
+
}
|
|
609
|
+
if (
|
|
610
|
+
// if followUp is not explicitly false
|
|
611
|
+
followUp !== false && // and we executed an action
|
|
612
|
+
(didExecuteAction || // the last message is a server side result
|
|
613
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
614
|
+
!((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
|
|
615
|
+
) {
|
|
616
|
+
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
617
|
+
return yield runChatCompletionRef.current(finalMessages);
|
|
618
|
+
} else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
|
|
619
|
+
const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
|
|
620
|
+
if (message.isActionExecutionMessage()) {
|
|
621
|
+
return finalMessages.find(
|
|
622
|
+
(msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
|
|
623
|
+
);
|
|
413
624
|
}
|
|
625
|
+
return true;
|
|
626
|
+
});
|
|
627
|
+
const repairedMessageIds = repairedMessages.map((message) => message.id);
|
|
628
|
+
setMessages(repairedMessages);
|
|
629
|
+
if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
|
|
630
|
+
setAgentSession({
|
|
631
|
+
threadId: agentSessionRef.current.threadId,
|
|
632
|
+
agentName: agentSessionRef.current.agentName,
|
|
633
|
+
nodeName: "__end__"
|
|
634
|
+
});
|
|
414
635
|
}
|
|
636
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
637
|
+
} else {
|
|
638
|
+
return newMessages.slice();
|
|
415
639
|
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
}
|
|
640
|
+
} finally {
|
|
641
|
+
setIsLoading(false);
|
|
419
642
|
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
643
|
+
}),
|
|
644
|
+
[
|
|
645
|
+
messages,
|
|
646
|
+
setMessages,
|
|
647
|
+
makeSystemMessageCallback,
|
|
648
|
+
copilotConfig,
|
|
649
|
+
setIsLoading,
|
|
650
|
+
initialMessages,
|
|
651
|
+
isLoading,
|
|
652
|
+
actions,
|
|
653
|
+
onFunctionCall,
|
|
654
|
+
onCoAgentStateRender,
|
|
655
|
+
setCoagentStatesWithRef,
|
|
656
|
+
coagentStatesRef,
|
|
657
|
+
agentSession,
|
|
658
|
+
setAgentSession
|
|
659
|
+
]
|
|
660
|
+
);
|
|
435
661
|
runChatCompletionRef.current = runChatCompletion;
|
|
436
|
-
const runChatCompletionAndHandleFunctionCall = (
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
662
|
+
const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
|
|
663
|
+
(messages2) => __async(this, null, function* () {
|
|
664
|
+
yield runChatCompletionRef.current(messages2);
|
|
665
|
+
}),
|
|
666
|
+
[messages]
|
|
667
|
+
);
|
|
668
|
+
const append = useAsyncCallback(
|
|
669
|
+
(message) => __async(this, null, function* () {
|
|
670
|
+
if (isLoading) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
const newMessages = [...messages, message];
|
|
674
|
+
setMessages(newMessages);
|
|
675
|
+
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
676
|
+
}),
|
|
677
|
+
[isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
|
|
678
|
+
);
|
|
679
|
+
const reload = useAsyncCallback(() => __async(this, null, function* () {
|
|
448
680
|
if (isLoading || messages.length === 0) {
|
|
449
681
|
return;
|
|
450
682
|
}
|
|
@@ -455,10 +687,10 @@ function useChat(options) {
|
|
|
455
687
|
}
|
|
456
688
|
setMessages(newMessages);
|
|
457
689
|
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
458
|
-
});
|
|
690
|
+
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
459
691
|
const stop = () => {
|
|
460
692
|
var _a;
|
|
461
|
-
(_a =
|
|
693
|
+
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
462
694
|
};
|
|
463
695
|
return {
|
|
464
696
|
append,
|
|
@@ -467,12 +699,29 @@ function useChat(options) {
|
|
|
467
699
|
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
468
700
|
};
|
|
469
701
|
}
|
|
702
|
+
function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
703
|
+
const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
|
|
704
|
+
if (syncedMessages.length > 0) {
|
|
705
|
+
const messagesWithAgentState = [...previousMessages, ...newMessages];
|
|
706
|
+
let previousMessageId = void 0;
|
|
707
|
+
for (const message of messagesWithAgentState) {
|
|
708
|
+
if (message.isAgentStateMessage()) {
|
|
709
|
+
const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
|
|
710
|
+
if (index !== -1) {
|
|
711
|
+
finalMessages.splice(index + 1, 0, message);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
previousMessageId = message.id;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
return finalMessages;
|
|
718
|
+
}
|
|
470
719
|
|
|
471
720
|
// src/components/copilot-provider/copilotkit.tsx
|
|
472
|
-
var
|
|
721
|
+
var import_react7 = require("react");
|
|
473
722
|
var import_react_dom = require("react-dom");
|
|
474
|
-
var
|
|
475
|
-
var
|
|
723
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
724
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
476
725
|
var defaultCopilotContextCategories = ["global"];
|
|
477
726
|
|
|
478
727
|
// src/hooks/use-copilot-chat.ts
|
|
@@ -494,25 +743,31 @@ function useCopilotChat(_a = {}) {
|
|
|
494
743
|
setCoagentStatesWithRef,
|
|
495
744
|
coAgentStateRenders,
|
|
496
745
|
agentSession,
|
|
497
|
-
setAgentSession
|
|
746
|
+
setAgentSession,
|
|
747
|
+
agentLock,
|
|
748
|
+
threadId,
|
|
749
|
+
setThreadId,
|
|
750
|
+
runId,
|
|
751
|
+
setRunId,
|
|
752
|
+
chatAbortControllerRef
|
|
498
753
|
} = useCopilotContext();
|
|
499
754
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
500
755
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
501
|
-
const deleteMessage = (0,
|
|
756
|
+
const deleteMessage = (0, import_react8.useCallback)(
|
|
502
757
|
(messageId) => {
|
|
503
758
|
setMessages((prev) => prev.filter((message) => message.id !== messageId));
|
|
504
759
|
},
|
|
505
760
|
[setMessages]
|
|
506
761
|
);
|
|
507
|
-
const makeSystemMessageCallback = (0,
|
|
762
|
+
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
508
763
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
509
764
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
510
|
-
return new
|
|
765
|
+
return new import_runtime_client_gql4.TextMessage({
|
|
511
766
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
512
|
-
role:
|
|
767
|
+
role: import_runtime_client_gql4.Role.System
|
|
513
768
|
});
|
|
514
769
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
515
|
-
const onCoAgentStateRender = (
|
|
770
|
+
const onCoAgentStateRender = useAsyncCallback(
|
|
516
771
|
(args) => __async(this, null, function* () {
|
|
517
772
|
var _a2;
|
|
518
773
|
const { name, nodeName, state } = args;
|
|
@@ -544,55 +799,86 @@ function useCopilotChat(_a = {}) {
|
|
|
544
799
|
coagentStatesRef,
|
|
545
800
|
setCoagentStatesWithRef,
|
|
546
801
|
agentSession,
|
|
547
|
-
setAgentSession
|
|
802
|
+
setAgentSession,
|
|
803
|
+
threadId,
|
|
804
|
+
setThreadId,
|
|
805
|
+
runId,
|
|
806
|
+
setRunId,
|
|
807
|
+
chatAbortControllerRef
|
|
548
808
|
}));
|
|
549
809
|
const latestAppend = useUpdatedRef(append);
|
|
550
|
-
const latestAppendFunc = (
|
|
551
|
-
(message) => {
|
|
552
|
-
return latestAppend.current(message);
|
|
553
|
-
},
|
|
810
|
+
const latestAppendFunc = useAsyncCallback(
|
|
811
|
+
(message) => __async(this, null, function* () {
|
|
812
|
+
return yield latestAppend.current(message);
|
|
813
|
+
}),
|
|
554
814
|
[latestAppend]
|
|
555
815
|
);
|
|
556
816
|
const latestReload = useUpdatedRef(reload);
|
|
557
|
-
const latestReloadFunc = (
|
|
558
|
-
return latestReload.current();
|
|
559
|
-
}, [latestReload]);
|
|
817
|
+
const latestReloadFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
818
|
+
return yield latestReload.current();
|
|
819
|
+
}), [latestReload]);
|
|
560
820
|
const latestStop = useUpdatedRef(stop);
|
|
561
|
-
const latestStopFunc = (0,
|
|
821
|
+
const latestStopFunc = (0, import_react8.useCallback)(() => {
|
|
562
822
|
return latestStop.current();
|
|
563
823
|
}, [latestStop]);
|
|
564
824
|
const latestDelete = useUpdatedRef(deleteMessage);
|
|
565
|
-
const latestDeleteFunc = (0,
|
|
825
|
+
const latestDeleteFunc = (0, import_react8.useCallback)(
|
|
566
826
|
(messageId) => {
|
|
567
827
|
return latestDelete.current(messageId);
|
|
568
828
|
},
|
|
569
829
|
[latestDelete]
|
|
570
830
|
);
|
|
571
831
|
const latestSetMessages = useUpdatedRef(setMessages);
|
|
572
|
-
const latestSetMessagesFunc = (0,
|
|
832
|
+
const latestSetMessagesFunc = (0, import_react8.useCallback)(
|
|
573
833
|
(messages2) => {
|
|
574
834
|
return latestSetMessages.current(messages2);
|
|
575
835
|
},
|
|
576
836
|
[latestSetMessages]
|
|
577
837
|
);
|
|
578
838
|
const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
|
|
579
|
-
const latestRunChatCompletionFunc = (
|
|
580
|
-
return latestRunChatCompletion.current();
|
|
581
|
-
}, [latestRunChatCompletion]);
|
|
839
|
+
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
840
|
+
return yield latestRunChatCompletion.current();
|
|
841
|
+
}), [latestRunChatCompletion]);
|
|
842
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
843
|
+
latestStopFunc();
|
|
844
|
+
setMessages([]);
|
|
845
|
+
setThreadId(null);
|
|
846
|
+
setRunId(null);
|
|
847
|
+
setCoagentStatesWithRef({});
|
|
848
|
+
let initialAgentSession = null;
|
|
849
|
+
if (agentLock) {
|
|
850
|
+
initialAgentSession = {
|
|
851
|
+
agentName: agentLock
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
setAgentSession(initialAgentSession);
|
|
855
|
+
}, [
|
|
856
|
+
latestStopFunc,
|
|
857
|
+
setMessages,
|
|
858
|
+
setThreadId,
|
|
859
|
+
setCoagentStatesWithRef,
|
|
860
|
+
setAgentSession,
|
|
861
|
+
agentLock
|
|
862
|
+
]);
|
|
863
|
+
const latestReset = useUpdatedRef(reset);
|
|
864
|
+
const latestResetFunc = (0, import_react8.useCallback)(() => {
|
|
865
|
+
return latestReset.current();
|
|
866
|
+
}, [latestReset]);
|
|
582
867
|
return {
|
|
583
868
|
visibleMessages: messages,
|
|
584
869
|
appendMessage: latestAppendFunc,
|
|
585
870
|
setMessages: latestSetMessagesFunc,
|
|
586
871
|
reloadMessages: latestReloadFunc,
|
|
587
872
|
stopGeneration: latestStopFunc,
|
|
873
|
+
reset: latestResetFunc,
|
|
588
874
|
deleteMessage: latestDeleteFunc,
|
|
589
875
|
runChatCompletion: latestRunChatCompletionFunc,
|
|
590
876
|
isLoading
|
|
591
877
|
};
|
|
592
878
|
}
|
|
593
879
|
function useUpdatedRef(value) {
|
|
594
|
-
const ref = (0,
|
|
595
|
-
(0,
|
|
880
|
+
const ref = (0, import_react8.useRef)(value);
|
|
881
|
+
(0, import_react8.useEffect)(() => {
|
|
596
882
|
ref.current = value;
|
|
597
883
|
}, [value]);
|
|
598
884
|
return ref;
|
|
@@ -661,28 +947,33 @@ function useCoAgent(options) {
|
|
|
661
947
|
};
|
|
662
948
|
const coagentState = getCoagentState(coagentStates, name);
|
|
663
949
|
const state = isExternalStateManagement(options) ? options.state : coagentState.state;
|
|
664
|
-
(0,
|
|
950
|
+
(0, import_react9.useEffect)(() => {
|
|
665
951
|
if (isExternalStateManagement(options)) {
|
|
666
952
|
setState(options.state);
|
|
667
953
|
} else if (coagentStates[name] === void 0) {
|
|
668
954
|
setState(options.initialState === void 0 ? {} : options.initialState);
|
|
669
955
|
}
|
|
670
|
-
}, [
|
|
956
|
+
}, [
|
|
957
|
+
isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0,
|
|
958
|
+
// reset initialstate on reset
|
|
959
|
+
coagentStates[name] === void 0
|
|
960
|
+
]);
|
|
961
|
+
const runAgentCallback = useAsyncCallback(
|
|
962
|
+
(hint) => __async(this, null, function* () {
|
|
963
|
+
yield runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
964
|
+
}),
|
|
965
|
+
[name, context, appendMessage, runChatCompletion]
|
|
966
|
+
);
|
|
671
967
|
return {
|
|
672
968
|
name,
|
|
673
969
|
nodeName: coagentState.nodeName,
|
|
674
|
-
|
|
675
|
-
setState,
|
|
970
|
+
threadId: coagentState.threadId,
|
|
676
971
|
running: coagentState.running,
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
stop: () =>
|
|
681
|
-
|
|
682
|
-
},
|
|
683
|
-
run: (hint) => {
|
|
684
|
-
return runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
685
|
-
}
|
|
972
|
+
state: coagentState.state,
|
|
973
|
+
setState: isExternalStateManagement(options) ? options.setState : setState,
|
|
974
|
+
start: () => startAgent(name, context),
|
|
975
|
+
stop: () => stopAgent(name, context),
|
|
976
|
+
run: runAgentCallback
|
|
686
977
|
};
|
|
687
978
|
}
|
|
688
979
|
function startAgent(name, context) {
|
|
@@ -695,6 +986,17 @@ function stopAgent(name, context) {
|
|
|
695
986
|
const { agentSession, setAgentSession } = context;
|
|
696
987
|
if (agentSession && agentSession.agentName === name) {
|
|
697
988
|
setAgentSession(null);
|
|
989
|
+
context.setCoagentStates((prevAgentStates) => {
|
|
990
|
+
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
991
|
+
[name]: __spreadProps(__spreadValues({}, prevAgentStates[name]), {
|
|
992
|
+
running: false,
|
|
993
|
+
active: false,
|
|
994
|
+
threadId: void 0,
|
|
995
|
+
nodeName: void 0,
|
|
996
|
+
runId: void 0
|
|
997
|
+
})
|
|
998
|
+
});
|
|
999
|
+
});
|
|
698
1000
|
} else {
|
|
699
1001
|
console.warn(`No agent session found for ${name}`);
|
|
700
1002
|
}
|
|
@@ -730,6 +1032,9 @@ function runAgent(name, context, appendMessage, runChatCompletion, hint) {
|
|
|
730
1032
|
}
|
|
731
1033
|
// Annotate the CommonJS export names for ESM import in node:
|
|
732
1034
|
0 && (module.exports = {
|
|
1035
|
+
runAgent,
|
|
1036
|
+
startAgent,
|
|
1037
|
+
stopAgent,
|
|
733
1038
|
useCoAgent
|
|
734
1039
|
});
|
|
735
1040
|
//# sourceMappingURL=use-coagent.js.map
|