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