@steventsao/agent-session 0.1.22 → 0.1.24

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.
@@ -1,229 +0,0 @@
1
- /**
2
- * React Hook for agent-session
3
- */
4
- import { useEffect, useState, useCallback, useRef } from 'react';
5
- import { AgentSessionClient } from './client';
6
- import { DEFAULT_SESSION_REFRESH_CONFIG, shouldResetOnSessionChange, } from '@steventsao/agent-session-core';
7
- export function useAgentSession(options) {
8
- const { url, sessionId, userId, autoConnect = true, refreshConfig = DEFAULT_SESSION_REFRESH_CONFIG, onLifecycle, onAgentMessage, onError, } = options;
9
- const clientRef = useRef(null);
10
- const unsubscribersRef = useRef([]);
11
- const prevSessionIdRef = useRef(null);
12
- // Store callbacks in refs to avoid dependency issues (Redux best practice)
13
- const onLifecycleRef = useRef(onLifecycle);
14
- const onAgentMessageRef = useRef(onAgentMessage);
15
- const onErrorRef = useRef(onError);
16
- // Update refs on each render
17
- onLifecycleRef.current = onLifecycle;
18
- onAgentMessageRef.current = onAgentMessage;
19
- onErrorRef.current = onError;
20
- // Connection state
21
- const [isConnected, setIsConnected] = useState(false);
22
- const [clientId, setClientId] = useState(null);
23
- const [connectedSessionId, setConnectedSessionId] = useState(null);
24
- // Sandbox state
25
- const [sandboxStatus, setSandboxStatus] = useState('idle');
26
- const [sandboxId, setSandboxId] = useState(null);
27
- const [sandboxUrl, setSandboxUrl] = useState(null);
28
- const [lifecycle, setLifecycle] = useState('idle');
29
- const [lifecycleMessage, setLifecycleMessage] = useState(null);
30
- // Agent state
31
- const [agentStatus, setAgentStatus] = useState('idle');
32
- const [agentSessionId, setAgentSessionId] = useState(null);
33
- const [messages, setMessages] = useState([]);
34
- // Error state
35
- const [error, setError] = useState(null);
36
- // Reset state when sessionId changes (based on refreshConfig)
37
- useEffect(() => {
38
- if (shouldResetOnSessionChange(refreshConfig, prevSessionIdRef.current, sessionId || null)) {
39
- console.log(`[useAgentSession] Session changed: ${prevSessionIdRef.current} -> ${sessionId}, resetting state`);
40
- // Reset sandbox state
41
- setSandboxId(null);
42
- setSandboxUrl(null);
43
- setSandboxStatus('idle');
44
- setLifecycle('idle');
45
- setLifecycleMessage(null);
46
- // Reset agent state based on config
47
- if (refreshConfig.clearMessagesOnReset !== false) {
48
- setMessages([]);
49
- }
50
- if (refreshConfig.clearAgentSessionOnReset !== false) {
51
- setAgentSessionId(null);
52
- }
53
- setAgentStatus('idle');
54
- setError(null);
55
- }
56
- prevSessionIdRef.current = sessionId || null;
57
- }, [sessionId, refreshConfig]);
58
- // Initialize client when sessionId is available
59
- // CRITICAL: Only depend on stable values (url, sessionId, userId, autoConnect)
60
- // Callbacks are accessed via refs to prevent reconnection loops
61
- useEffect(() => {
62
- if (!sessionId)
63
- return;
64
- // Already connected to same session - don't recreate
65
- if (clientRef.current &&
66
- clientRef.current.isConnected &&
67
- connectedSessionId === sessionId) {
68
- return;
69
- }
70
- // Cleanup previous client
71
- unsubscribersRef.current.forEach((unsub) => unsub());
72
- unsubscribersRef.current = [];
73
- clientRef.current?.disconnect();
74
- const client = new AgentSessionClient({
75
- url,
76
- sessionId,
77
- userId,
78
- autoConnect: false,
79
- });
80
- clientRef.current = client;
81
- // Set up event handlers (use refs for callbacks)
82
- unsubscribersRef.current.push(client.on('CONNECTED', (event) => {
83
- setIsConnected(true);
84
- setClientId(event.clientId);
85
- setConnectedSessionId(event.sessionId);
86
- setError(null);
87
- }));
88
- unsubscribersRef.current.push(client.on('READY', (event) => {
89
- setSandboxId(event.sandboxId);
90
- setSandboxUrl(event.sandboxUrl);
91
- }));
92
- unsubscribersRef.current.push(client.on('SANDBOX_STATUS', (event) => {
93
- setSandboxStatus(event.status);
94
- if (event.sandboxId)
95
- setSandboxId(event.sandboxId);
96
- if (event.sandboxUrl)
97
- setSandboxUrl(event.sandboxUrl);
98
- if (event.error)
99
- setError(event.error);
100
- }));
101
- unsubscribersRef.current.push(client.on('LIFECYCLE', (event) => {
102
- setLifecycle(event.phase);
103
- setLifecycleMessage(event.message || null);
104
- onLifecycleRef.current?.(event.phase, event.message);
105
- }));
106
- unsubscribersRef.current.push(client.on('AGENT_STARTED', () => {
107
- setAgentStatus('streaming');
108
- const id = `msg-${Date.now()}`;
109
- setMessages((prev) => [
110
- ...prev,
111
- { id, role: 'assistant', content: '', timestamp: Date.now() },
112
- ]);
113
- }));
114
- unsubscribersRef.current.push(client.on('AGENT_MESSAGE', (event) => {
115
- onAgentMessageRef.current?.(event);
116
- if (event.message?.content) {
117
- setMessages((prev) => {
118
- const lastIdx = prev.length - 1;
119
- if (lastIdx >= 0 && prev[lastIdx].role === 'assistant') {
120
- const updated = [...prev];
121
- updated[lastIdx] = {
122
- ...updated[lastIdx],
123
- content: event.message.content,
124
- };
125
- return updated;
126
- }
127
- return prev;
128
- });
129
- }
130
- }));
131
- unsubscribersRef.current.push(client.on('AGENT_DONE', (event) => {
132
- setAgentStatus('idle');
133
- if (event.sessionId)
134
- setAgentSessionId(event.sessionId);
135
- }));
136
- unsubscribersRef.current.push(client.on('AGENT_ERROR', (event) => {
137
- setAgentStatus('error');
138
- setError(event.error);
139
- onErrorRef.current?.(event.error);
140
- }));
141
- unsubscribersRef.current.push(client.on('ERROR', (event) => {
142
- setError(event.msg);
143
- onErrorRef.current?.(event.msg);
144
- }));
145
- unsubscribersRef.current.push(client.on('SYSTEM', (event) => {
146
- if (event.msg === 'Disconnected') {
147
- setIsConnected(false);
148
- }
149
- }));
150
- // Auto-connect
151
- if (autoConnect) {
152
- client.connect();
153
- }
154
- return () => {
155
- unsubscribersRef.current.forEach((unsub) => unsub());
156
- unsubscribersRef.current = [];
157
- client.disconnect();
158
- };
159
- // eslint-disable-next-line react-hooks/exhaustive-deps
160
- }, [url, sessionId, userId, autoConnect]); // INTENTIONALLY omit callbacks - accessed via refs
161
- // Actions
162
- const connect = useCallback((sid, uid) => {
163
- if (clientRef.current) {
164
- clientRef.current.disconnect();
165
- }
166
- const client = new AgentSessionClient({
167
- url,
168
- sessionId: sid,
169
- userId: uid,
170
- autoConnect: true,
171
- });
172
- clientRef.current = client;
173
- }, [url]);
174
- const disconnect = useCallback(() => {
175
- clientRef.current?.disconnect();
176
- setIsConnected(false);
177
- setClientId(null);
178
- setConnectedSessionId(null);
179
- }, []);
180
- const startSandbox = useCallback((template) => {
181
- clientRef.current?.startSandbox(template);
182
- }, []);
183
- const stopSandbox = useCallback(() => {
184
- clientRef.current?.stopSandbox();
185
- }, []);
186
- const exec = useCallback((cmd, cwd) => {
187
- clientRef.current?.exec(cmd, cwd);
188
- }, []);
189
- const sendMessage = useCallback((content, model, opts) => {
190
- const id = `msg-${Date.now()}`;
191
- setMessages((prev) => [...prev, { id, role: 'user', content, timestamp: Date.now() }]);
192
- setError(null);
193
- clientRef.current?.sendAgentMessage(content, model, opts);
194
- }, []);
195
- const stopAgent = useCallback(() => {
196
- clientRef.current?.stopAgent();
197
- }, []);
198
- const resetAgent = useCallback(() => {
199
- clientRef.current?.resetAgent();
200
- setAgentSessionId(null);
201
- }, []);
202
- const clearMessages = useCallback(() => {
203
- setMessages([]);
204
- }, []);
205
- return {
206
- isConnected,
207
- clientId,
208
- sessionId: connectedSessionId,
209
- sandboxStatus,
210
- sandboxId,
211
- sandboxUrl,
212
- lifecycle,
213
- lifecycleMessage,
214
- agentStatus,
215
- agentSessionId,
216
- messages,
217
- error,
218
- connect,
219
- disconnect,
220
- startSandbox,
221
- stopSandbox,
222
- exec,
223
- sendMessage,
224
- stopAgent,
225
- resetAgent,
226
- clearMessages,
227
- };
228
- }
229
- //# sourceMappingURL=use-agent-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-agent-session.js","sourceRoot":"","sources":["../src/use-agent-session.ts"],"names":[],"mappings":"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"}