@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.
@@ -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
- import { ServerMessage, ClientMessage, ErrorMessage } from '@gnsx/genesys.agent.shared/browser';
2
- export { AgentEvent, AgentEventMessage, AgentEventType, AgentMessageEvent, ClientMessage, ClientMessageType, ConnectionEstablishedMessage, DEFAULT_MAX_SESSIONS, DEFAULT_PORT, DEFAULT_SESSION_DIR, DEFAULT_SESSION_TIMEOUT, ErrorEvent, ErrorMessage, InputMessage, MAX_FILE_SIZE, MessagesClearedEvent, ModelUpdatedEvent, PROJECT_LAYOUT_PLACEHOLDER, PingMessage, ReasoningEvent, RequestInputMessage, RoundFinishedEvent, SYSTEM_CONTEXT_PLACEHOLDER, SendDataEvent, ServerErrorCode, ServerMessage, ServerMessageType, SessionInfo, SessionInfoMessage, SessionRestoredMessage, StreamChunkEvent, TodoItem, TodoListEvent, TodoPriority, TodoStatus, TokenUsageEvent, ToolCallEvent, ToolErrorEvent, ToolResultEvent, UserMessageEvent, WS_HEARTBEAT_INTERVAL } from '@gnsx/genesys.agent.shared/browser';
3
-
4
- interface ClientOptions {
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"}