@gnsx/genesys.agent.client 0.4.1 → 1.0.0
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/client.d.ts +82 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +321 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +4 -70
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -344
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +95 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +10 -0
- package/dist/protocol.js.map +1 -0
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/uuid.d.ts +6 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +15 -0
- package/dist/uuid.js.map +1 -0
- package/package.json +9 -35
- package/src/client.ts +394 -0
- package/src/index.ts +22 -53
- package/src/protocol.ts +100 -0
- package/src/types.ts +49 -27
- package/src/uuid.ts +14 -0
- package/README.md +0 -119
- package/dist/index.cjs +0 -357
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -70
- package/src/GenesysAgentClient.ts +0 -318
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GenesysAgentClient — browser + Node.js compatible client for the
|
|
3
|
+
* Genesys Agent v2 server.
|
|
4
|
+
*
|
|
5
|
+
* Connection flow:
|
|
6
|
+
* 1. client.connect(serverUrl)
|
|
7
|
+
* → POST /sessions — allocate workspace on server
|
|
8
|
+
* → WebSocket to wsUrl — attach to that workspace
|
|
9
|
+
*
|
|
10
|
+
* Reconnect: re-uses the stored wsUrl (no re-POST).
|
|
11
|
+
* Destroy: closes WS + DELETE /sessions/:id to clean up the workspace.
|
|
12
|
+
*/
|
|
13
|
+
import type { SessionInfoResponse, ThinkingLevel } from './protocol.js';
|
|
14
|
+
import type { ClientEventMap, ClientEventType, ClientOptions, ClientState, ModelInfo, WsSessionState } from './types.js';
|
|
15
|
+
export declare class GenesysAgentClient {
|
|
16
|
+
private readonly options;
|
|
17
|
+
private ws;
|
|
18
|
+
private sessionId;
|
|
19
|
+
private wsUrl;
|
|
20
|
+
private serverUrl;
|
|
21
|
+
private state;
|
|
22
|
+
private reconnectAttempts;
|
|
23
|
+
private reconnectTimer;
|
|
24
|
+
private intentionalClose;
|
|
25
|
+
private readonly pending;
|
|
26
|
+
private readonly listeners;
|
|
27
|
+
constructor(options?: ClientOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Create a server workspace then open the WebSocket.
|
|
30
|
+
* @param serverUrl Base HTTP URL, e.g. "http://localhost:3000"
|
|
31
|
+
*/
|
|
32
|
+
connect(serverUrl: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Close the WebSocket and DELETE the server workspace.
|
|
35
|
+
* After this call the client is fully cleaned up and can connect() again.
|
|
36
|
+
*/
|
|
37
|
+
destroy(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Disconnect the WebSocket but keep the workspace alive on the server
|
|
40
|
+
* (allows reconnect via the same wsUrl).
|
|
41
|
+
*/
|
|
42
|
+
disconnect(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Send a prompt. Returns as soon as the server ACKs — events stream back
|
|
45
|
+
* via the 'event' listener.
|
|
46
|
+
*/
|
|
47
|
+
prompt(message: string): Promise<void>;
|
|
48
|
+
/** Abort the current agent turn. */
|
|
49
|
+
abort(): Promise<void>;
|
|
50
|
+
/** Get the current session state. */
|
|
51
|
+
getState(): Promise<WsSessionState>;
|
|
52
|
+
/** Set the active model. */
|
|
53
|
+
setModel(provider: string, modelId: string): Promise<void>;
|
|
54
|
+
/** Get all models available on the server. */
|
|
55
|
+
getAvailableModels(): Promise<ModelInfo[]>;
|
|
56
|
+
/** Set the thinking/reasoning level. */
|
|
57
|
+
setThinkingLevel(level: ThinkingLevel): Promise<void>;
|
|
58
|
+
/** Start a new session (clears history). */
|
|
59
|
+
newSession(): Promise<void>;
|
|
60
|
+
/** Compact the conversation context. */
|
|
61
|
+
compact(customInstructions?: string): Promise<void>;
|
|
62
|
+
/** Get all current messages. */
|
|
63
|
+
getMessages(): Promise<unknown[]>;
|
|
64
|
+
/** Fetch workspace info from the server (no WS required). */
|
|
65
|
+
getSessionInfo(): Promise<SessionInfoResponse>;
|
|
66
|
+
on<E extends ClientEventType>(event: E, listener: ClientEventMap[E]): ClientEventMap[E];
|
|
67
|
+
off<E extends ClientEventType>(event: E, listener: ClientEventMap[E]): void;
|
|
68
|
+
once<E extends ClientEventType>(event: E, listener: ClientEventMap[E]): void;
|
|
69
|
+
getConnectionState(): ClientState;
|
|
70
|
+
isConnected(): boolean;
|
|
71
|
+
getSessionId(): string | null;
|
|
72
|
+
private openWebSocket;
|
|
73
|
+
private handleMessage;
|
|
74
|
+
private request;
|
|
75
|
+
private send;
|
|
76
|
+
private scheduleReconnect;
|
|
77
|
+
private clearReconnectTimer;
|
|
78
|
+
private emit;
|
|
79
|
+
private setState;
|
|
80
|
+
private debug;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EACnB,aAAa,EAGd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACf,MAAM,YAAY,CAAC;AAUpB,qBAAa,kBAAkB;IAcjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAbpC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAA+B;IAE5C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiE;gBAE9D,OAAO,GAAE,aAAkB;IASxD;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B/C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B9B;;;OAGG;IACH,UAAU,IAAI,IAAI;IAgBlB;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,oCAAoC;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,qCAAqC;IAC/B,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAIzC,4BAA4B;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,8CAA8C;IACxC,kBAAkB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKhD,wCAAwC;IAClC,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,4CAA4C;IACtC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,wCAAwC;IAClC,OAAO,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,gCAAgC;IAC1B,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IASvC,6DAA6D;IACvD,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAapD,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAMvF,GAAG,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3E,IAAI,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAY5E,kBAAkB,IAAI,WAAW;IACjC,WAAW,IAAI,OAAO;IACtB,YAAY,IAAI,MAAM,GAAG,IAAI;IAM7B,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,KAAK;CAGd"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GenesysAgentClient — browser + Node.js compatible client for the
|
|
3
|
+
* Genesys Agent v2 server.
|
|
4
|
+
*
|
|
5
|
+
* Connection flow:
|
|
6
|
+
* 1. client.connect(serverUrl)
|
|
7
|
+
* → POST /sessions — allocate workspace on server
|
|
8
|
+
* → WebSocket to wsUrl — attach to that workspace
|
|
9
|
+
*
|
|
10
|
+
* Reconnect: re-uses the stored wsUrl (no re-POST).
|
|
11
|
+
* Destroy: closes WS + DELETE /sessions/:id to clean up the workspace.
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID } from './uuid.js';
|
|
14
|
+
const LOG_PREFIX = '[GenesysAgentClient]';
|
|
15
|
+
export class GenesysAgentClient {
|
|
16
|
+
options;
|
|
17
|
+
ws = null;
|
|
18
|
+
sessionId = null;
|
|
19
|
+
wsUrl = null;
|
|
20
|
+
serverUrl = null;
|
|
21
|
+
state = 'disconnected';
|
|
22
|
+
reconnectAttempts = 0;
|
|
23
|
+
reconnectTimer = null;
|
|
24
|
+
intentionalClose = false;
|
|
25
|
+
pending = new Map();
|
|
26
|
+
listeners = new Map();
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
this.options = options;
|
|
29
|
+
this.options.reconnectDelay ??= 1000;
|
|
30
|
+
this.options.maxReconnectAttempts ??= 5;
|
|
31
|
+
}
|
|
32
|
+
// =========================================================================
|
|
33
|
+
// Connection lifecycle
|
|
34
|
+
// =========================================================================
|
|
35
|
+
/**
|
|
36
|
+
* Create a server workspace then open the WebSocket.
|
|
37
|
+
* @param serverUrl Base HTTP URL, e.g. "http://localhost:3000"
|
|
38
|
+
*/
|
|
39
|
+
async connect(serverUrl) {
|
|
40
|
+
if (this.state === 'connected' || this.state === 'connecting') {
|
|
41
|
+
throw new Error('Already connected or connecting');
|
|
42
|
+
}
|
|
43
|
+
this.serverUrl = serverUrl.replace(/\/+$/, '');
|
|
44
|
+
this.intentionalClose = false;
|
|
45
|
+
this.setState('connecting');
|
|
46
|
+
try {
|
|
47
|
+
const response = await fetch(`${this.serverUrl}/sessions`, { method: 'POST' });
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
const body = await response.json().catch(() => ({ error: 'Failed to create session' }));
|
|
50
|
+
throw new Error(body.error ?? `HTTP ${response.status}`);
|
|
51
|
+
}
|
|
52
|
+
const { sessionId, wsUrl } = await response.json();
|
|
53
|
+
this.sessionId = sessionId;
|
|
54
|
+
this.wsUrl = wsUrl;
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
this.setState('disconnected');
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
await this.openWebSocket();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Close the WebSocket and DELETE the server workspace.
|
|
64
|
+
* After this call the client is fully cleaned up and can connect() again.
|
|
65
|
+
*/
|
|
66
|
+
async destroy() {
|
|
67
|
+
this.intentionalClose = true;
|
|
68
|
+
this.clearReconnectTimer();
|
|
69
|
+
// Reject all pending requests
|
|
70
|
+
for (const [, pending] of this.pending) {
|
|
71
|
+
pending.reject(new Error('Client destroyed'));
|
|
72
|
+
}
|
|
73
|
+
this.pending.clear();
|
|
74
|
+
if (this.ws) {
|
|
75
|
+
this.ws.close();
|
|
76
|
+
this.ws = null;
|
|
77
|
+
}
|
|
78
|
+
// Clean up server workspace
|
|
79
|
+
if (this.sessionId && this.serverUrl) {
|
|
80
|
+
try {
|
|
81
|
+
await fetch(`${this.serverUrl}/sessions/${this.sessionId}`, { method: 'DELETE' });
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Best-effort
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
this.sessionId = null;
|
|
88
|
+
this.wsUrl = null;
|
|
89
|
+
this.setState('disconnected');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Disconnect the WebSocket but keep the workspace alive on the server
|
|
93
|
+
* (allows reconnect via the same wsUrl).
|
|
94
|
+
*/
|
|
95
|
+
disconnect() {
|
|
96
|
+
this.intentionalClose = true;
|
|
97
|
+
this.clearReconnectTimer();
|
|
98
|
+
if (this.ws) {
|
|
99
|
+
this.ws.close();
|
|
100
|
+
this.ws = null;
|
|
101
|
+
}
|
|
102
|
+
this.setState('disconnected');
|
|
103
|
+
}
|
|
104
|
+
// =========================================================================
|
|
105
|
+
// Commands
|
|
106
|
+
// =========================================================================
|
|
107
|
+
/**
|
|
108
|
+
* Send a prompt. Returns as soon as the server ACKs — events stream back
|
|
109
|
+
* via the 'event' listener.
|
|
110
|
+
*/
|
|
111
|
+
async prompt(message) {
|
|
112
|
+
await this.request({ type: 'prompt', message });
|
|
113
|
+
}
|
|
114
|
+
/** Abort the current agent turn. */
|
|
115
|
+
async abort() {
|
|
116
|
+
await this.request({ type: 'abort' });
|
|
117
|
+
}
|
|
118
|
+
/** Get the current session state. */
|
|
119
|
+
async getState() {
|
|
120
|
+
return this.request({ type: 'get_state' });
|
|
121
|
+
}
|
|
122
|
+
/** Set the active model. */
|
|
123
|
+
async setModel(provider, modelId) {
|
|
124
|
+
await this.request({ type: 'set_model', provider, modelId });
|
|
125
|
+
}
|
|
126
|
+
/** Get all models available on the server. */
|
|
127
|
+
async getAvailableModels() {
|
|
128
|
+
const data = await this.request({ type: 'get_available_models' });
|
|
129
|
+
return data.models;
|
|
130
|
+
}
|
|
131
|
+
/** Set the thinking/reasoning level. */
|
|
132
|
+
async setThinkingLevel(level) {
|
|
133
|
+
await this.request({ type: 'set_thinking_level', level });
|
|
134
|
+
}
|
|
135
|
+
/** Start a new session (clears history). */
|
|
136
|
+
async newSession() {
|
|
137
|
+
await this.request({ type: 'new_session' });
|
|
138
|
+
}
|
|
139
|
+
/** Compact the conversation context. */
|
|
140
|
+
async compact(customInstructions) {
|
|
141
|
+
await this.request({ type: 'compact', customInstructions });
|
|
142
|
+
}
|
|
143
|
+
/** Get all current messages. */
|
|
144
|
+
async getMessages() {
|
|
145
|
+
const data = await this.request({ type: 'get_messages' });
|
|
146
|
+
return data.messages;
|
|
147
|
+
}
|
|
148
|
+
// =========================================================================
|
|
149
|
+
// HTTP helpers
|
|
150
|
+
// =========================================================================
|
|
151
|
+
/** Fetch workspace info from the server (no WS required). */
|
|
152
|
+
async getSessionInfo() {
|
|
153
|
+
if (!this.serverUrl || !this.sessionId) {
|
|
154
|
+
throw new Error('Not connected');
|
|
155
|
+
}
|
|
156
|
+
const response = await fetch(`${this.serverUrl}/sessions/${this.sessionId}`);
|
|
157
|
+
if (!response.ok)
|
|
158
|
+
throw new Error(`HTTP ${response.status}`);
|
|
159
|
+
return response.json();
|
|
160
|
+
}
|
|
161
|
+
// =========================================================================
|
|
162
|
+
// Event listeners
|
|
163
|
+
// =========================================================================
|
|
164
|
+
on(event, listener) {
|
|
165
|
+
if (!this.listeners.has(event))
|
|
166
|
+
this.listeners.set(event, new Set());
|
|
167
|
+
this.listeners.get(event).add(listener);
|
|
168
|
+
return listener;
|
|
169
|
+
}
|
|
170
|
+
off(event, listener) {
|
|
171
|
+
this.listeners.get(event)?.delete(listener);
|
|
172
|
+
}
|
|
173
|
+
once(event, listener) {
|
|
174
|
+
const wrapper = ((...args) => {
|
|
175
|
+
this.off(event, wrapper);
|
|
176
|
+
listener(...args);
|
|
177
|
+
});
|
|
178
|
+
this.on(event, wrapper);
|
|
179
|
+
}
|
|
180
|
+
// =========================================================================
|
|
181
|
+
// State
|
|
182
|
+
// =========================================================================
|
|
183
|
+
getConnectionState() { return this.state; }
|
|
184
|
+
isConnected() { return this.state === 'connected'; }
|
|
185
|
+
getSessionId() { return this.sessionId; }
|
|
186
|
+
// =========================================================================
|
|
187
|
+
// Internal: WebSocket
|
|
188
|
+
// =========================================================================
|
|
189
|
+
openWebSocket() {
|
|
190
|
+
if (!this.wsUrl)
|
|
191
|
+
throw new Error('No wsUrl available');
|
|
192
|
+
return new Promise((resolve, reject) => {
|
|
193
|
+
const ws = new WebSocket(this.wsUrl);
|
|
194
|
+
this.ws = ws;
|
|
195
|
+
ws.onopen = () => {
|
|
196
|
+
this.reconnectAttempts = 0;
|
|
197
|
+
this.setState('connected');
|
|
198
|
+
resolve();
|
|
199
|
+
};
|
|
200
|
+
ws.onmessage = (event) => {
|
|
201
|
+
try {
|
|
202
|
+
this.handleMessage(JSON.parse(event.data));
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
this.debug('Failed to parse message:', err);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
ws.onclose = () => {
|
|
209
|
+
this.ws = null;
|
|
210
|
+
this.setState('disconnected');
|
|
211
|
+
if (!this.intentionalClose && !this.options.noAutoReconnect) {
|
|
212
|
+
this.scheduleReconnect();
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
ws.onerror = (err) => {
|
|
216
|
+
this.debug('WebSocket error:', err);
|
|
217
|
+
reject(err);
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
handleMessage(msg) {
|
|
222
|
+
// Emit raw message to 'message' listeners
|
|
223
|
+
this.emit('message', msg);
|
|
224
|
+
if (msg.type === 'event') {
|
|
225
|
+
// Forward pi AgentSessionEvent to 'event' listeners
|
|
226
|
+
this.emit('event', msg.event);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (msg.type === 'response') {
|
|
230
|
+
// Resolve/reject pending request promise
|
|
231
|
+
const id = msg.id;
|
|
232
|
+
if (id) {
|
|
233
|
+
const pending = this.pending.get(id);
|
|
234
|
+
if (pending) {
|
|
235
|
+
this.pending.delete(id);
|
|
236
|
+
if (msg.success) {
|
|
237
|
+
pending.resolve(msg.data);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
pending.reject(new Error(msg.error));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// =========================================================================
|
|
247
|
+
// Internal: request/response correlation
|
|
248
|
+
// =========================================================================
|
|
249
|
+
request(cmd) {
|
|
250
|
+
if (!this.isConnected())
|
|
251
|
+
throw new Error('Not connected');
|
|
252
|
+
const id = randomUUID();
|
|
253
|
+
return new Promise((resolve, reject) => {
|
|
254
|
+
this.pending.set(id, {
|
|
255
|
+
resolve: (data) => resolve(data),
|
|
256
|
+
reject,
|
|
257
|
+
});
|
|
258
|
+
this.send({ ...cmd, id });
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
send(cmd) {
|
|
262
|
+
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
263
|
+
this.ws.send(JSON.stringify(cmd));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// =========================================================================
|
|
267
|
+
// Internal: reconnect
|
|
268
|
+
// =========================================================================
|
|
269
|
+
scheduleReconnect() {
|
|
270
|
+
const max = this.options.maxReconnectAttempts;
|
|
271
|
+
if (this.reconnectAttempts >= max) {
|
|
272
|
+
this.debug(`Giving up after ${max} reconnect attempts`);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
this.reconnectAttempts++;
|
|
276
|
+
const delay = Math.min(30_000, this.options.reconnectDelay * Math.pow(1.5, this.reconnectAttempts - 1));
|
|
277
|
+
this.setState('reconnecting');
|
|
278
|
+
this.debug(`Reconnect attempt ${this.reconnectAttempts}/${max} in ${delay}ms`);
|
|
279
|
+
this.reconnectTimer = setTimeout(async () => {
|
|
280
|
+
try {
|
|
281
|
+
await this.openWebSocket();
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
this.scheduleReconnect();
|
|
285
|
+
}
|
|
286
|
+
}, delay);
|
|
287
|
+
}
|
|
288
|
+
clearReconnectTimer() {
|
|
289
|
+
if (this.reconnectTimer) {
|
|
290
|
+
clearTimeout(this.reconnectTimer);
|
|
291
|
+
this.reconnectTimer = null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// =========================================================================
|
|
295
|
+
// Internal: emit / state
|
|
296
|
+
// =========================================================================
|
|
297
|
+
emit(event, ...args) {
|
|
298
|
+
const set = this.listeners.get(event);
|
|
299
|
+
if (!set)
|
|
300
|
+
return;
|
|
301
|
+
for (const listener of set) {
|
|
302
|
+
try {
|
|
303
|
+
listener(...args);
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
this.debug(`Error in '${event}' listener:`, err);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
setState(state) {
|
|
311
|
+
if (this.state !== state) {
|
|
312
|
+
this.state = state;
|
|
313
|
+
this.emit('state_change', state);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
debug(...args) {
|
|
317
|
+
if (this.options.debug)
|
|
318
|
+
console.log(LOG_PREFIX, ...args);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,70 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
autoReconnect?: boolean;
|
|
6
|
-
maxReconnectAttempts?: number;
|
|
7
|
-
reconnectInterval?: number;
|
|
8
|
-
debug?: boolean;
|
|
9
|
-
}
|
|
10
|
-
interface SessionConfig {
|
|
11
|
-
serverAddress: string;
|
|
12
|
-
specPath: string;
|
|
13
|
-
}
|
|
14
|
-
interface ControlMessage {
|
|
15
|
-
message: string;
|
|
16
|
-
isError: boolean;
|
|
17
|
-
}
|
|
18
|
-
declare enum ClientState {
|
|
19
|
-
DISCONNECTED = "disconnected",
|
|
20
|
-
CONNECTING = "connecting",
|
|
21
|
-
CONNECTED = "connected",
|
|
22
|
-
RECONNECTING = "reconnecting"
|
|
23
|
-
}
|
|
24
|
-
declare enum ClientEventType {
|
|
25
|
-
SERVER_MESSAGE = "serverMessage",
|
|
26
|
-
DISCONNECTED = "disconnected",
|
|
27
|
-
STATE_CHANGE = "stateChange",
|
|
28
|
-
CONTROL_MESSAGE = "controlMessage"
|
|
29
|
-
}
|
|
30
|
-
interface ClientEventMap {
|
|
31
|
-
[ClientEventType.SERVER_MESSAGE]: (message: ServerMessage) => void;
|
|
32
|
-
[ClientEventType.DISCONNECTED]: (reason?: string) => void;
|
|
33
|
-
[ClientEventType.STATE_CHANGE]: (state: ClientState) => void;
|
|
34
|
-
[ClientEventType.CONTROL_MESSAGE]: (message: ControlMessage) => void;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
declare class GenesysAgentClient {
|
|
38
|
-
readonly options: ClientOptions;
|
|
39
|
-
protected ws: WebSocket | null;
|
|
40
|
-
protected sessionId: string | null;
|
|
41
|
-
protected wsUrl: string | null;
|
|
42
|
-
protected state: ClientState;
|
|
43
|
-
protected reconnectAttempts: number;
|
|
44
|
-
protected reconnectTimeout: ReturnType<typeof setTimeout> | null;
|
|
45
|
-
protected intentionalClose: boolean;
|
|
46
|
-
protected eventListeners: Map<ClientEventType, Set<Function>>;
|
|
47
|
-
protected serverAddress: string | null;
|
|
48
|
-
protected config: SessionConfig | null;
|
|
49
|
-
constructor(options?: ClientOptions);
|
|
50
|
-
connect(config: SessionConfig): Promise<void>;
|
|
51
|
-
protected connectWebSocket(isReconnecting: boolean): Promise<void>;
|
|
52
|
-
protected handleServerMessage(message: ServerMessage): void;
|
|
53
|
-
sendInput(text: string): void;
|
|
54
|
-
abort(): void;
|
|
55
|
-
disconnect(): void;
|
|
56
|
-
protected attemptReconnect(): void;
|
|
57
|
-
protected send(message: ClientMessage): void;
|
|
58
|
-
protected setState(state: ClientState): void;
|
|
59
|
-
getState(): ClientState;
|
|
60
|
-
isConnected(): boolean;
|
|
61
|
-
getSessionId(): string | null;
|
|
62
|
-
on(event: ClientEventType, listener: ClientEventMap[ClientEventType]): ClientEventMap[ClientEventType];
|
|
63
|
-
off(event: ClientEventType, listener: ClientEventMap[ClientEventType]): void;
|
|
64
|
-
once(event: ClientEventType, listener: ClientEventMap[ClientEventType]): void;
|
|
65
|
-
protected emit(event: ClientEventType, ...args: Parameters<ClientEventMap[ClientEventType]>): void;
|
|
66
|
-
protected debug(...args: unknown[]): void;
|
|
67
|
-
protected handleServerError(message: ErrorMessage): Promise<void>;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export { type ClientEventMap, ClientEventType, type ClientOptions, ClientState, type ControlMessage, GenesysAgentClient, type SessionConfig };
|
|
1
|
+
export { GenesysAgentClient } from './client.js';
|
|
2
|
+
export type { ClientOptions, ClientState, ClientEventType, ClientEventMap, AgentEventListener, MessageListener, StateChangeListener, ModelInfo, } from './types.js';
|
|
3
|
+
export type { WsCommand, WsServerMessage, WsEvent, WsResponse, WsError, WsSessionState, CreateSessionResponse, SessionInfoResponse, ThinkingLevel, ImageContent, } from './protocol.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,YAAY,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,SAAS,EACT,eAAe,EACf,OAAO,EACP,UAAU,EACV,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC"}
|