@agentuity/react 0.0.35 → 0.0.37
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/dist/run.d.ts +2 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/websocket.d.ts +2 -0
- package/dist/websocket.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/run.ts +30 -7
- package/src/websocket.ts +21 -5
package/dist/run.d.ts
CHANGED
|
@@ -24,7 +24,9 @@ interface RunArgs {
|
|
|
24
24
|
}
|
|
25
25
|
interface UseAgentResponse<TInput, TOutput> {
|
|
26
26
|
data?: TOutput;
|
|
27
|
+
error: Error | null;
|
|
27
28
|
run: (input: TInput, options?: RunArgs) => Promise<TOutput>;
|
|
29
|
+
reset: () => void;
|
|
28
30
|
running: boolean;
|
|
29
31
|
}
|
|
30
32
|
export declare const useAgent: <TName extends AgentName, TInput = TName extends keyof AgentRegistry ? InferInput<AgentRegistry[TName]["inputSchema"]> : never, TOutput = TName extends keyof AgentRegistry ? InferOutput<AgentRegistry[TName]["outputSchema"]> : never>(name: TName) => UseAgentResponse<TInput, TOutput>;
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD,UAAU,OAAO;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,UAAU,gBAAgB,CAAC,MAAM,EAAE,OAAO;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,QAAQ,GACpB,KAAK,SAAS,SAAS,EACvB,MAAM,GAAG,KAAK,SAAS,MAAM,aAAa,GACvC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,GAC/C,KAAK,EACR,OAAO,GAAG,KAAK,SAAS,MAAM,aAAa,GACxC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,GACjD,KAAK,EAER,MAAM,KAAK,KACT,gBAAgB,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD,UAAU,OAAO;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,UAAU,gBAAgB,CAAC,MAAM,EAAE,OAAO;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,QAAQ,GACpB,KAAK,SAAS,SAAS,EACvB,MAAM,GAAG,KAAK,SAAS,MAAM,aAAa,GACvC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,GAC/C,KAAK,EACR,OAAO,GAAG,KAAK,SAAS,MAAM,aAAa,GACxC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,GACjD,KAAK,EAER,MAAM,KAAK,KACT,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAuElC,CAAC"}
|
package/dist/websocket.d.ts
CHANGED
|
@@ -18,10 +18,12 @@ interface WebsocketArgs {
|
|
|
18
18
|
interface WebsocketResponse<TInput, TOutput> {
|
|
19
19
|
connected: boolean;
|
|
20
20
|
data?: TOutput;
|
|
21
|
+
error: Error | null;
|
|
21
22
|
send: (data: TInput) => void;
|
|
22
23
|
setHandler: (handler: onMessageHandler<TOutput>) => void;
|
|
23
24
|
readyState: WebSocket['readyState'];
|
|
24
25
|
close: () => void;
|
|
26
|
+
reset: () => void;
|
|
25
27
|
}
|
|
26
28
|
export declare const useWebsocket: <TInput, TOutput>(path: string, options?: WebsocketArgs) => WebsocketResponse<TInput, TOutput>;
|
|
27
29
|
interface UseAgentWebsocketResponse<TInput, TOutput> extends Omit<WebsocketResponse<TInput, TOutput>, 'setHandler'> {
|
package/dist/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD,KAAK,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEvD,UAAU,aAAa;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AA8BD,UAAU,iBAAiB,CAAC,MAAM,EAAE,OAAO;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,EAAE,OAAO,EAC3C,MAAM,MAAM,EACZ,UAAU,aAAa,KACrB,iBAAiB,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD,KAAK,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEvD,UAAU,aAAa;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AA8BD,UAAU,iBAAiB,CAAC,MAAM,EAAE,OAAO;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,EAAE,OAAO,EAC3C,MAAM,MAAM,EACZ,UAAU,aAAa,KACrB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAkHnC,CAAC;AAEF,UAAU,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAClD,SAAQ,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC;IAC9D;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,GAC7B,KAAK,SAAS,SAAS,EACvB,MAAM,GAAG,KAAK,SAAS,MAAM,aAAa,GACvC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,GAC/C,KAAK,EACR,OAAO,GAAG,KAAK,SAAS,MAAM,aAAa,GACxC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,GACjD,KAAK,EAER,OAAO,SAAS,EAChB,UAAU,aAAa,KACrB,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAoB3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"prepublishOnly": "bun run clean && bun run build"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@agentuity/core": "0.0.
|
|
26
|
+
"@agentuity/core": "0.0.35"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"typescript": "^5.9.0"
|
package/src/run.ts
CHANGED
|
@@ -29,7 +29,9 @@ interface RunArgs {
|
|
|
29
29
|
|
|
30
30
|
interface UseAgentResponse<TInput, TOutput> {
|
|
31
31
|
data?: TOutput;
|
|
32
|
+
error: Error | null;
|
|
32
33
|
run: (input: TInput, options?: RunArgs) => Promise<TOutput>;
|
|
34
|
+
reset: () => void;
|
|
33
35
|
running: boolean;
|
|
34
36
|
}
|
|
35
37
|
|
|
@@ -46,14 +48,19 @@ export const useAgent = <
|
|
|
46
48
|
): UseAgentResponse<TInput, TOutput> => {
|
|
47
49
|
const context = useContext(AgentuityContext);
|
|
48
50
|
const [data, setData] = useState<TOutput>();
|
|
51
|
+
const [error, setError] = useState<Error | null>(null);
|
|
49
52
|
const [running, setRunning] = useState(false);
|
|
50
53
|
|
|
51
54
|
if (!context) {
|
|
52
55
|
throw new Error('useAgent must be used within a AgentuityProvider');
|
|
53
56
|
}
|
|
54
57
|
|
|
58
|
+
// Reset error (for now)
|
|
59
|
+
const reset = () => setError(null);
|
|
60
|
+
|
|
55
61
|
const run = async (input: TInput, options?: RunArgs): Promise<TOutput> => {
|
|
56
62
|
setRunning(true);
|
|
63
|
+
setError(null);
|
|
57
64
|
try {
|
|
58
65
|
const url = buildUrl(context.baseUrl!, `/agent/${name}`, options?.subpath, options?.query);
|
|
59
66
|
const signal = options?.signal ?? new AbortController().signal;
|
|
@@ -61,17 +68,23 @@ export const useAgent = <
|
|
|
61
68
|
method: options?.method ?? 'POST',
|
|
62
69
|
headers: {
|
|
63
70
|
'Content-Type': 'application/json',
|
|
64
|
-
...(options?.headers ??
|
|
71
|
+
...(options?.headers ?? {}),
|
|
65
72
|
},
|
|
66
73
|
signal,
|
|
67
74
|
body:
|
|
68
|
-
input && typeof input === 'object' && options?.method !== 'GET'
|
|
75
|
+
input && typeof input === 'object' && (options?.method ?? 'POST') !== 'GET'
|
|
69
76
|
? JSON.stringify(input)
|
|
70
77
|
: undefined,
|
|
71
78
|
});
|
|
79
|
+
|
|
72
80
|
if (!response.ok) {
|
|
73
|
-
|
|
81
|
+
const err = new Error(
|
|
82
|
+
`Error invoking agent ${name}: ${response.status} ${response.statusText}`
|
|
83
|
+
);
|
|
84
|
+
setError(err);
|
|
85
|
+
throw err;
|
|
74
86
|
}
|
|
87
|
+
|
|
75
88
|
// TODO: handle streams
|
|
76
89
|
const ct = response.headers.get('Content-Type') || '';
|
|
77
90
|
if (ct.includes('text/')) {
|
|
@@ -81,16 +94,26 @@ export const useAgent = <
|
|
|
81
94
|
return _data;
|
|
82
95
|
}
|
|
83
96
|
if (ct.includes('/json')) {
|
|
84
|
-
const
|
|
85
|
-
const _data =
|
|
97
|
+
const json = await response.json();
|
|
98
|
+
const _data = json as TOutput;
|
|
86
99
|
setData(_data);
|
|
87
100
|
return _data;
|
|
88
101
|
}
|
|
89
|
-
|
|
102
|
+
|
|
103
|
+
const err = new Error(`Unsupported content type: ${ct}`);
|
|
104
|
+
setError(err);
|
|
105
|
+
throw err;
|
|
106
|
+
} catch (e) {
|
|
107
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
108
|
+
throw e;
|
|
109
|
+
}
|
|
110
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
111
|
+
setError(err);
|
|
112
|
+
throw err;
|
|
90
113
|
} finally {
|
|
91
114
|
setRunning(false);
|
|
92
115
|
}
|
|
93
116
|
};
|
|
94
117
|
|
|
95
|
-
return { data, run, running };
|
|
118
|
+
return { data, error, run, reset, running };
|
|
96
119
|
};
|
package/src/websocket.ts
CHANGED
|
@@ -52,10 +52,12 @@ const deserializeData = <T>(data: string): T => {
|
|
|
52
52
|
interface WebsocketResponse<TInput, TOutput> {
|
|
53
53
|
connected: boolean;
|
|
54
54
|
data?: TOutput;
|
|
55
|
+
error: Error | null;
|
|
55
56
|
send: (data: TInput) => void;
|
|
56
57
|
setHandler: (handler: onMessageHandler<TOutput>) => void;
|
|
57
58
|
readyState: WebSocket['readyState'];
|
|
58
59
|
close: () => void;
|
|
60
|
+
reset: () => void;
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
export const useWebsocket = <TInput, TOutput>(
|
|
@@ -73,6 +75,7 @@ export const useWebsocket = <TInput, TOutput>(
|
|
|
73
75
|
const pending = useRef<TOutput[]>([]);
|
|
74
76
|
const queued = useRef<TInput[]>([]);
|
|
75
77
|
const [data, setData] = useState<TOutput>();
|
|
78
|
+
const [error, setError] = useState<Error | null>(null);
|
|
76
79
|
const handler = useRef<onMessageHandler<TOutput> | undefined>(undefined);
|
|
77
80
|
const [connected, setConnected] = useState(false);
|
|
78
81
|
|
|
@@ -90,6 +93,8 @@ export const useWebsocket = <TInput, TOutput>(
|
|
|
90
93
|
}
|
|
91
94
|
}, []);
|
|
92
95
|
|
|
96
|
+
const reset = () => setError(null);
|
|
97
|
+
|
|
93
98
|
if (!wsRef.current) {
|
|
94
99
|
const wsUrl = buildUrl(
|
|
95
100
|
context.baseUrl!.replace(/^https?:/, 'ws:'),
|
|
@@ -101,18 +106,25 @@ export const useWebsocket = <TInput, TOutput>(
|
|
|
101
106
|
wsRef.current = new WebSocket(wsUrl);
|
|
102
107
|
wsRef.current.onopen = () => {
|
|
103
108
|
setConnected(true);
|
|
109
|
+
setError(null);
|
|
104
110
|
if (queued.current.length > 0) {
|
|
105
111
|
queued.current.forEach((msg: unknown) => wsRef.current!.send(serializeWSData(msg)));
|
|
106
112
|
queued.current = [];
|
|
107
113
|
}
|
|
108
114
|
};
|
|
109
|
-
wsRef.current.
|
|
115
|
+
wsRef.current.onerror = () => {
|
|
116
|
+
setError(new Error('WebSocket error'));
|
|
117
|
+
};
|
|
118
|
+
wsRef.current.onclose = (evt) => {
|
|
110
119
|
wsRef.current = undefined;
|
|
111
120
|
queued.current = [];
|
|
112
121
|
setConnected(false);
|
|
113
122
|
if (manualClose.current) {
|
|
114
123
|
return;
|
|
115
124
|
}
|
|
125
|
+
if (evt.code !== 1000) {
|
|
126
|
+
setError(new Error(`WebSocket closed: ${evt.code} ${evt.reason || ''}`));
|
|
127
|
+
}
|
|
116
128
|
setTimeout(
|
|
117
129
|
() => {
|
|
118
130
|
connect();
|
|
@@ -159,8 +171,10 @@ export const useWebsocket = <TInput, TOutput>(
|
|
|
159
171
|
connected,
|
|
160
172
|
close,
|
|
161
173
|
data,
|
|
174
|
+
error,
|
|
162
175
|
send,
|
|
163
176
|
setHandler,
|
|
177
|
+
reset,
|
|
164
178
|
readyState: wsRef.current?.readyState ?? WebSocket.CLOSED,
|
|
165
179
|
};
|
|
166
180
|
};
|
|
@@ -186,10 +200,10 @@ export const useAgentWebsocket = <
|
|
|
186
200
|
options?: WebsocketArgs
|
|
187
201
|
): UseAgentWebsocketResponse<TInput, TOutput> => {
|
|
188
202
|
const [data, setData] = useState<TOutput>();
|
|
189
|
-
const { connected, close, send, setHandler, readyState } = useWebsocket<
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
);
|
|
203
|
+
const { connected, close, send, setHandler, readyState, error, reset } = useWebsocket<
|
|
204
|
+
TInput,
|
|
205
|
+
TOutput
|
|
206
|
+
>(`/agent/${agent}`, options);
|
|
193
207
|
|
|
194
208
|
useEffect(() => {
|
|
195
209
|
setHandler(setData);
|
|
@@ -199,6 +213,8 @@ export const useAgentWebsocket = <
|
|
|
199
213
|
connected,
|
|
200
214
|
close,
|
|
201
215
|
data,
|
|
216
|
+
error,
|
|
217
|
+
reset,
|
|
202
218
|
send,
|
|
203
219
|
readyState,
|
|
204
220
|
};
|