@copilotkit/react-core 1.4.8 → 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 +14 -0
- package/dist/{chunk-X6ZF5WAX.mjs → chunk-35EN6BG4.mjs} +2 -2
- package/dist/{chunk-FSC4A3JN.mjs → chunk-42N5VKIX.mjs} +23 -5
- package/dist/{chunk-FSC4A3JN.mjs.map → chunk-42N5VKIX.mjs.map} +1 -1
- package/dist/{chunk-AG7FH7OD.mjs → chunk-5FYKUKG3.mjs} +2 -2
- package/dist/{chunk-YUY5ZAST.mjs → chunk-ALR5W5JK.mjs} +17 -8
- package/dist/chunk-ALR5W5JK.mjs.map +1 -0
- package/dist/{chunk-6EMLM6WX.mjs → chunk-BT6WK2JZ.mjs} +43 -6
- package/dist/chunk-BT6WK2JZ.mjs.map +1 -0
- package/dist/{chunk-NTLCOVE5.mjs → chunk-QTDCEDOC.mjs} +141 -70
- package/dist/chunk-QTDCEDOC.mjs.map +1 -0
- package/dist/{chunk-IFTHM7LF.mjs → chunk-QX6V774L.mjs} +6 -8
- package/dist/chunk-QX6V774L.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-IVYL7JRC.mjs → chunk-VMP6JWBB.mjs} +12 -3
- package/dist/{chunk-IVYL7JRC.mjs.map → chunk-VMP6JWBB.mjs.map} +1 -1
- package/dist/chunk-XERJQUHA.mjs +31 -0
- package/dist/chunk-XERJQUHA.mjs.map +1 -0
- package/dist/components/copilot-provider/copilotkit.js +19 -2
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +2 -2
- package/dist/components/copilot-provider/index.js +19 -2
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +2 -2
- package/dist/components/index.js +19 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +2 -2
- 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 +264 -95
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +16 -9
- package/dist/hooks/use-chat.d.ts +20 -0
- package/dist/hooks/use-chat.js +171 -77
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +2 -1
- 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 +245 -85
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +12 -5
- package/dist/hooks/use-copilot-action.d.ts +12 -2
- package/dist/hooks/use-copilot-action.js +24 -7
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +2 -2
- package/dist/hooks/use-copilot-chat.d.ts +1 -0
- package/dist/hooks/use-copilot-chat.js +223 -84
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +5 -4
- 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-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 +281 -106
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -10
- 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 +4 -3
- 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 +4 -3
- 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 +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +2 -2
- package/package.json +3 -3
- package/src/components/copilot-provider/copilotkit.tsx +10 -0
- package/src/context/copilot-context.tsx +30 -2
- package/src/hooks/index.ts +1 -1
- package/src/hooks/use-chat.ts +196 -88
- package/src/hooks/use-coagent.ts +21 -4
- package/src/hooks/use-copilot-action.ts +38 -10
- package/src/hooks/use-copilot-chat.ts +43 -3
- 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-6EMLM6WX.mjs.map +0 -1
- package/dist/chunk-IFTHM7LF.mjs.map +0 -1
- package/dist/chunk-NTLCOVE5.mjs.map +0 -1
- package/dist/chunk-XQFVXX6R.mjs.map +0 -1
- package/dist/chunk-YUY5ZAST.mjs.map +0 -1
- /package/dist/{chunk-X6ZF5WAX.mjs.map → chunk-35EN6BG4.mjs.map} +0 -0
- /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,
|
|
@@ -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,12 +173,37 @@ 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
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
|
|
173
209
|
var import_react3 = require("react");
|
|
@@ -297,13 +333,13 @@ function useToast() {
|
|
|
297
333
|
}
|
|
298
334
|
|
|
299
335
|
// src/hooks/use-copilot-runtime-client.ts
|
|
300
|
-
var
|
|
336
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
301
337
|
var import_react4 = require("react");
|
|
302
338
|
var useCopilotRuntimeClient = (options) => {
|
|
303
339
|
const { addGraphQLErrorsToast } = useToast();
|
|
304
340
|
const addErrorToast = useErrorToast();
|
|
305
341
|
const runtimeClient = (0, import_react4.useMemo)(() => {
|
|
306
|
-
return new
|
|
342
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
307
343
|
handleGQLErrors: (error) => {
|
|
308
344
|
if (error.graphQLErrors.length) {
|
|
309
345
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
@@ -332,17 +368,23 @@ function useChat(options) {
|
|
|
332
368
|
setCoagentStatesWithRef,
|
|
333
369
|
coagentStatesRef,
|
|
334
370
|
agentSession,
|
|
335
|
-
setAgentSession
|
|
371
|
+
setAgentSession,
|
|
372
|
+
threadId,
|
|
373
|
+
setThreadId,
|
|
374
|
+
runId,
|
|
375
|
+
setRunId,
|
|
376
|
+
chatAbortControllerRef
|
|
336
377
|
} = options;
|
|
337
|
-
const abortControllerRef = (0, import_react5.useRef)();
|
|
338
|
-
const threadIdRef = (0, import_react5.useRef)(null);
|
|
339
|
-
const runIdRef = (0, import_react5.useRef)(null);
|
|
340
378
|
const { addGraphQLErrorsToast } = useToast();
|
|
341
379
|
const runChatCompletionRef = (0, import_react5.useRef)();
|
|
342
380
|
const agentSessionRef = (0, import_react5.useRef)(agentSession);
|
|
343
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;
|
|
344
386
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
345
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
387
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
346
388
|
const runtimeClient = useCopilotRuntimeClient({
|
|
347
389
|
url: copilotConfig.chatApiEndpoint,
|
|
348
390
|
publicApiKey: copilotConfig.publicApiKey,
|
|
@@ -351,48 +393,29 @@ function useChat(options) {
|
|
|
351
393
|
});
|
|
352
394
|
const runChatCompletion = useAsyncCallback(
|
|
353
395
|
(previousMessages) => __async(this, null, function* () {
|
|
354
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
396
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
355
397
|
setIsLoading(true);
|
|
356
398
|
let newMessages = [
|
|
357
|
-
new
|
|
399
|
+
new import_runtime_client_gql3.TextMessage({
|
|
358
400
|
content: "",
|
|
359
|
-
role:
|
|
401
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
360
402
|
})
|
|
361
403
|
];
|
|
362
|
-
|
|
363
|
-
abortControllerRef.current = abortController;
|
|
404
|
+
chatAbortControllerRef.current = new AbortController();
|
|
364
405
|
setMessages([...previousMessages, ...newMessages]);
|
|
365
406
|
const systemMessage = makeSystemMessageCallback();
|
|
366
407
|
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
408
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
367
409
|
const stream = runtimeClient.asStream(
|
|
368
410
|
runtimeClient.generateCopilotResponse({
|
|
369
411
|
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
370
412
|
frontend: {
|
|
371
|
-
actions: actions
|
|
372
|
-
(action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
|
|
373
|
-
).map((action) => {
|
|
374
|
-
let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
|
|
375
|
-
if (action.disabled) {
|
|
376
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
377
|
-
} else if (action.available === "disabled") {
|
|
378
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
379
|
-
} else if (action.available === "remote") {
|
|
380
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Remote;
|
|
381
|
-
}
|
|
382
|
-
return {
|
|
383
|
-
name: action.name,
|
|
384
|
-
description: action.description || "",
|
|
385
|
-
jsonSchema: JSON.stringify(
|
|
386
|
-
(0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
|
|
387
|
-
),
|
|
388
|
-
available
|
|
389
|
-
};
|
|
390
|
-
}),
|
|
413
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
391
414
|
url: window.location.href
|
|
392
415
|
},
|
|
393
416
|
threadId: threadIdRef.current,
|
|
394
417
|
runId: runIdRef.current,
|
|
395
|
-
messages: (0,
|
|
418
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
396
419
|
}, copilotConfig.cloud ? {
|
|
397
420
|
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
398
421
|
guardrails: {
|
|
@@ -404,7 +427,7 @@ function useChat(options) {
|
|
|
404
427
|
} : {})
|
|
405
428
|
} : {}), {
|
|
406
429
|
metadata: {
|
|
407
|
-
requestType:
|
|
430
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
408
431
|
}
|
|
409
432
|
}), agentSessionRef.current ? {
|
|
410
433
|
agentSession: agentSessionRef.current
|
|
@@ -415,14 +438,15 @@ function useChat(options) {
|
|
|
415
438
|
}))
|
|
416
439
|
}),
|
|
417
440
|
properties: copilotConfig.properties,
|
|
418
|
-
signal: (_d =
|
|
441
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
419
442
|
})
|
|
420
443
|
);
|
|
421
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;
|
|
422
445
|
const reader = stream.getReader();
|
|
423
|
-
let actionResults = {};
|
|
424
446
|
let executedCoAgentStateRenders = [];
|
|
425
447
|
let followUp = void 0;
|
|
448
|
+
let messages2 = [];
|
|
449
|
+
let syncedMessages = [];
|
|
426
450
|
try {
|
|
427
451
|
while (true) {
|
|
428
452
|
let done, value;
|
|
@@ -434,6 +458,9 @@ function useChat(options) {
|
|
|
434
458
|
break;
|
|
435
459
|
}
|
|
436
460
|
if (done) {
|
|
461
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
462
|
+
return [];
|
|
463
|
+
}
|
|
437
464
|
break;
|
|
438
465
|
}
|
|
439
466
|
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
@@ -441,8 +468,10 @@ function useChat(options) {
|
|
|
441
468
|
}
|
|
442
469
|
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
443
470
|
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
444
|
-
|
|
445
|
-
|
|
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)
|
|
446
475
|
);
|
|
447
476
|
if (messages2.length === 0) {
|
|
448
477
|
continue;
|
|
@@ -450,44 +479,16 @@ function useChat(options) {
|
|
|
450
479
|
newMessages = [];
|
|
451
480
|
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
452
481
|
newMessages = [
|
|
453
|
-
new
|
|
454
|
-
role:
|
|
482
|
+
new import_runtime_client_gql3.TextMessage({
|
|
483
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
455
484
|
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
456
485
|
})
|
|
457
486
|
];
|
|
487
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
488
|
+
break;
|
|
458
489
|
} else {
|
|
490
|
+
newMessages = [...messages2];
|
|
459
491
|
for (const message of messages2) {
|
|
460
|
-
newMessages.push(message);
|
|
461
|
-
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
462
|
-
if (!(message.id in actionResults)) {
|
|
463
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
464
|
-
break;
|
|
465
|
-
}
|
|
466
|
-
try {
|
|
467
|
-
setMessages([...previousMessages, ...newMessages]);
|
|
468
|
-
const action = actions.find((action2) => action2.name === message.name);
|
|
469
|
-
if (action) {
|
|
470
|
-
followUp = action.followUp;
|
|
471
|
-
}
|
|
472
|
-
const result = yield onFunctionCall({
|
|
473
|
-
messages: previousMessages,
|
|
474
|
-
name: message.name,
|
|
475
|
-
args: message.arguments
|
|
476
|
-
});
|
|
477
|
-
actionResults[message.id] = result;
|
|
478
|
-
} catch (e) {
|
|
479
|
-
actionResults[message.id] = `Failed to execute action ${message.name}`;
|
|
480
|
-
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
newMessages.push(
|
|
484
|
-
new import_runtime_client_gql2.ResultMessage({
|
|
485
|
-
result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
|
|
486
|
-
actionExecutionId: message.id,
|
|
487
|
-
actionName: message.name
|
|
488
|
-
})
|
|
489
|
-
);
|
|
490
|
-
}
|
|
491
492
|
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
492
493
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
493
494
|
break;
|
|
@@ -502,6 +503,11 @@ function useChat(options) {
|
|
|
502
503
|
}
|
|
503
504
|
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
504
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
|
+
}
|
|
505
511
|
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
506
512
|
[lastAgentStateMessage.agentName]: {
|
|
507
513
|
name: lastAgentStateMessage.agentName,
|
|
@@ -528,14 +534,96 @@ function useChat(options) {
|
|
|
528
534
|
setMessages([...previousMessages, ...newMessages]);
|
|
529
535
|
}
|
|
530
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({
|
|
558
|
+
messages: previousMessages,
|
|
559
|
+
name: message.name,
|
|
560
|
+
args: message.arguments
|
|
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}`);
|
|
582
|
+
}
|
|
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),
|
|
591
|
+
actionExecutionId: message.id,
|
|
592
|
+
actionName: message.name
|
|
593
|
+
})
|
|
594
|
+
);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
setMessages(finalMessages);
|
|
598
|
+
}
|
|
531
599
|
if (
|
|
532
600
|
// if followUp is not explicitly false
|
|
533
|
-
followUp !== false && //
|
|
534
|
-
(
|
|
535
|
-
|
|
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)
|
|
536
605
|
) {
|
|
537
606
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
538
|
-
return yield runChatCompletionRef.current(
|
|
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
|
+
);
|
|
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
|
+
});
|
|
625
|
+
}
|
|
626
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
539
627
|
} else {
|
|
540
628
|
return newMessages.slice();
|
|
541
629
|
}
|
|
@@ -592,7 +680,7 @@ function useChat(options) {
|
|
|
592
680
|
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
593
681
|
const stop = () => {
|
|
594
682
|
var _a;
|
|
595
|
-
(_a =
|
|
683
|
+
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
596
684
|
};
|
|
597
685
|
return {
|
|
598
686
|
append,
|
|
@@ -601,11 +689,28 @@ function useChat(options) {
|
|
|
601
689
|
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
602
690
|
};
|
|
603
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
|
+
}
|
|
604
709
|
|
|
605
710
|
// src/components/copilot-provider/copilotkit.tsx
|
|
606
711
|
var import_react7 = require("react");
|
|
607
712
|
var import_react_dom = require("react-dom");
|
|
608
|
-
var
|
|
713
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
609
714
|
|
|
610
715
|
// src/context/copilot-messages-context.tsx
|
|
611
716
|
var import_react6 = __toESM(require("react"));
|
|
@@ -647,7 +752,13 @@ function useCopilotChat(_a = {}) {
|
|
|
647
752
|
setCoagentStatesWithRef,
|
|
648
753
|
coAgentStateRenders,
|
|
649
754
|
agentSession,
|
|
650
|
-
setAgentSession
|
|
755
|
+
setAgentSession,
|
|
756
|
+
agentLock,
|
|
757
|
+
threadId,
|
|
758
|
+
setThreadId,
|
|
759
|
+
runId,
|
|
760
|
+
setRunId,
|
|
761
|
+
chatAbortControllerRef
|
|
651
762
|
} = useCopilotContext();
|
|
652
763
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
653
764
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
@@ -660,9 +771,9 @@ function useCopilotChat(_a = {}) {
|
|
|
660
771
|
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
661
772
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
662
773
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
663
|
-
return new
|
|
774
|
+
return new import_runtime_client_gql4.TextMessage({
|
|
664
775
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
665
|
-
role:
|
|
776
|
+
role: import_runtime_client_gql4.Role.System
|
|
666
777
|
});
|
|
667
778
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
668
779
|
const onCoAgentStateRender = useAsyncCallback(
|
|
@@ -697,7 +808,12 @@ function useCopilotChat(_a = {}) {
|
|
|
697
808
|
coagentStatesRef,
|
|
698
809
|
setCoagentStatesWithRef,
|
|
699
810
|
agentSession,
|
|
700
|
-
setAgentSession
|
|
811
|
+
setAgentSession,
|
|
812
|
+
threadId,
|
|
813
|
+
setThreadId,
|
|
814
|
+
runId,
|
|
815
|
+
setRunId,
|
|
816
|
+
chatAbortControllerRef
|
|
701
817
|
}));
|
|
702
818
|
const latestAppend = useUpdatedRef(append);
|
|
703
819
|
const latestAppendFunc = useAsyncCallback(
|
|
@@ -732,12 +848,38 @@ function useCopilotChat(_a = {}) {
|
|
|
732
848
|
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
733
849
|
return yield latestRunChatCompletion.current();
|
|
734
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]);
|
|
735
876
|
return {
|
|
736
877
|
visibleMessages: messages,
|
|
737
878
|
appendMessage: latestAppendFunc,
|
|
738
879
|
setMessages: latestSetMessagesFunc,
|
|
739
880
|
reloadMessages: latestReloadFunc,
|
|
740
881
|
stopGeneration: latestStopFunc,
|
|
882
|
+
reset: latestResetFunc,
|
|
741
883
|
deleteMessage: latestDeleteFunc,
|
|
742
884
|
runChatCompletion: latestRunChatCompletionFunc,
|
|
743
885
|
isLoading
|
|
@@ -775,14 +917,18 @@ ${additionalInstructions}` : "");
|
|
|
775
917
|
}
|
|
776
918
|
|
|
777
919
|
// src/hooks/use-copilot-action.ts
|
|
778
|
-
var
|
|
920
|
+
var import_shared4 = require("@copilotkit/shared");
|
|
779
921
|
var import_react9 = require("react");
|
|
780
922
|
function useCopilotAction(action, dependencies) {
|
|
781
923
|
const { setAction, removeAction, actions, chatComponentsCache } = useCopilotContext();
|
|
782
|
-
const idRef = (0, import_react9.useRef)((0,
|
|
924
|
+
const idRef = (0, import_react9.useRef)((0, import_shared4.randomId)());
|
|
783
925
|
const renderAndWaitRef = (0, import_react9.useRef)(null);
|
|
784
926
|
action = __spreadValues({}, action);
|
|
785
|
-
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
|
+
) {
|
|
786
932
|
const renderAndWait = action.renderAndWait || action.renderAndWaitForResponse;
|
|
787
933
|
action.renderAndWait = void 0;
|
|
788
934
|
action.renderAndWaitForResponse = void 0;
|
|
@@ -820,7 +966,9 @@ function useCopilotAction(action, dependencies) {
|
|
|
820
966
|
}
|
|
821
967
|
if (dependencies === void 0) {
|
|
822
968
|
if (actions[idRef.current]) {
|
|
823
|
-
|
|
969
|
+
if (isFrontendAction(action)) {
|
|
970
|
+
actions[idRef.current].handler = action.handler;
|
|
971
|
+
}
|
|
824
972
|
if (typeof action.render === "function") {
|
|
825
973
|
if (chatComponentsCache.current !== null) {
|
|
826
974
|
chatComponentsCache.current.actions[action.name] = action.render;
|
|
@@ -839,23 +987,26 @@ function useCopilotAction(action, dependencies) {
|
|
|
839
987
|
}, [
|
|
840
988
|
setAction,
|
|
841
989
|
removeAction,
|
|
842
|
-
action.description,
|
|
990
|
+
isFrontendAction(action) ? action.description : void 0,
|
|
843
991
|
action.name,
|
|
844
|
-
action.disabled,
|
|
845
|
-
action.available,
|
|
992
|
+
isFrontendAction(action) ? action.disabled : void 0,
|
|
993
|
+
isFrontendAction(action) ? action.available : void 0,
|
|
846
994
|
// This should be faster than deep equality checking
|
|
847
995
|
// In addition, all major JS engines guarantee the order of object keys
|
|
848
|
-
JSON.stringify(action.parameters),
|
|
996
|
+
JSON.stringify(isFrontendAction(action) ? action.parameters : []),
|
|
849
997
|
// include render only if it's a string
|
|
850
998
|
typeof action.render === "string" ? action.render : void 0,
|
|
851
999
|
// dependencies set by the developer
|
|
852
1000
|
...dependencies || []
|
|
853
1001
|
]);
|
|
854
1002
|
}
|
|
1003
|
+
function isFrontendAction(action) {
|
|
1004
|
+
return action.name !== "*";
|
|
1005
|
+
}
|
|
855
1006
|
|
|
856
1007
|
// src/hooks/use-coagent-state-render.ts
|
|
857
1008
|
var import_react10 = require("react");
|
|
858
|
-
var
|
|
1009
|
+
var import_shared5 = require("@copilotkit/shared");
|
|
859
1010
|
function useCoAgentStateRender(action, dependencies) {
|
|
860
1011
|
const {
|
|
861
1012
|
setCoAgentStateRender,
|
|
@@ -863,7 +1014,7 @@ function useCoAgentStateRender(action, dependencies) {
|
|
|
863
1014
|
coAgentStateRenders,
|
|
864
1015
|
chatComponentsCache
|
|
865
1016
|
} = (0, import_react10.useContext)(CopilotContext);
|
|
866
|
-
const idRef = (0, import_react10.useRef)((0,
|
|
1017
|
+
const idRef = (0, import_react10.useRef)((0, import_shared5.randomId)());
|
|
867
1018
|
const key = `${action.name}-${action.nodeName || "global"}`;
|
|
868
1019
|
if (dependencies === void 0) {
|
|
869
1020
|
if (coAgentStateRenders[idRef.current]) {
|
|
@@ -976,7 +1127,11 @@ function useCoAgent(options) {
|
|
|
976
1127
|
} else if (coagentStates[name] === void 0) {
|
|
977
1128
|
setState(options.initialState === void 0 ? {} : options.initialState);
|
|
978
1129
|
}
|
|
979
|
-
}, [
|
|
1130
|
+
}, [
|
|
1131
|
+
isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0,
|
|
1132
|
+
// reset initialstate on reset
|
|
1133
|
+
coagentStates[name] === void 0
|
|
1134
|
+
]);
|
|
980
1135
|
const runAgentCallback = useAsyncCallback(
|
|
981
1136
|
(hint) => __async(this, null, function* () {
|
|
982
1137
|
yield runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
@@ -1005,6 +1160,17 @@ function stopAgent(name, context) {
|
|
|
1005
1160
|
const { agentSession, setAgentSession } = context;
|
|
1006
1161
|
if (agentSession && agentSession.agentName === name) {
|
|
1007
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
|
+
});
|
|
1008
1174
|
} else {
|
|
1009
1175
|
console.warn(`No agent session found for ${name}`);
|
|
1010
1176
|
}
|
|
@@ -1040,6 +1206,9 @@ function runAgent(name, context, appendMessage, runChatCompletion, hint) {
|
|
|
1040
1206
|
}
|
|
1041
1207
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1042
1208
|
0 && (module.exports = {
|
|
1209
|
+
runAgent,
|
|
1210
|
+
startAgent,
|
|
1211
|
+
stopAgent,
|
|
1043
1212
|
useCoAgent,
|
|
1044
1213
|
useCoAgentStateRender,
|
|
1045
1214
|
useCopilotAction,
|