lemon-model 1.1.0 → 1.2.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.
Files changed (58) hide show
  1. package/dist/cores/transformer.d.ts +9 -1
  2. package/dist/cores/transformer.js +22 -7
  3. package/dist/cores/transformer.js.map +1 -1
  4. package/dist/genai/dump-test.d.ts +82 -0
  5. package/dist/genai/dump-test.js +200 -0
  6. package/dist/genai/dump-test.js.map +1 -0
  7. package/dist/genai/index.d.ts +11 -0
  8. package/dist/genai/index.js +31 -0
  9. package/dist/genai/index.js.map +1 -0
  10. package/dist/genai/mocks.d.ts +44 -0
  11. package/dist/genai/mocks.js +127 -0
  12. package/dist/genai/mocks.js.map +1 -0
  13. package/dist/genai/proxy.d.ts +65 -0
  14. package/dist/genai/proxy.js +165 -0
  15. package/dist/genai/proxy.js.map +1 -0
  16. package/dist/genai/testing.d.ts +11 -0
  17. package/dist/genai/testing.js +28 -0
  18. package/dist/genai/testing.js.map +1 -0
  19. package/dist/genai/transport.d.ts +37 -0
  20. package/dist/genai/transport.js +136 -0
  21. package/dist/genai/transport.js.map +1 -0
  22. package/dist/genai/types.d.ts +71 -0
  23. package/dist/genai/types.js +10 -0
  24. package/dist/genai/types.js.map +1 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +2 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/proxy/index.d.ts +12 -0
  29. package/dist/proxy/index.js +29 -0
  30. package/dist/proxy/index.js.map +1 -0
  31. package/dist/proxy/proxy.d.ts +75 -0
  32. package/dist/proxy/proxy.js +198 -0
  33. package/dist/proxy/proxy.js.map +1 -0
  34. package/dist/proxy/transport.d.ts +123 -0
  35. package/dist/proxy/transport.js +401 -0
  36. package/dist/proxy/transport.js.map +1 -0
  37. package/dist/proxy/types.d.ts +89 -0
  38. package/dist/proxy/types.js +12 -0
  39. package/dist/proxy/types.js.map +1 -0
  40. package/dist/socket/index.d.ts +9 -0
  41. package/dist/socket/index.js +29 -0
  42. package/dist/socket/index.js.map +1 -0
  43. package/dist/socket/socket.d.ts +191 -0
  44. package/dist/socket/socket.js +844 -0
  45. package/dist/socket/socket.js.map +1 -0
  46. package/dist/socket/testing.d.ts +11 -0
  47. package/dist/socket/testing.js +28 -0
  48. package/dist/socket/testing.js.map +1 -0
  49. package/dist/socket/transport.d.ts +200 -0
  50. package/dist/socket/transport.js +612 -0
  51. package/dist/socket/transport.js.map +1 -0
  52. package/dist/socket/types.d.ts +177 -0
  53. package/dist/socket/types.js +9 -0
  54. package/dist/socket/types.js.map +1 -0
  55. package/dist/socket/websocket.d.ts +89 -0
  56. package/dist/socket/websocket.js +273 -0
  57. package/dist/socket/websocket.js.map +1 -0
  58. package/package.json +1 -1
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BrowserWebSocketNetwork = exports.waitWebSocketConnectionId = exports.extractWebSocketConnectionId = exports.createProxyTransportReceiver = exports.JSONProxyTransportReceiver = void 0;
13
+ /**
14
+ * `proxy/transport.ts`
15
+ * - browser/WebSocket helpers for receiving proxy generate results over JSONTransport.
16
+ * - depends on a minimal `WebSocketCompatible` contract, not the DOM `WebSocket` type,
17
+ * so it stays usable in browsers, Node, and custom UI runtimes.
18
+ *
19
+ * @author Claire <claude@lemoncloud.io>
20
+ * @date 2026-06-08 initial version
21
+ *
22
+ * @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
23
+ */
24
+ const transport_1 = require("../socket/transport");
25
+ /** JSONTransport-backed receiver used by `HttpAbstractGenAI` transport mode */
26
+ class JSONProxyTransportReceiver {
27
+ constructor(network, options = {}) {
28
+ this.network = network;
29
+ this.options = options;
30
+ this.transport = (0, transport_1.createJSONTransport)(new TransportPacketNetwork(network, options.extractPacket), options.jsonTransport);
31
+ this.transport.onMessage(data => this.resolve(data));
32
+ this.transport.onError(error => this.reject(error));
33
+ }
34
+ /**
35
+ * Run an HTTP trigger task and resolve with the next complete JSONTransport payload.
36
+ *
37
+ * Only one pending wait is supported per receiver instance.
38
+ */
39
+ wait(transportId, task) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ if (this.pending)
42
+ throw new Error(`@transport is already waiting - proxy.transport(${transportId})`);
43
+ if (!transportId)
44
+ throw new Error(`@transportId (string) is required - proxy.transport`);
45
+ const promise = new Promise((resolve, reject) => {
46
+ var _a;
47
+ const timeoutMs = (_a = this.options.timeoutMs) !== null && _a !== void 0 ? _a : 30000;
48
+ const timer = timeoutMs > 0
49
+ ? setTimeout(() => {
50
+ this.reject(new Error(`@transport[${transportId}] timeout - proxy.transport`));
51
+ }, timeoutMs)
52
+ : undefined;
53
+ this.pending = { transportId, resolve, reject, timer };
54
+ });
55
+ try {
56
+ yield task();
57
+ }
58
+ catch (e) {
59
+ this.reject(e);
60
+ }
61
+ return promise;
62
+ });
63
+ }
64
+ /** detach listeners and reject an in-flight wait */
65
+ detach() {
66
+ this.reject(new Error(`@transport detached - proxy.transport`));
67
+ this.transport.detach();
68
+ }
69
+ resolve(data) {
70
+ if (!this.pending)
71
+ return;
72
+ if (this.options.validate && !this.options.validate(data))
73
+ return;
74
+ const pending = this.pending;
75
+ this.pending = undefined;
76
+ if (pending.timer)
77
+ clearTimeout(pending.timer);
78
+ pending.resolve(data);
79
+ }
80
+ reject(error) {
81
+ if (!this.pending)
82
+ return;
83
+ const pending = this.pending;
84
+ this.pending = undefined;
85
+ if (pending.timer)
86
+ clearTimeout(pending.timer);
87
+ pending.reject(error);
88
+ }
89
+ }
90
+ exports.JSONProxyTransportReceiver = JSONProxyTransportReceiver;
91
+ /** create a receiver that filters raw network packets down to JSONTransport frames */
92
+ const createProxyTransportReceiver = (network, options) => new JSONProxyTransportReceiver(network, options);
93
+ exports.createProxyTransportReceiver = createProxyTransportReceiver;
94
+ /** extract a connection id from known API Gateway/WebSocket handshake response shapes */
95
+ const extractWebSocketConnectionId = (message) => {
96
+ var _a, _b, _c, _d, _e, _f, _g, _h;
97
+ if (!message || typeof message !== 'object')
98
+ return undefined;
99
+ const data = message;
100
+ const candidates = [
101
+ data.connectionId,
102
+ data.connId,
103
+ (_a = data.data) === null || _a === void 0 ? void 0 : _a.connectionId,
104
+ (_b = data.data) === null || _b === void 0 ? void 0 : _b.connId,
105
+ (_d = (_c = data.data) === null || _c === void 0 ? void 0 : _c.connId) === null || _d === void 0 ? void 0 : _d.id,
106
+ (_e = data.data) === null || _e === void 0 ? void 0 : _e.id,
107
+ (_f = data.body) === null || _f === void 0 ? void 0 : _f.connectionId,
108
+ (_g = data.body) === null || _g === void 0 ? void 0 : _g.connId,
109
+ (_h = data.body) === null || _h === void 0 ? void 0 : _h.id,
110
+ data.id,
111
+ ];
112
+ return candidates.find(value => typeof value === 'string' && value.length > 0);
113
+ };
114
+ exports.extractWebSocketConnectionId = extractWebSocketConnectionId;
115
+ /**
116
+ * Wait until a WebSocket is open, send the handshake message, and resolve the
117
+ * first connection id found in inbound messages.
118
+ */
119
+ const waitWebSocketConnectionId = (ws, options = {}) => __awaiter(void 0, void 0, void 0, function* () {
120
+ var _a, _b;
121
+ const timeoutMs = (_a = options.timeoutMs) !== null && _a !== void 0 ? _a : 15000;
122
+ const extract = (_b = options.extract) !== null && _b !== void 0 ? _b : exports.extractWebSocketConnectionId;
123
+ yield waitWebSocketOpen(ws, timeoutMs);
124
+ return new Promise((resolve, reject) => {
125
+ let settled = false;
126
+ const timer = timeoutMs > 0
127
+ ? setTimeout(() => {
128
+ rejectOnce(new Error(`timeout waiting for connectionId from WebSocket: ${timeoutMs}ms`));
129
+ }, timeoutMs)
130
+ : undefined;
131
+ const cleanup = () => {
132
+ if (timer)
133
+ clearTimeout(timer);
134
+ ws.removeEventListener('message', onMessage);
135
+ ws.removeEventListener('error', onError);
136
+ ws.removeEventListener('close', onClose);
137
+ };
138
+ const resolveOnce = (connectionId) => {
139
+ if (settled)
140
+ return;
141
+ settled = true;
142
+ cleanup();
143
+ resolve(connectionId);
144
+ };
145
+ const rejectOnce = (error) => {
146
+ if (settled)
147
+ return;
148
+ settled = true;
149
+ cleanup();
150
+ reject(error);
151
+ };
152
+ const onMessage = (event) => __awaiter(void 0, void 0, void 0, function* () {
153
+ try {
154
+ const raw = yield asWebSocketText(event.data);
155
+ const json = tryParseWebSocketJSON(raw);
156
+ const connectionId = extract(json !== null && json !== void 0 ? json : raw);
157
+ if (connectionId)
158
+ resolveOnce(connectionId);
159
+ }
160
+ catch (e) {
161
+ rejectOnce(e);
162
+ }
163
+ });
164
+ const onError = (event) => rejectOnce(event);
165
+ const onClose = () => rejectOnce(new Error(`WebSocket closed before connectionId was received`));
166
+ ws.addEventListener('message', onMessage);
167
+ ws.addEventListener('error', onError, { once: true });
168
+ ws.addEventListener('close', onClose, { once: true });
169
+ if (options.connectMessage)
170
+ ws.send(options.connectMessage);
171
+ });
172
+ });
173
+ exports.waitWebSocketConnectionId = waitWebSocketConnectionId;
174
+ /**
175
+ * Adapter from browser-like WebSocket objects to `NetworkSupportable`.
176
+ *
177
+ * The adapter does not own externally supplied WebSocket instances. `close()` is
178
+ * intentionally equivalent to `detach()`; callers that created the WebSocket should
179
+ * close it themselves when they want the underlying connection closed.
180
+ */
181
+ class BrowserWebSocketNetwork {
182
+ constructor(ws) {
183
+ this.ws = ws;
184
+ this.messageHandlers = new Set();
185
+ this.errorHandlers = new Set();
186
+ this.detached = false;
187
+ this.handleOpen = () => undefined;
188
+ this.handleMessage = (event) => {
189
+ if (this.detached || typeof event.data !== 'string')
190
+ return;
191
+ for (const handler of [...this.messageHandlers])
192
+ handler(event.data);
193
+ };
194
+ this.handleError = (event) => {
195
+ if (this.detached)
196
+ return;
197
+ for (const handler of [...this.errorHandlers])
198
+ handler(event, { scope: 'browserWebSocket', network: this });
199
+ };
200
+ this.handleClose = (event) => {
201
+ if (this.detached)
202
+ return;
203
+ for (const handler of [...this.errorHandlers])
204
+ handler(event, { scope: 'browserWebSocket.close', network: this });
205
+ };
206
+ this.opened = this.isOpen()
207
+ ? Promise.resolve()
208
+ : new Promise((resolve, reject) => {
209
+ const onOpen = () => {
210
+ this.detachReadyListeners();
211
+ resolve();
212
+ };
213
+ const onError = (event) => {
214
+ this.detachReadyListeners();
215
+ reject(event);
216
+ };
217
+ this.readyOpenHandler = onOpen;
218
+ this.readyErrorHandler = onError;
219
+ ws.addEventListener('open', onOpen, { once: true });
220
+ ws.addEventListener('error', onError, { once: true });
221
+ });
222
+ ws.addEventListener('open', this.handleOpen);
223
+ ws.addEventListener('message', this.handleMessage);
224
+ ws.addEventListener('error', this.handleError);
225
+ ws.addEventListener('close', this.handleClose);
226
+ }
227
+ get readyState() {
228
+ if (this.detached)
229
+ return 'closed';
230
+ if (this.isOpen())
231
+ return 'open';
232
+ if (this.ws.readyState === this.stateValue('CLOSING', 2))
233
+ return 'closing';
234
+ if (this.ws.readyState === this.stateValue('CLOSED', 3))
235
+ return 'closed';
236
+ return 'connecting';
237
+ }
238
+ ready() {
239
+ if (this.detached)
240
+ return Promise.reject(new Error(`@network connection error: closed - browserWebSocket.ready`));
241
+ return this.opened;
242
+ }
243
+ send(data) {
244
+ if (this.detached || !this.isOpen()) {
245
+ throw new Error(`@network connection error: ${this.readyState} - browserWebSocket.send`);
246
+ }
247
+ this.ws.send(data);
248
+ }
249
+ onMessage(handler) {
250
+ if (this.detached)
251
+ throw new Error(`@network connection error: closed - browserWebSocket.onMessage`);
252
+ this.messageHandlers.add(handler);
253
+ return () => this.messageHandlers.delete(handler);
254
+ }
255
+ configure(_options) {
256
+ // Browser WebSocket transport options are controlled by the browser/runtime.
257
+ }
258
+ onError(handler) {
259
+ this.errorHandlers.add(handler);
260
+ return () => this.errorHandlers.delete(handler);
261
+ }
262
+ close() {
263
+ this.detach();
264
+ }
265
+ /** remove all listeners without closing the externally owned WebSocket */
266
+ detach() {
267
+ if (this.detached)
268
+ return;
269
+ this.detached = true;
270
+ this.messageHandlers.clear();
271
+ this.errorHandlers.clear();
272
+ this.ws.removeEventListener('open', this.handleOpen);
273
+ this.ws.removeEventListener('message', this.handleMessage);
274
+ this.ws.removeEventListener('error', this.handleError);
275
+ this.ws.removeEventListener('close', this.handleClose);
276
+ this.detachReadyListeners();
277
+ }
278
+ isOpen() {
279
+ return this.ws.readyState === this.stateValue('OPEN', 1);
280
+ }
281
+ stateValue(key, fallback) {
282
+ return typeof this.ws[key] === 'number' ? this.ws[key] : fallback;
283
+ }
284
+ detachReadyListeners() {
285
+ if (this.readyOpenHandler)
286
+ this.ws.removeEventListener('open', this.readyOpenHandler);
287
+ if (this.readyErrorHandler)
288
+ this.ws.removeEventListener('error', this.readyErrorHandler);
289
+ this.readyOpenHandler = undefined;
290
+ this.readyErrorHandler = undefined;
291
+ }
292
+ }
293
+ exports.BrowserWebSocketNetwork = BrowserWebSocketNetwork;
294
+ const waitWebSocketOpen = (ws, timeoutMs) => {
295
+ if (ws.readyState === stateValue(ws, 'OPEN', 1))
296
+ return Promise.resolve();
297
+ return new Promise((resolve, reject) => {
298
+ let settled = false;
299
+ const timer = timeoutMs > 0
300
+ ? setTimeout(() => rejectOnce(new Error(`timeout waiting for WebSocket open: ${timeoutMs}ms`)), timeoutMs)
301
+ : undefined;
302
+ const cleanup = () => {
303
+ if (timer)
304
+ clearTimeout(timer);
305
+ ws.removeEventListener('open', onOpen);
306
+ ws.removeEventListener('error', onError);
307
+ ws.removeEventListener('close', onClose);
308
+ };
309
+ const resolveOnce = () => {
310
+ if (settled)
311
+ return;
312
+ settled = true;
313
+ cleanup();
314
+ resolve();
315
+ };
316
+ const rejectOnce = (error) => {
317
+ if (settled)
318
+ return;
319
+ settled = true;
320
+ cleanup();
321
+ reject(error);
322
+ };
323
+ const onOpen = () => resolveOnce();
324
+ const onError = (event) => rejectOnce(event);
325
+ const onClose = () => rejectOnce(new Error(`WebSocket closed before open`));
326
+ ws.addEventListener('open', onOpen, { once: true });
327
+ ws.addEventListener('error', onError, { once: true });
328
+ ws.addEventListener('close', onClose, { once: true });
329
+ });
330
+ };
331
+ const stateValue = (ws, key, fallback) => (typeof ws[key] === 'number' ? ws[key] : fallback);
332
+ const asWebSocketText = (data) => __awaiter(void 0, void 0, void 0, function* () {
333
+ if (typeof data === 'string')
334
+ return data;
335
+ if (data instanceof ArrayBuffer)
336
+ return new TextDecoder().decode(data);
337
+ if (ArrayBuffer.isView(data))
338
+ return new TextDecoder().decode(data);
339
+ const readable = data;
340
+ if (typeof (readable === null || readable === void 0 ? void 0 : readable.text) === 'function')
341
+ return readable.text();
342
+ if (typeof (readable === null || readable === void 0 ? void 0 : readable.arrayBuffer) === 'function')
343
+ return new TextDecoder().decode(yield readable.arrayBuffer());
344
+ return String(data);
345
+ });
346
+ const tryParseWebSocketJSON = (text) => {
347
+ try {
348
+ return JSON.parse(text);
349
+ }
350
+ catch (_a) {
351
+ return undefined;
352
+ }
353
+ };
354
+ /** network wrapper that lets JSONTransport see only transport packet strings */
355
+ class TransportPacketNetwork {
356
+ constructor(source, extractPacket) {
357
+ this.source = source;
358
+ this.extractPacket = extractPacket;
359
+ }
360
+ get readyState() {
361
+ return this.source.readyState;
362
+ }
363
+ ready() {
364
+ var _a, _b, _c;
365
+ return (_c = (_b = (_a = this.source).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
366
+ }
367
+ send(data) {
368
+ this.source.send(data);
369
+ }
370
+ onMessage(handler) {
371
+ return this.source.onMessage(data => {
372
+ const packet = this.extractPacket ? this.extractPacket(data) : data;
373
+ if (typeof packet !== 'string' || !isTransportPacketString(packet))
374
+ return;
375
+ handler(packet);
376
+ });
377
+ }
378
+ configure(options) {
379
+ var _a, _b;
380
+ (_b = (_a = this.source).configure) === null || _b === void 0 ? void 0 : _b.call(_a, options);
381
+ }
382
+ onError(handler) {
383
+ return this.source.onError(handler);
384
+ }
385
+ close() {
386
+ this.source.close();
387
+ }
388
+ }
389
+ const isTransportPacketString = (data) => {
390
+ try {
391
+ const packet = JSON.parse(data);
392
+ return ((packet === null || packet === void 0 ? void 0 : packet.type) === 'json:manifest' ||
393
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:chunk' ||
394
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:complete' ||
395
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:error');
396
+ }
397
+ catch (_a) {
398
+ return false;
399
+ }
400
+ };
401
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/proxy/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * `proxy/types.ts`
3
+ * - runtime-neutral Gemini-compatible proxy surface types.
4
+ *
5
+ * @author Claire <claude@lemoncloud.io>
6
+ * @date 2026-06-08 initial version
7
+ *
8
+ * @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
9
+ */
10
+ /** inline binary payload in Gemini-compatible content parts */
11
+ export interface ProxyGenAIInlineData {
12
+ data: string;
13
+ mimeType?: string;
14
+ }
15
+ /** text or inline-data part for a Gemini-compatible content block */
16
+ export interface ProxyGenAIPart {
17
+ text?: string;
18
+ inlineData?: ProxyGenAIInlineData;
19
+ }
20
+ /** Gemini-compatible content block */
21
+ export interface ProxyGenAIContent {
22
+ role?: string;
23
+ parts: ProxyGenAIPart[];
24
+ }
25
+ /** accepted `contents` shapes for proxy generateContent calls */
26
+ export declare type ProxyGenAIContents = string | ProxyGenAIContent | ProxyGenAIContent[];
27
+ /** image generation config subset used by samples/proxy */
28
+ export interface ProxyGenAIImageConfig {
29
+ aspectRatio?: string;
30
+ imageSize?: string;
31
+ }
32
+ /** generation config subset supported by `HttpAbstractGenAI` */
33
+ export interface ProxyGenAIConfig {
34
+ systemInstruction?: string;
35
+ responseMimeType?: string;
36
+ responseSchema?: unknown;
37
+ responseModalities?: unknown[];
38
+ temperature?: number;
39
+ topP?: number;
40
+ imageConfig?: ProxyGenAIImageConfig;
41
+ }
42
+ /** Gemini-compatible generateContent params accepted by the proxy */
43
+ export interface ProxyGenAIGenerateContentParams {
44
+ model: string;
45
+ contents: ProxyGenAIContents;
46
+ config?: ProxyGenAIConfig;
47
+ }
48
+ /** Gemini-compatible candidate response */
49
+ export interface ProxyGenAICandidate {
50
+ content: {
51
+ parts: ProxyGenAIPart[];
52
+ };
53
+ }
54
+ /** Gemini-compatible token usage metadata */
55
+ export interface ProxyGenAIUsageMetadata {
56
+ promptTokenCount?: number;
57
+ thoughtsTokenCount?: number;
58
+ totalTokenCount?: number;
59
+ }
60
+ /**
61
+ * Gemini-compatible generateContent response returned by the proxy.
62
+ * - extra flows/agents record fields (`$run`, `usageId`, `model`, `cost`, ...) are
63
+ * preserved as additive passthroughs so callers can keep run/usage records.
64
+ */
65
+ export interface ProxyGenAIGenerateContentResponse {
66
+ text?: string;
67
+ candidates?: ProxyGenAICandidate[];
68
+ usageMetadata?: ProxyGenAIUsageMetadata;
69
+ /** flows run record, preserved when present */
70
+ $run?: unknown;
71
+ /** usage record id, preserved when present */
72
+ usageId?: string;
73
+ /** resolved model name, preserved when present */
74
+ model?: string;
75
+ /** server-reported cost, preserved when present */
76
+ cost?: number;
77
+ /** allow additional flows fields to survive without breaking the typed surface */
78
+ [key: string]: unknown;
79
+ }
80
+ /** minimal GenAI interface implemented by `HttpAbstractGenAI` */
81
+ export interface ProxyGenAI {
82
+ models: {
83
+ generateContent(params: ProxyGenAIGenerateContentParams): Promise<ProxyGenAIGenerateContentResponse>;
84
+ };
85
+ }
86
+ /** transport receiver used when HTTP only triggers work and the result arrives elsewhere */
87
+ export interface ProxyTransportReceiver<T extends object = object> {
88
+ wait(transportId: string, task: () => Promise<unknown>): Promise<T>;
89
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * `proxy/types.ts`
4
+ * - runtime-neutral Gemini-compatible proxy surface types.
5
+ *
6
+ * @author Claire <claude@lemoncloud.io>
7
+ * @date 2026-06-08 initial version
8
+ *
9
+ * @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `socket/index.ts`
3
+ * - shared socket(network) + json-transport core for F/B usage.
4
+ *
5
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
6
+ */
7
+ export * from './types';
8
+ export * from './transport';
9
+ export * from './websocket';
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * `socket/index.ts`
19
+ * - shared socket(network) + json-transport core for F/B usage.
20
+ *
21
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
22
+ */
23
+ __exportStar(require("./types"), exports);
24
+ __exportStar(require("./transport"), exports);
25
+ __exportStar(require("./websocket"), exports);
26
+ //! NOTE: the in-memory peer simulator (`./socket`) is intentionally NOT re-exported here.
27
+ //! It is a test/dev utility — import it via the isolated `lemon-model/dist/socket/testing` entry
28
+ //! so production (esp. frontend) bundles do not pull in the simulator runtime.
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/socket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAE5B,0FAA0F;AAC1F,iGAAiG;AACjG,+EAA+E"}