@copilotkit/react-core 1.4.8-next.2 → 1.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -13
- package/dist/{chunk-DIX6ISOB.mjs → chunk-6EMLM6WX.mjs} +20 -19
- package/dist/chunk-6EMLM6WX.mjs.map +1 -0
- package/dist/{chunk-ODN4H66E.mjs → chunk-7LRDVJH5.mjs} +6 -2
- package/dist/chunk-7LRDVJH5.mjs.map +1 -0
- package/dist/{chunk-XXCJFOLY.mjs → chunk-AG7FH7OD.mjs} +2 -2
- package/dist/{chunk-XYFTGCMS.mjs → chunk-FSC4A3JN.mjs} +18 -14
- package/dist/chunk-FSC4A3JN.mjs.map +1 -0
- package/dist/{chunk-E3HHCHMQ.mjs → chunk-IFTHM7LF.mjs} +7 -10
- package/dist/chunk-IFTHM7LF.mjs.map +1 -0
- package/dist/{chunk-V6CEKRZA.mjs → chunk-IVYL7JRC.mjs} +12 -11
- package/dist/chunk-IVYL7JRC.mjs.map +1 -0
- package/dist/chunk-NTLCOVE5.mjs +321 -0
- package/dist/chunk-NTLCOVE5.mjs.map +1 -0
- package/dist/chunk-QCUP6HLK.mjs +37 -0
- package/dist/chunk-QCUP6HLK.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-CBMCK7UC.mjs → chunk-UOVONDR6.mjs} +2 -2
- package/dist/{chunk-XSORW54K.mjs → chunk-X6ZF5WAX.mjs} +2 -2
- package/dist/{chunk-4P56GAFP.mjs → chunk-XQFVXX6R.mjs} +2 -3
- package/dist/chunk-XQFVXX6R.mjs.map +1 -0
- package/dist/{chunk-ETCKRNXQ.mjs → chunk-YUY5ZAST.mjs} +7 -4
- package/dist/chunk-YUY5ZAST.mjs.map +1 -0
- package/dist/components/copilot-provider/copilot-messages.d.ts +0 -1
- package/dist/components/copilot-provider/copilotkit-props.d.ts +0 -5
- package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.d.ts +0 -1
- package/dist/components/copilot-provider/copilotkit.js +158 -95
- 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.d.ts +0 -1
- package/dist/components/copilot-provider/index.js +158 -95
- 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.d.ts +0 -1
- package/dist/components/index.js +158 -95
- 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 +1 -5
- package/dist/context/copilot-context.js +1 -2
- package/dist/context/copilot-context.js.map +1 -1
- package/dist/context/copilot-context.mjs +1 -1
- package/dist/context/index.js +1 -2
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +1 -1
- package/dist/hooks/index.js +401 -260
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +19 -18
- package/dist/hooks/use-chat.d.ts +1 -2
- package/dist/hooks/use-chat.js +343 -200
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +3 -3
- package/dist/hooks/use-coagent-state-render.js +1 -2
- 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.js +381 -240
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +9 -8
- package/dist/hooks/use-copilot-action.js +133 -9
- 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.js +370 -230
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +8 -7
- package/dist/hooks/use-copilot-readable.js +1 -2
- 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 +1 -2
- 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 +1 -1
- package/dist/index.js +450 -353
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -19
- package/dist/lib/copilot-task.d.ts +1 -6
- package/dist/lib/copilot-task.js +4 -22
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +6 -5
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +4 -22
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +6 -5
- package/dist/utils/extract.d.ts +2 -3
- package/dist/utils/extract.js +3 -21
- package/dist/utils/extract.js.map +1 -1
- package/dist/utils/extract.mjs +5 -4
- package/dist/utils/index.js +3 -21
- 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-props.tsx +0 -6
- package/src/components/copilot-provider/copilotkit.tsx +4 -2
- 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 +1 -8
- package/src/hooks/use-chat.ts +286 -266
- package/src/hooks/use-coagent.ts +14 -11
- package/src/hooks/use-copilot-action.ts +3 -2
- package/src/hooks/use-copilot-chat.ts +9 -10
- package/src/hooks/use-copilot-runtime-client.ts +4 -0
- package/src/lib/copilot-task.ts +2 -10
- package/src/utils/extract.ts +0 -4
- package/dist/chunk-2KCEHGSI.mjs.map +0 -1
- package/dist/chunk-4P56GAFP.mjs.map +0 -1
- package/dist/chunk-DIX6ISOB.mjs.map +0 -1
- package/dist/chunk-E3HHCHMQ.mjs.map +0 -1
- package/dist/chunk-ETCKRNXQ.mjs.map +0 -1
- package/dist/chunk-ODN4H66E.mjs.map +0 -1
- package/dist/chunk-PG5XEJVS.mjs +0 -295
- package/dist/chunk-PG5XEJVS.mjs.map +0 -1
- package/dist/chunk-V6CEKRZA.mjs.map +0 -1
- package/dist/chunk-XYFTGCMS.mjs.map +0 -1
- /package/dist/{chunk-XXCJFOLY.mjs.map → chunk-AG7FH7OD.mjs.map} +0 -0
- /package/dist/{chunk-CBMCK7UC.mjs.map → chunk-UOVONDR6.mjs.map} +0 -0
- /package/dist/{chunk-XSORW54K.mjs.map → chunk-X6ZF5WAX.mjs.map} +0 -0
|
@@ -82,7 +82,7 @@ __export(use_coagent_exports, {
|
|
|
82
82
|
useCoAgent: () => useCoAgent
|
|
83
83
|
});
|
|
84
84
|
module.exports = __toCommonJS(use_coagent_exports);
|
|
85
|
-
var
|
|
85
|
+
var import_react9 = require("react");
|
|
86
86
|
|
|
87
87
|
// src/context/copilot-context.tsx
|
|
88
88
|
var import_react = __toESM(require("react"));
|
|
@@ -138,8 +138,7 @@ var emptyCopilotContext = {
|
|
|
138
138
|
},
|
|
139
139
|
agentSession: null,
|
|
140
140
|
setAgentSession: () => {
|
|
141
|
-
}
|
|
142
|
-
forwardedParameters: {}
|
|
141
|
+
}
|
|
143
142
|
};
|
|
144
143
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
145
144
|
function useCopilotContext() {
|
|
@@ -172,20 +171,135 @@ function useCopilotMessagesContext() {
|
|
|
172
171
|
}
|
|
173
172
|
|
|
174
173
|
// src/hooks/use-copilot-chat.ts
|
|
175
|
-
var
|
|
174
|
+
var import_react8 = require("react");
|
|
176
175
|
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
177
176
|
|
|
178
177
|
// src/hooks/use-chat.ts
|
|
179
|
-
var
|
|
178
|
+
var import_react6 = require("react");
|
|
180
179
|
var import_shared = require("@copilotkit/shared");
|
|
181
180
|
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
182
181
|
|
|
183
182
|
// src/components/toast/toast-provider.tsx
|
|
183
|
+
var import_react4 = require("react");
|
|
184
|
+
|
|
185
|
+
// src/components/error-boundary/error-utils.tsx
|
|
184
186
|
var import_react3 = require("react");
|
|
187
|
+
|
|
188
|
+
// src/components/toast/exclamation-mark-icon.tsx
|
|
185
189
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
186
|
-
var
|
|
190
|
+
var ExclamationMarkIcon = ({
|
|
191
|
+
className,
|
|
192
|
+
style
|
|
193
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
194
|
+
"svg",
|
|
195
|
+
{
|
|
196
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
197
|
+
width: "24",
|
|
198
|
+
height: "24",
|
|
199
|
+
viewBox: "0 0 24 24",
|
|
200
|
+
fill: "none",
|
|
201
|
+
stroke: "currentColor",
|
|
202
|
+
strokeWidth: "2",
|
|
203
|
+
strokeLinecap: "round",
|
|
204
|
+
strokeLinejoin: "round",
|
|
205
|
+
className: `lucide lucide-circle-alert ${className ? className : ""}`,
|
|
206
|
+
style,
|
|
207
|
+
children: [
|
|
208
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
209
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
|
|
210
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
// src/components/error-boundary/error-utils.tsx
|
|
216
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
217
|
+
function ErrorToast({ errors }) {
|
|
218
|
+
const errorsToRender = errors.map((error, idx) => {
|
|
219
|
+
var _a, _b, _c;
|
|
220
|
+
const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
|
|
221
|
+
const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
|
|
222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
style: {
|
|
226
|
+
marginTop: idx === 0 ? 0 : 10,
|
|
227
|
+
marginBottom: 14
|
|
228
|
+
},
|
|
229
|
+
children: [
|
|
230
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
|
|
231
|
+
code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
232
|
+
"div",
|
|
233
|
+
{
|
|
234
|
+
style: {
|
|
235
|
+
fontWeight: "600",
|
|
236
|
+
marginBottom: 4
|
|
237
|
+
},
|
|
238
|
+
children: [
|
|
239
|
+
"Copilot Cloud Error:",
|
|
240
|
+
" ",
|
|
241
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
),
|
|
245
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
idx
|
|
249
|
+
);
|
|
250
|
+
});
|
|
251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
252
|
+
"div",
|
|
253
|
+
{
|
|
254
|
+
style: {
|
|
255
|
+
fontSize: "13px",
|
|
256
|
+
maxWidth: "600px"
|
|
257
|
+
},
|
|
258
|
+
children: [
|
|
259
|
+
errorsToRender,
|
|
260
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
function useErrorToast() {
|
|
266
|
+
const { addToast } = useToast();
|
|
267
|
+
return (0, import_react3.useCallback)(
|
|
268
|
+
(error) => {
|
|
269
|
+
const errorId = error.map((err) => {
|
|
270
|
+
var _a, _b;
|
|
271
|
+
const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
|
|
272
|
+
const stack = err.stack || "";
|
|
273
|
+
return btoa(message + stack).slice(0, 32);
|
|
274
|
+
}).join("|");
|
|
275
|
+
addToast({
|
|
276
|
+
type: "error",
|
|
277
|
+
id: errorId,
|
|
278
|
+
// Toast libraries typically dedupe by id
|
|
279
|
+
message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
|
|
280
|
+
});
|
|
281
|
+
},
|
|
282
|
+
[addToast]
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
function useAsyncCallback(callback, deps) {
|
|
286
|
+
const addErrorToast = useErrorToast();
|
|
287
|
+
return (0, import_react3.useCallback)((...args) => __async(this, null, function* () {
|
|
288
|
+
try {
|
|
289
|
+
return yield callback(...args);
|
|
290
|
+
} catch (error) {
|
|
291
|
+
console.error("Error in async callback:", error);
|
|
292
|
+
addErrorToast([error]);
|
|
293
|
+
throw error;
|
|
294
|
+
}
|
|
295
|
+
}), deps);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// src/components/toast/toast-provider.tsx
|
|
299
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
300
|
+
var ToastContext = (0, import_react4.createContext)(void 0);
|
|
187
301
|
function useToast() {
|
|
188
|
-
const context = (0,
|
|
302
|
+
const context = (0, import_react4.useContext)(ToastContext);
|
|
189
303
|
if (!context) {
|
|
190
304
|
throw new Error("useToast must be used within a ToastProvider");
|
|
191
305
|
}
|
|
@@ -194,14 +308,17 @@ function useToast() {
|
|
|
194
308
|
|
|
195
309
|
// src/hooks/use-copilot-runtime-client.ts
|
|
196
310
|
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
197
|
-
var
|
|
311
|
+
var import_react5 = require("react");
|
|
198
312
|
var useCopilotRuntimeClient = (options) => {
|
|
199
313
|
const { addGraphQLErrorsToast } = useToast();
|
|
200
|
-
const
|
|
314
|
+
const addErrorToast = useErrorToast();
|
|
315
|
+
const runtimeClient = (0, import_react5.useMemo)(() => {
|
|
201
316
|
return new import_runtime_client_gql.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
202
317
|
handleGQLErrors: (error) => {
|
|
203
318
|
if (error.graphQLErrors.length) {
|
|
204
319
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
320
|
+
} else {
|
|
321
|
+
addErrorToast([error]);
|
|
205
322
|
}
|
|
206
323
|
}
|
|
207
324
|
}));
|
|
@@ -227,12 +344,12 @@ function useChat(options) {
|
|
|
227
344
|
agentSession,
|
|
228
345
|
setAgentSession
|
|
229
346
|
} = options;
|
|
230
|
-
const abortControllerRef = (0,
|
|
231
|
-
const threadIdRef = (0,
|
|
232
|
-
const runIdRef = (0,
|
|
347
|
+
const abortControllerRef = (0, import_react6.useRef)();
|
|
348
|
+
const threadIdRef = (0, import_react6.useRef)(null);
|
|
349
|
+
const runIdRef = (0, import_react6.useRef)(null);
|
|
233
350
|
const { addGraphQLErrorsToast } = useToast();
|
|
234
|
-
const runChatCompletionRef = (0,
|
|
235
|
-
const agentSessionRef = (0,
|
|
351
|
+
const runChatCompletionRef = (0, import_react6.useRef)();
|
|
352
|
+
const agentSessionRef = (0, import_react6.useRef)(agentSession);
|
|
236
353
|
agentSessionRef.current = agentSession;
|
|
237
354
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
238
355
|
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
@@ -242,211 +359,236 @@ function useChat(options) {
|
|
|
242
359
|
headers,
|
|
243
360
|
credentials: copilotConfig.credentials
|
|
244
361
|
});
|
|
245
|
-
const runChatCompletion = (
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
runtimeClient.
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
available
|
|
271
|
-
|
|
272
|
-
available
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
362
|
+
const runChatCompletion = useAsyncCallback(
|
|
363
|
+
(previousMessages) => __async(this, null, function* () {
|
|
364
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
365
|
+
setIsLoading(true);
|
|
366
|
+
let newMessages = [
|
|
367
|
+
new import_runtime_client_gql2.TextMessage({
|
|
368
|
+
content: "",
|
|
369
|
+
role: import_runtime_client_gql2.Role.Assistant
|
|
370
|
+
})
|
|
371
|
+
];
|
|
372
|
+
const abortController = new AbortController();
|
|
373
|
+
abortControllerRef.current = abortController;
|
|
374
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
375
|
+
const systemMessage = makeSystemMessageCallback();
|
|
376
|
+
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
377
|
+
const stream = runtimeClient.asStream(
|
|
378
|
+
runtimeClient.generateCopilotResponse({
|
|
379
|
+
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
380
|
+
frontend: {
|
|
381
|
+
actions: actions.filter(
|
|
382
|
+
(action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
|
|
383
|
+
).map((action) => {
|
|
384
|
+
let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
|
|
385
|
+
if (action.disabled) {
|
|
386
|
+
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
387
|
+
} else if (action.available === "disabled") {
|
|
388
|
+
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
389
|
+
} else if (action.available === "remote") {
|
|
390
|
+
available = import_runtime_client_gql2.ActionInputAvailability.Remote;
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
name: action.name,
|
|
394
|
+
description: action.description || "",
|
|
395
|
+
jsonSchema: JSON.stringify(
|
|
396
|
+
(0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
|
|
397
|
+
),
|
|
398
|
+
available
|
|
399
|
+
};
|
|
400
|
+
}),
|
|
401
|
+
url: window.location.href
|
|
402
|
+
},
|
|
403
|
+
threadId: threadIdRef.current,
|
|
404
|
+
runId: runIdRef.current,
|
|
405
|
+
messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
|
|
406
|
+
}, copilotConfig.cloud ? {
|
|
407
|
+
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
408
|
+
guardrails: {
|
|
409
|
+
inputValidationRules: {
|
|
410
|
+
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
411
|
+
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
412
|
+
}
|
|
292
413
|
}
|
|
414
|
+
} : {})
|
|
415
|
+
} : {}), {
|
|
416
|
+
metadata: {
|
|
417
|
+
requestType: import_runtime_client_gql2.CopilotRequestType.Chat
|
|
293
418
|
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
419
|
+
}), agentSessionRef.current ? {
|
|
420
|
+
agentSession: agentSessionRef.current
|
|
421
|
+
} : {}), {
|
|
422
|
+
agentStates: Object.values(coagentStatesRef.current).map((state) => ({
|
|
423
|
+
agentName: state.name,
|
|
424
|
+
state: JSON.stringify(state.state)
|
|
425
|
+
}))
|
|
426
|
+
}),
|
|
427
|
+
properties: copilotConfig.properties,
|
|
428
|
+
signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
|
|
429
|
+
})
|
|
430
|
+
);
|
|
431
|
+
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
432
|
+
const reader = stream.getReader();
|
|
433
|
+
let actionResults = {};
|
|
434
|
+
let executedCoAgentStateRenders = [];
|
|
435
|
+
let followUp = void 0;
|
|
436
|
+
try {
|
|
437
|
+
while (true) {
|
|
438
|
+
let done, value;
|
|
439
|
+
try {
|
|
440
|
+
const readResult = yield reader.read();
|
|
441
|
+
done = readResult.done;
|
|
442
|
+
value = readResult.value;
|
|
443
|
+
} catch (readError) {
|
|
444
|
+
break;
|
|
298
445
|
}
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
446
|
+
if (done) {
|
|
447
|
+
break;
|
|
448
|
+
}
|
|
449
|
+
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
452
|
+
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
453
|
+
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
454
|
+
const messages2 = (0, import_runtime_client_gql2.convertGqlOutputToMessages)(
|
|
455
|
+
(0, import_runtime_client_gql2.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
456
|
+
);
|
|
457
|
+
if (messages2.length === 0) {
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
newMessages = [];
|
|
461
|
+
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
462
|
+
newMessages = [
|
|
463
|
+
new import_runtime_client_gql2.TextMessage({
|
|
464
|
+
role: import_runtime_client_gql2.MessageRole.Assistant,
|
|
465
|
+
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
466
|
+
})
|
|
467
|
+
];
|
|
468
|
+
} else {
|
|
469
|
+
for (const message of messages2) {
|
|
470
|
+
newMessages.push(message);
|
|
471
|
+
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
472
|
+
if (!(message.id in actionResults)) {
|
|
473
|
+
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
try {
|
|
477
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
478
|
+
const action = actions.find((action2) => action2.name === message.name);
|
|
479
|
+
if (action) {
|
|
480
|
+
followUp = action.followUp;
|
|
481
|
+
}
|
|
482
|
+
const result = yield onFunctionCall({
|
|
483
|
+
messages: previousMessages,
|
|
484
|
+
name: message.name,
|
|
485
|
+
args: message.arguments
|
|
486
|
+
});
|
|
487
|
+
actionResults[message.id] = result;
|
|
488
|
+
} catch (e) {
|
|
489
|
+
actionResults[message.id] = `Failed to execute action ${message.name}`;
|
|
490
|
+
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
newMessages.push(
|
|
494
|
+
new import_runtime_client_gql2.ResultMessage({
|
|
495
|
+
result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
|
|
496
|
+
actionExecutionId: message.id,
|
|
497
|
+
actionName: message.name
|
|
498
|
+
})
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
354
502
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
355
503
|
break;
|
|
356
504
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
const result = yield onFunctionCall({
|
|
364
|
-
messages: previousMessages,
|
|
365
|
-
name: message.name,
|
|
366
|
-
args: message.arguments
|
|
367
|
-
});
|
|
368
|
-
actionResults[message.id] = result;
|
|
369
|
-
} catch (e) {
|
|
370
|
-
actionResults[message.id] = `Failed to execute action ${message.name}`;
|
|
371
|
-
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
372
|
-
}
|
|
505
|
+
yield onCoAgentStateRender({
|
|
506
|
+
name: message.agentName,
|
|
507
|
+
nodeName: message.nodeName,
|
|
508
|
+
state: message.state
|
|
509
|
+
});
|
|
510
|
+
executedCoAgentStateRenders.push(message.id);
|
|
373
511
|
}
|
|
374
|
-
newMessages.push(
|
|
375
|
-
new import_runtime_client_gql2.ResultMessage({
|
|
376
|
-
result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
|
|
377
|
-
actionExecutionId: message.id,
|
|
378
|
-
actionName: message.name
|
|
379
|
-
})
|
|
380
|
-
);
|
|
381
512
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
513
|
+
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
514
|
+
if (lastAgentStateMessage) {
|
|
515
|
+
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
516
|
+
[lastAgentStateMessage.agentName]: {
|
|
517
|
+
name: lastAgentStateMessage.agentName,
|
|
518
|
+
state: lastAgentStateMessage.state,
|
|
519
|
+
running: lastAgentStateMessage.running,
|
|
520
|
+
active: lastAgentStateMessage.active,
|
|
521
|
+
threadId: lastAgentStateMessage.threadId,
|
|
522
|
+
nodeName: lastAgentStateMessage.nodeName,
|
|
523
|
+
runId: lastAgentStateMessage.runId
|
|
524
|
+
}
|
|
525
|
+
}));
|
|
526
|
+
if (lastAgentStateMessage.running) {
|
|
527
|
+
setAgentSession({
|
|
528
|
+
threadId: lastAgentStateMessage.threadId,
|
|
529
|
+
agentName: lastAgentStateMessage.agentName,
|
|
530
|
+
nodeName: lastAgentStateMessage.nodeName
|
|
531
|
+
});
|
|
532
|
+
} else {
|
|
533
|
+
setAgentSession(null);
|
|
385
534
|
}
|
|
386
|
-
yield onCoAgentStateRender({
|
|
387
|
-
name: message.agentName,
|
|
388
|
-
nodeName: message.nodeName,
|
|
389
|
-
state: message.state
|
|
390
|
-
});
|
|
391
|
-
executedCoAgentStateRenders.push(message.id);
|
|
392
535
|
}
|
|
393
536
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
397
|
-
[lastAgentStateMessage.agentName]: {
|
|
398
|
-
name: lastAgentStateMessage.agentName,
|
|
399
|
-
state: lastAgentStateMessage.state,
|
|
400
|
-
running: lastAgentStateMessage.running,
|
|
401
|
-
active: lastAgentStateMessage.active,
|
|
402
|
-
threadId: lastAgentStateMessage.threadId,
|
|
403
|
-
nodeName: lastAgentStateMessage.nodeName,
|
|
404
|
-
runId: lastAgentStateMessage.runId
|
|
405
|
-
}
|
|
406
|
-
}));
|
|
407
|
-
if (lastAgentStateMessage.running) {
|
|
408
|
-
setAgentSession({
|
|
409
|
-
threadId: lastAgentStateMessage.threadId,
|
|
410
|
-
agentName: lastAgentStateMessage.agentName,
|
|
411
|
-
nodeName: lastAgentStateMessage.nodeName
|
|
412
|
-
});
|
|
413
|
-
} else {
|
|
414
|
-
setAgentSession(null);
|
|
415
|
-
}
|
|
537
|
+
if (newMessages.length > 0) {
|
|
538
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
416
539
|
}
|
|
417
540
|
}
|
|
418
|
-
if (
|
|
419
|
-
|
|
541
|
+
if (
|
|
542
|
+
// if followUp is not explicitly false
|
|
543
|
+
followUp !== false && // if we have client side results
|
|
544
|
+
(Object.values(actionResults).length || // or the last message we received is a result
|
|
545
|
+
newMessages.length && newMessages[newMessages.length - 1].isResultMessage())
|
|
546
|
+
) {
|
|
547
|
+
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
548
|
+
return yield runChatCompletionRef.current([...previousMessages, ...newMessages]);
|
|
549
|
+
} else {
|
|
550
|
+
return newMessages.slice();
|
|
420
551
|
}
|
|
552
|
+
} finally {
|
|
553
|
+
setIsLoading(false);
|
|
421
554
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
555
|
+
}),
|
|
556
|
+
[
|
|
557
|
+
messages,
|
|
558
|
+
setMessages,
|
|
559
|
+
makeSystemMessageCallback,
|
|
560
|
+
copilotConfig,
|
|
561
|
+
setIsLoading,
|
|
562
|
+
initialMessages,
|
|
563
|
+
isLoading,
|
|
564
|
+
actions,
|
|
565
|
+
onFunctionCall,
|
|
566
|
+
onCoAgentStateRender,
|
|
567
|
+
setCoagentStatesWithRef,
|
|
568
|
+
coagentStatesRef,
|
|
569
|
+
agentSession,
|
|
570
|
+
setAgentSession
|
|
571
|
+
]
|
|
572
|
+
);
|
|
437
573
|
runChatCompletionRef.current = runChatCompletion;
|
|
438
|
-
const runChatCompletionAndHandleFunctionCall = (
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
574
|
+
const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
|
|
575
|
+
(messages2) => __async(this, null, function* () {
|
|
576
|
+
yield runChatCompletionRef.current(messages2);
|
|
577
|
+
}),
|
|
578
|
+
[messages]
|
|
579
|
+
);
|
|
580
|
+
const append = useAsyncCallback(
|
|
581
|
+
(message) => __async(this, null, function* () {
|
|
582
|
+
if (isLoading) {
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
const newMessages = [...messages, message];
|
|
586
|
+
setMessages(newMessages);
|
|
587
|
+
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
588
|
+
}),
|
|
589
|
+
[isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
|
|
590
|
+
);
|
|
591
|
+
const reload = useAsyncCallback(() => __async(this, null, function* () {
|
|
450
592
|
if (isLoading || messages.length === 0) {
|
|
451
593
|
return;
|
|
452
594
|
}
|
|
@@ -457,7 +599,7 @@ function useChat(options) {
|
|
|
457
599
|
}
|
|
458
600
|
setMessages(newMessages);
|
|
459
601
|
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
460
|
-
});
|
|
602
|
+
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
461
603
|
const stop = () => {
|
|
462
604
|
var _a;
|
|
463
605
|
(_a = abortControllerRef.current) == null ? void 0 : _a.abort();
|
|
@@ -471,10 +613,10 @@ function useChat(options) {
|
|
|
471
613
|
}
|
|
472
614
|
|
|
473
615
|
// src/components/copilot-provider/copilotkit.tsx
|
|
474
|
-
var
|
|
616
|
+
var import_react7 = require("react");
|
|
475
617
|
var import_react_dom = require("react-dom");
|
|
476
618
|
var import_shared2 = require("@copilotkit/shared");
|
|
477
|
-
var
|
|
619
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
478
620
|
var defaultCopilotContextCategories = ["global"];
|
|
479
621
|
|
|
480
622
|
// src/hooks/use-copilot-chat.ts
|
|
@@ -496,18 +638,17 @@ function useCopilotChat(_a = {}) {
|
|
|
496
638
|
setCoagentStatesWithRef,
|
|
497
639
|
coAgentStateRenders,
|
|
498
640
|
agentSession,
|
|
499
|
-
setAgentSession
|
|
500
|
-
forwardedParameters
|
|
641
|
+
setAgentSession
|
|
501
642
|
} = useCopilotContext();
|
|
502
643
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
503
644
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
504
|
-
const deleteMessage = (0,
|
|
645
|
+
const deleteMessage = (0, import_react8.useCallback)(
|
|
505
646
|
(messageId) => {
|
|
506
647
|
setMessages((prev) => prev.filter((message) => message.id !== messageId));
|
|
507
648
|
},
|
|
508
649
|
[setMessages]
|
|
509
650
|
);
|
|
510
|
-
const makeSystemMessageCallback = (0,
|
|
651
|
+
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
511
652
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
512
653
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
513
654
|
return new import_runtime_client_gql3.TextMessage({
|
|
@@ -515,7 +656,7 @@ function useCopilotChat(_a = {}) {
|
|
|
515
656
|
role: import_runtime_client_gql3.Role.System
|
|
516
657
|
});
|
|
517
658
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
518
|
-
const onCoAgentStateRender = (
|
|
659
|
+
const onCoAgentStateRender = useAsyncCallback(
|
|
519
660
|
(args) => __async(this, null, function* () {
|
|
520
661
|
var _a2;
|
|
521
662
|
const { name, nodeName, state } = args;
|
|
@@ -547,42 +688,41 @@ function useCopilotChat(_a = {}) {
|
|
|
547
688
|
coagentStatesRef,
|
|
548
689
|
setCoagentStatesWithRef,
|
|
549
690
|
agentSession,
|
|
550
|
-
setAgentSession
|
|
551
|
-
forwardedParameters
|
|
691
|
+
setAgentSession
|
|
552
692
|
}));
|
|
553
693
|
const latestAppend = useUpdatedRef(append);
|
|
554
|
-
const latestAppendFunc = (
|
|
555
|
-
(message) => {
|
|
556
|
-
return latestAppend.current(message);
|
|
557
|
-
},
|
|
694
|
+
const latestAppendFunc = useAsyncCallback(
|
|
695
|
+
(message) => __async(this, null, function* () {
|
|
696
|
+
return yield latestAppend.current(message);
|
|
697
|
+
}),
|
|
558
698
|
[latestAppend]
|
|
559
699
|
);
|
|
560
700
|
const latestReload = useUpdatedRef(reload);
|
|
561
|
-
const latestReloadFunc = (
|
|
562
|
-
return latestReload.current();
|
|
563
|
-
}, [latestReload]);
|
|
701
|
+
const latestReloadFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
702
|
+
return yield latestReload.current();
|
|
703
|
+
}), [latestReload]);
|
|
564
704
|
const latestStop = useUpdatedRef(stop);
|
|
565
|
-
const latestStopFunc = (0,
|
|
705
|
+
const latestStopFunc = (0, import_react8.useCallback)(() => {
|
|
566
706
|
return latestStop.current();
|
|
567
707
|
}, [latestStop]);
|
|
568
708
|
const latestDelete = useUpdatedRef(deleteMessage);
|
|
569
|
-
const latestDeleteFunc = (0,
|
|
709
|
+
const latestDeleteFunc = (0, import_react8.useCallback)(
|
|
570
710
|
(messageId) => {
|
|
571
711
|
return latestDelete.current(messageId);
|
|
572
712
|
},
|
|
573
713
|
[latestDelete]
|
|
574
714
|
);
|
|
575
715
|
const latestSetMessages = useUpdatedRef(setMessages);
|
|
576
|
-
const latestSetMessagesFunc = (0,
|
|
716
|
+
const latestSetMessagesFunc = (0, import_react8.useCallback)(
|
|
577
717
|
(messages2) => {
|
|
578
718
|
return latestSetMessages.current(messages2);
|
|
579
719
|
},
|
|
580
720
|
[latestSetMessages]
|
|
581
721
|
);
|
|
582
722
|
const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
|
|
583
|
-
const latestRunChatCompletionFunc = (
|
|
584
|
-
return latestRunChatCompletion.current();
|
|
585
|
-
}, [latestRunChatCompletion]);
|
|
723
|
+
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
724
|
+
return yield latestRunChatCompletion.current();
|
|
725
|
+
}), [latestRunChatCompletion]);
|
|
586
726
|
return {
|
|
587
727
|
visibleMessages: messages,
|
|
588
728
|
appendMessage: latestAppendFunc,
|
|
@@ -595,8 +735,8 @@ function useCopilotChat(_a = {}) {
|
|
|
595
735
|
};
|
|
596
736
|
}
|
|
597
737
|
function useUpdatedRef(value) {
|
|
598
|
-
const ref = (0,
|
|
599
|
-
(0,
|
|
738
|
+
const ref = (0, import_react8.useRef)(value);
|
|
739
|
+
(0, import_react8.useEffect)(() => {
|
|
600
740
|
ref.current = value;
|
|
601
741
|
}, [value]);
|
|
602
742
|
return ref;
|
|
@@ -665,28 +805,29 @@ function useCoAgent(options) {
|
|
|
665
805
|
};
|
|
666
806
|
const coagentState = getCoagentState(coagentStates, name);
|
|
667
807
|
const state = isExternalStateManagement(options) ? options.state : coagentState.state;
|
|
668
|
-
(0,
|
|
808
|
+
(0, import_react9.useEffect)(() => {
|
|
669
809
|
if (isExternalStateManagement(options)) {
|
|
670
810
|
setState(options.state);
|
|
671
811
|
} else if (coagentStates[name] === void 0) {
|
|
672
812
|
setState(options.initialState === void 0 ? {} : options.initialState);
|
|
673
813
|
}
|
|
674
814
|
}, [isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0]);
|
|
815
|
+
const runAgentCallback = useAsyncCallback(
|
|
816
|
+
(hint) => __async(this, null, function* () {
|
|
817
|
+
yield runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
818
|
+
}),
|
|
819
|
+
[name, context, appendMessage, runChatCompletion]
|
|
820
|
+
);
|
|
675
821
|
return {
|
|
676
822
|
name,
|
|
677
823
|
nodeName: coagentState.nodeName,
|
|
678
|
-
|
|
679
|
-
setState,
|
|
824
|
+
threadId: coagentState.threadId,
|
|
680
825
|
running: coagentState.running,
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
stop: () =>
|
|
685
|
-
|
|
686
|
-
},
|
|
687
|
-
run: (hint) => {
|
|
688
|
-
return runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
689
|
-
}
|
|
826
|
+
state: coagentState.state,
|
|
827
|
+
setState: isExternalStateManagement(options) ? options.setState : setState,
|
|
828
|
+
start: () => startAgent(name, context),
|
|
829
|
+
stop: () => stopAgent(name, context),
|
|
830
|
+
run: runAgentCallback
|
|
690
831
|
};
|
|
691
832
|
}
|
|
692
833
|
function startAgent(name, context) {
|