@economic/agents-react 1.3.1 → 1.3.4
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/README.md +2 -0
- package/dist/index.d.mts +27 -23
- package/dist/index.mjs +48 -17
- package/dist/v1.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -196,3 +196,5 @@ The package also exports the handler types `AssistantActions`, `GetChatsHandler`
|
|
|
196
196
|
## Authentication
|
|
197
197
|
|
|
198
198
|
Pass a JWT as `authToken`. It is sent both as an `Authorization: Bearer …` header and as a WebSocket subprotocol (`["bearer", token]`), matching the server-side [`getJwtAuthConfig`](../agents/README.md#authentication). When verification fails, the connection status becomes `"unauthorized"`.
|
|
199
|
+
|
|
200
|
+
.
|
package/dist/index.d.mts
CHANGED
|
@@ -205,11 +205,6 @@ declare class PartySocket extends ReconnectingWebSocket {
|
|
|
205
205
|
//#region src/types.d.ts
|
|
206
206
|
type AgentConnectionStatus = "connecting" | "connected" | "disconnected" | "unauthorized";
|
|
207
207
|
type AgentConnectionType = "agent" | "chat" | "assistant";
|
|
208
|
-
type AgentConnectionState = {
|
|
209
|
-
status: AgentConnectionStatus;
|
|
210
|
-
type: AgentConnectionType;
|
|
211
|
-
subAgentName?: string;
|
|
212
|
-
};
|
|
213
208
|
type ChatSummary = {
|
|
214
209
|
name: string;
|
|
215
210
|
title?: string;
|
|
@@ -231,6 +226,7 @@ type CreateChatHandler = () => Promise<string>;
|
|
|
231
226
|
type OpenChatHandler = (chatId: string) => void;
|
|
232
227
|
type DeleteChatHandler = (chatId: string) => Promise<void>;
|
|
233
228
|
interface AssistantActions {
|
|
229
|
+
state: unknown;
|
|
234
230
|
getChats: GetChatsHandler;
|
|
235
231
|
createChat: CreateChatHandler;
|
|
236
232
|
openChat: OpenChatHandler;
|
|
@@ -252,21 +248,26 @@ interface UseAgentOptions {
|
|
|
252
248
|
onOpen?: (event: Event) => void;
|
|
253
249
|
onClose?: (event: CloseEvent) => void;
|
|
254
250
|
onError?: (event: ErrorEvent) => void;
|
|
251
|
+
onMessage?: (event: MessageEvent) => void;
|
|
255
252
|
}
|
|
256
|
-
declare function useAgent(options: UseAgentOptions):
|
|
257
|
-
agent:
|
|
258
|
-
name: string;
|
|
259
|
-
path: ReadonlyArray<{
|
|
253
|
+
declare function useAgent(options: UseAgentOptions): {
|
|
254
|
+
agent: Omit<PartySocket, "path"> & {
|
|
260
255
|
agent: string;
|
|
261
256
|
name: string;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
257
|
+
path: ReadonlyArray<{
|
|
258
|
+
agent: string;
|
|
259
|
+
name: string;
|
|
260
|
+
}>;
|
|
261
|
+
identified: boolean;
|
|
262
|
+
ready: Promise<void>;
|
|
263
|
+
state: unknown;
|
|
264
|
+
setState: (state: unknown) => void;
|
|
265
|
+
call: <T = unknown>(method: string, args?: unknown[], options?: import("agents/client").CallOptions | import("agents/client").StreamOptions) => Promise<T>;
|
|
266
|
+
stub: import("agents/client").UntypedAgentStub;
|
|
267
|
+
getHttpUrl: () => string;
|
|
268
|
+
};
|
|
269
|
+
status: AgentConnectionStatus;
|
|
270
|
+
type: AgentConnectionType | undefined;
|
|
270
271
|
};
|
|
271
272
|
//#endregion
|
|
272
273
|
//#region src/useChat.d.ts
|
|
@@ -286,8 +287,8 @@ declare function useChat<ToolContext extends Record<string, unknown>>(options: U
|
|
|
286
287
|
}>;
|
|
287
288
|
identified: boolean;
|
|
288
289
|
ready: Promise<void>;
|
|
289
|
-
state:
|
|
290
|
-
setState: (state:
|
|
290
|
+
state: unknown;
|
|
291
|
+
setState: (state: unknown) => void;
|
|
291
292
|
call: <T = unknown>(method: string, args?: unknown[], options?: import("agents/client").CallOptions | import("agents/client").StreamOptions) => Promise<T>;
|
|
292
293
|
stub: import("agents/client").UntypedAgentStub;
|
|
293
294
|
getHttpUrl: () => string;
|
|
@@ -311,12 +312,15 @@ declare function useChat<ToolContext extends Record<string, unknown>>(options: U
|
|
|
311
312
|
};
|
|
312
313
|
//#endregion
|
|
313
314
|
//#region src/useAssistant.d.ts
|
|
314
|
-
interface UseAssistantOptions<ToolContext extends Record<string, unknown> = Record<string, unknown>> extends Omit<UseChatOptions<ToolContext>, "actorId" | "getInitialMessages"> {
|
|
315
|
+
interface UseAssistantOptions<ToolContext extends Record<string, unknown> = Record<string, unknown>> extends Omit<UseChatOptions<ToolContext>, "actorId" | "getInitialMessages"> {
|
|
316
|
+
initialChatId?: string;
|
|
317
|
+
}
|
|
315
318
|
declare function useAssistant<ToolContext extends Record<string, unknown>>(options: UseAssistantOptions<ToolContext>): {
|
|
316
319
|
currentChatName: string | undefined;
|
|
317
320
|
chats: ChatSummary[];
|
|
318
321
|
status: AgentConnectionStatus;
|
|
319
322
|
assistant: {
|
|
323
|
+
state: unknown;
|
|
320
324
|
getChats: () => Promise<ChatSummary[]>;
|
|
321
325
|
createChat: () => Promise<string>;
|
|
322
326
|
openChat: (chatId: string) => void;
|
|
@@ -333,8 +337,8 @@ declare function useAssistant<ToolContext extends Record<string, unknown>>(optio
|
|
|
333
337
|
}>;
|
|
334
338
|
identified: boolean;
|
|
335
339
|
ready: Promise<void>;
|
|
336
|
-
state:
|
|
337
|
-
setState: (state:
|
|
340
|
+
state: unknown;
|
|
341
|
+
setState: (state: unknown) => void;
|
|
338
342
|
call: <T = unknown>(method: string, args?: unknown[], options?: import("agents/client").CallOptions | import("agents/client").StreamOptions) => Promise<T>;
|
|
339
343
|
stub: import("agents/client").UntypedAgentStub;
|
|
340
344
|
getHttpUrl: () => string;
|
|
@@ -358,4 +362,4 @@ declare function useAssistant<ToolContext extends Record<string, unknown>>(optio
|
|
|
358
362
|
};
|
|
359
363
|
};
|
|
360
364
|
//#endregion
|
|
361
|
-
export { type
|
|
365
|
+
export { type AgentConnectionStatus, type AgentConnectionType, type AssistantActions, type ChatSummary, type CreateChatHandler, type DeleteChatHandler, type GetChatsHandler, type GetMessageFeedbackHandler, type MessageFeedback, type MessageFeedbackHandler, type OpenChatHandler, useAgent, useAssistant, useChat };
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useAgent as useAgent$1 } from "agents/react";
|
|
2
1
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
import { useAgent as useAgent$1 } from "agents/react";
|
|
3
3
|
import { useAgentChat } from "@cloudflare/ai-chat/react";
|
|
4
4
|
//#region src/util.ts
|
|
5
5
|
function getTokenArgs(authToken) {
|
|
@@ -12,28 +12,51 @@ function getTokenArgs(authToken) {
|
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region src/useAgent.ts
|
|
14
14
|
function useAgent(options) {
|
|
15
|
-
const { enabled, host, agentName, actorId, name, sub, authToken, onError, onOpen, onClose } = options;
|
|
16
|
-
|
|
15
|
+
const { enabled, host, agentName, actorId, name, sub, authToken, onError, onOpen, onClose, onMessage } = options;
|
|
16
|
+
const [type, setType] = useState(void 0);
|
|
17
|
+
const [status, setStatus] = useState("connecting");
|
|
18
|
+
const agent = useAgent$1({
|
|
17
19
|
enabled,
|
|
18
20
|
host,
|
|
19
21
|
agent: agentName,
|
|
20
22
|
name: actorId ? `${actorId}:${name}` : name,
|
|
21
23
|
sub,
|
|
22
|
-
onOpen
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
onOpen: (event) => {
|
|
25
|
+
onOpen?.(event);
|
|
26
|
+
},
|
|
27
|
+
onClose: (event) => {
|
|
28
|
+
if (event.code >= 3e3) setStatus("unauthorized");
|
|
29
|
+
else setStatus("disconnected");
|
|
30
|
+
onClose?.(event);
|
|
31
|
+
},
|
|
32
|
+
onMessage: (event) => {
|
|
33
|
+
const msg = JSON.parse(event.data);
|
|
34
|
+
if (msg.type === "connection_status") {
|
|
35
|
+
if (msg.status === "unauthorized") agent.close(3e3);
|
|
36
|
+
setStatus(msg.status);
|
|
37
|
+
} else if (msg.type === "agent_type") setType(msg.agentType);
|
|
38
|
+
onMessage?.(event);
|
|
39
|
+
},
|
|
40
|
+
onError: (event) => {
|
|
41
|
+
setStatus("disconnected");
|
|
42
|
+
onError?.(event);
|
|
43
|
+
},
|
|
25
44
|
...getTokenArgs(authToken)
|
|
26
45
|
});
|
|
46
|
+
return {
|
|
47
|
+
agent,
|
|
48
|
+
status,
|
|
49
|
+
type
|
|
50
|
+
};
|
|
27
51
|
}
|
|
28
52
|
//#endregion
|
|
29
53
|
//#region src/useChat.ts
|
|
30
54
|
function useChat(options) {
|
|
31
55
|
const { toolContext, welcomeMessage, ...agentOptions } = options;
|
|
32
|
-
const agent = useAgent({
|
|
56
|
+
const { agent, status } = useAgent({
|
|
33
57
|
...agentOptions,
|
|
34
58
|
enabled: agentOptions.enabled ?? !!agentOptions.name
|
|
35
59
|
});
|
|
36
|
-
const status = agent.state?.status ?? "connecting";
|
|
37
60
|
const chat = useAgentChat({
|
|
38
61
|
agent,
|
|
39
62
|
body: toolContext ?? {},
|
|
@@ -78,10 +101,17 @@ function useChat(options) {
|
|
|
78
101
|
//#endregion
|
|
79
102
|
//#region src/useAssistant.ts
|
|
80
103
|
function useAssistant(options) {
|
|
81
|
-
const { toolContext, welcomeMessage, ...agentOptions } = options;
|
|
82
|
-
const [chatId, setChatId] = useState();
|
|
104
|
+
const { toolContext, welcomeMessage, initialChatId, ...agentOptions } = options;
|
|
105
|
+
const [chatId, setChatId] = useState(initialChatId);
|
|
83
106
|
const [chats, setChats] = useState([]);
|
|
84
|
-
const
|
|
107
|
+
const [subAgentName, setSubAgentName] = useState(void 0);
|
|
108
|
+
const { agent: assistant, status: assistantStatus } = useAgent({
|
|
109
|
+
...agentOptions,
|
|
110
|
+
onMessage: (event) => {
|
|
111
|
+
const msg = JSON.parse(event.data);
|
|
112
|
+
if (msg.type === "sub_agent_name") setSubAgentName(msg.subAgentName);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
85
115
|
const refreshChats = useCallback(async () => {
|
|
86
116
|
setChats((await assistant.call("getChats")).map((chat) => {
|
|
87
117
|
const c = {
|
|
@@ -92,7 +122,6 @@ function useAssistant(options) {
|
|
|
92
122
|
return c;
|
|
93
123
|
}));
|
|
94
124
|
}, [assistant]);
|
|
95
|
-
const assistantStatus = assistant.state?.status;
|
|
96
125
|
useEffect(() => {
|
|
97
126
|
if (assistantStatus === "connected") refreshChats().catch(console.error);
|
|
98
127
|
}, [assistantStatus, refreshChats]);
|
|
@@ -114,12 +143,13 @@ function useAssistant(options) {
|
|
|
114
143
|
setChatId(void 0);
|
|
115
144
|
await refreshChats();
|
|
116
145
|
};
|
|
117
|
-
const
|
|
146
|
+
const isChatEnabled = !!chatId && !!subAgentName;
|
|
147
|
+
const isChatReady = isChatEnabled && assistantStatus === "connected";
|
|
118
148
|
const chat = useChat({
|
|
119
149
|
...agentOptions,
|
|
120
|
-
enabled:
|
|
121
|
-
sub:
|
|
122
|
-
agent:
|
|
150
|
+
enabled: isChatEnabled,
|
|
151
|
+
sub: isChatEnabled ? [{
|
|
152
|
+
agent: subAgentName,
|
|
123
153
|
name: chatId
|
|
124
154
|
}] : void 0,
|
|
125
155
|
getInitialMessages: isChatReady ? void 0 : null,
|
|
@@ -129,8 +159,9 @@ function useAssistant(options) {
|
|
|
129
159
|
return {
|
|
130
160
|
currentChatName: chatId,
|
|
131
161
|
chats,
|
|
132
|
-
status:
|
|
162
|
+
status: isChatEnabled && chat.status !== "connecting" ? chat.status : assistantStatus,
|
|
133
163
|
assistant: {
|
|
164
|
+
state: assistant.state,
|
|
134
165
|
getChats,
|
|
135
166
|
createChat,
|
|
136
167
|
openChat,
|
package/dist/v1.mjs
CHANGED