@agentuity/react 0.0.33 → 0.0.36

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 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,CAkDlC,CAAC"}
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"}
@@ -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'> {
@@ -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,CAsGnC,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,CAkB3C,CAAC"}
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.33",
3
+ "version": "0.0.36",
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.31"
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
- throw new Error(`Error invoking agent ${name}: ${response.statusText}`);
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 data = await response.json();
85
- const _data = data as TOutput;
97
+ const json = await response.json();
98
+ const _data = json as TOutput;
86
99
  setData(_data);
87
100
  return _data;
88
101
  }
89
- throw new Error(`Unsupported content type: ${ct}`);
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.onclose = () => {
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<TInput, TOutput>(
190
- `/agent/${agent}`,
191
- options
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
  };