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,65 @@
1
+ /**
2
+ * `genai/proxy.ts`
3
+ * - HTTP-backed Gemini-compatible `AbstractGenAI` adapter.
4
+ * - works in server and browser runtimes by relying only on the standard `fetch` API.
5
+ *
6
+ * @origin eureka-agents-api / src/lib/proxy/proxy.ts
7
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
8
+ */
9
+ import { ProxyGenAI, ProxyGenAIConfig, ProxyGenAIContents, ProxyGenAIGenerateContentParams, ProxyGenAIGenerateContentResponse, ProxyTransportReceiver } from './types';
10
+ /** options for wiring `HttpAbstractGenAI` to an agents generate endpoint */
11
+ export interface HttpAbstractGenAIOptions {
12
+ /** extra HTTP request headers */
13
+ headers?: Record<string, string>;
14
+ /** fetch override for tests, browsers, or custom runtimes */
15
+ fetch?: typeof fetch;
16
+ /** optional WebSocket/API Gateway transport connection id */
17
+ transportId?: string;
18
+ /** receiver used when the final response is delivered through JSONTransport */
19
+ transport?: ProxyTransportReceiver;
20
+ }
21
+ interface AgentGenerateBody {
22
+ model: string;
23
+ prompt?: string | {
24
+ type?: string;
25
+ content: ProxyGenAIContents;
26
+ };
27
+ system?: string;
28
+ image?: boolean;
29
+ config?: ProxyGenAIConfig;
30
+ }
31
+ export declare const $gemini: {
32
+ /**
33
+ * Convert common agents `GenAIResponse` shapes back into Gemini-like
34
+ * `models.generateContent()` response shape.
35
+ */
36
+ asGenerateContentResponse(data: any): ProxyGenAIGenerateContentResponse;
37
+ };
38
+ /**
39
+ * HTTP-backed Gemini-compatible `AbstractGenAI` adapter.
40
+ *
41
+ * It works in server and browser runtimes by relying only on the standard `fetch` API.
42
+ * When `transportId` is configured, HTTP is used only to trigger generation and the
43
+ * final response is collected from the configured transport receiver.
44
+ */
45
+ export declare class HttpAbstractGenAI implements ProxyGenAI {
46
+ protected readonly endpoint: string;
47
+ /** captured raw generateContent params, useful in specs and diagnostics */
48
+ calls: ProxyGenAIGenerateContentParams[];
49
+ protected readonly fetcher: typeof fetch;
50
+ protected readonly headers: Record<string, string>;
51
+ protected readonly transportId?: string;
52
+ protected readonly transport?: ProxyTransportReceiver;
53
+ constructor(endpoint: string, options?: HttpAbstractGenAIOptions);
54
+ readonly models: {
55
+ generateContent: (params: ProxyGenAIGenerateContentParams) => Promise<ProxyGenAIGenerateContentResponse>;
56
+ };
57
+ protected waitTransport(task: () => Promise<unknown>): Promise<object>;
58
+ protected asEndpoint(): string;
59
+ protected asAgentGenerateBody(params: ProxyGenAIGenerateContentParams): AgentGenerateBody;
60
+ protected withoutSystemInstruction(config?: ProxyGenAIConfig): ProxyGenAIConfig | undefined;
61
+ protected asPrompt(contents: ProxyGenAIContents): AgentGenerateBody['prompt'];
62
+ protected isImageRequest(params: ProxyGenAIGenerateContentParams): boolean | undefined;
63
+ private hasInlineData;
64
+ }
65
+ export {};
@@ -0,0 +1,165 @@
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
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.HttpAbstractGenAI = exports.$gemini = void 0;
24
+ const asDataUrl = (data) => {
25
+ const matched = data.match(/^data:(.*?);base64,(.*)$/);
26
+ return matched ? { mimeType: matched[1] || 'image/png', data: matched[2] || '' } : undefined;
27
+ };
28
+ const onlyDefined = (data) => Object.fromEntries(Object.entries(data).filter(([, value]) => value !== undefined));
29
+ const callFetch = (fetcher, input, init) => fetcher.call(globalThis, input, init);
30
+ exports.$gemini = {
31
+ /**
32
+ * Convert common agents `GenAIResponse` shapes back into Gemini-like
33
+ * `models.generateContent()` response shape.
34
+ */
35
+ asGenerateContentResponse(data) {
36
+ var _a, _b;
37
+ const content = (_a = data === null || data === void 0 ? void 0 : data.output) === null || _a === void 0 ? void 0 : _a.content;
38
+ const dataUrl = content && typeof content === 'object' ? content === null || content === void 0 ? void 0 : content.data : undefined;
39
+ const matched = typeof dataUrl === 'string' ? asDataUrl(dataUrl) : undefined;
40
+ const text = typeof content === 'string' ? content : typeof dataUrl === 'string' && !matched ? dataUrl : '';
41
+ const candidate = (_b = data === null || data === void 0 ? void 0 : data.candidate) !== null && _b !== void 0 ? _b : (matched
42
+ ? {
43
+ content: {
44
+ parts: [
45
+ {
46
+ inlineData: {
47
+ mimeType: matched.mimeType,
48
+ data: matched.data,
49
+ },
50
+ },
51
+ ],
52
+ },
53
+ }
54
+ : text
55
+ ? {
56
+ content: {
57
+ parts: [{ text }],
58
+ },
59
+ }
60
+ : undefined);
61
+ return onlyDefined({
62
+ text,
63
+ candidates: candidate ? [candidate] : undefined,
64
+ usageMetadata: (data === null || data === void 0 ? void 0 : data.usage)
65
+ ? onlyDefined({
66
+ promptTokenCount: data.usage.promptToken,
67
+ thoughtsTokenCount: data.usage.completionToken,
68
+ totalTokenCount: data.usage.totalToken,
69
+ })
70
+ : undefined,
71
+ });
72
+ },
73
+ };
74
+ /**
75
+ * HTTP-backed Gemini-compatible `AbstractGenAI` adapter.
76
+ *
77
+ * It works in server and browser runtimes by relying only on the standard `fetch` API.
78
+ * When `transportId` is configured, HTTP is used only to trigger generation and the
79
+ * final response is collected from the configured transport receiver.
80
+ */
81
+ class HttpAbstractGenAI {
82
+ constructor(endpoint, options = {}) {
83
+ var _a, _b;
84
+ this.endpoint = endpoint;
85
+ /** captured raw generateContent params, useful in specs and diagnostics */
86
+ this.calls = [];
87
+ this.models = {
88
+ generateContent: (params) => __awaiter(this, void 0, void 0, function* () {
89
+ this.calls.push(params);
90
+ const task = () => __awaiter(this, void 0, void 0, function* () {
91
+ const response = yield callFetch(this.fetcher, this.asEndpoint(), {
92
+ method: 'POST',
93
+ headers: Object.assign({ 'content-type': 'application/json' }, this.headers),
94
+ body: JSON.stringify(this.asAgentGenerateBody(params)),
95
+ });
96
+ if (!response.ok) {
97
+ const text = yield response.text().catch(() => '');
98
+ throw new Error(`HTTP ${response.status} ${response.statusText}`.trim() + (text ? ` - ${text}` : ''));
99
+ }
100
+ return response.json();
101
+ });
102
+ const data = this.transportId ? yield this.waitTransport(task) : yield task();
103
+ return exports.$gemini.asGenerateContentResponse(data);
104
+ }),
105
+ };
106
+ //! NOTE: property access (not bare `fetch`) so runtimes w/o global fetch fail at call time, not construction.
107
+ this.fetcher = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch;
108
+ this.headers = (_b = options.headers) !== null && _b !== void 0 ? _b : {};
109
+ this.transportId = options.transportId;
110
+ this.transport = options.transport;
111
+ }
112
+ waitTransport(task) {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ if (!this.transport)
115
+ throw new Error(`@transport is required when transportId is set - HttpAbstractGenAI`);
116
+ return this.transport.wait(this.transportId, task);
117
+ });
118
+ }
119
+ asEndpoint() {
120
+ if (!this.transportId)
121
+ return this.endpoint;
122
+ const url = new URL(this.endpoint, 'http://localhost');
123
+ url.searchParams.set('transportId', this.transportId);
124
+ if (/^https?:\/\//.test(this.endpoint))
125
+ return url.toString();
126
+ return `${url.pathname}${url.search}${url.hash}`;
127
+ }
128
+ asAgentGenerateBody(params) {
129
+ var _a;
130
+ const config = this.withoutSystemInstruction(params.config);
131
+ const system = (_a = params.config) === null || _a === void 0 ? void 0 : _a.systemInstruction;
132
+ return {
133
+ model: params.model,
134
+ prompt: this.asPrompt(params.contents),
135
+ system,
136
+ image: this.isImageRequest(params),
137
+ config,
138
+ };
139
+ }
140
+ withoutSystemInstruction(config) {
141
+ if (!config)
142
+ return undefined;
143
+ const { systemInstruction } = config, rest = __rest(config, ["systemInstruction"]);
144
+ return Object.keys(rest).length > 0 ? rest : undefined;
145
+ }
146
+ asPrompt(contents) {
147
+ if (typeof contents === 'string')
148
+ return contents;
149
+ return { type: 'user', content: contents };
150
+ }
151
+ isImageRequest(params) {
152
+ var _a, _b;
153
+ const modalities = (_b = (_a = params.config) === null || _a === void 0 ? void 0 : _a.responseModalities) !== null && _b !== void 0 ? _b : [];
154
+ const hasImageModality = modalities.some(modality => `${modality}`.toUpperCase() === 'IMAGE');
155
+ const hasInlineImage = this.hasInlineData(params.contents);
156
+ const imageModel = params.model.includes('image') || params.model.includes('imagen');
157
+ return hasImageModality || hasInlineImage || imageModel ? true : undefined;
158
+ }
159
+ hasInlineData(contents) {
160
+ const list = Array.isArray(contents) ? contents : [contents];
161
+ return list.some(content => { var _a; return typeof content !== 'string' && ((_a = content.parts) === null || _a === void 0 ? void 0 : _a.some(part => !!part.inlineData)); });
162
+ }
163
+ }
164
+ exports.HttpAbstractGenAI = HttpAbstractGenAI;
165
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/genai/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `genai/testing.ts`
3
+ * - isolated entry for GenAI proxy test helpers (fetch routing + `/dump` contract mocks).
4
+ * - kept OUT of the package root barrel so production bundles do not include test helpers.
5
+ *
6
+ * Usage (tests / dev only):
7
+ * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/dist/genai/testing';
8
+ *
9
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
10
+ */
11
+ export * from './mocks';
@@ -0,0 +1,28 @@
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
+ * `genai/testing.ts`
19
+ * - isolated entry for GenAI proxy test helpers (fetch routing + `/dump` contract mocks).
20
+ * - kept OUT of the package root barrel so production bundles do not include test helpers.
21
+ *
22
+ * Usage (tests / dev only):
23
+ * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/dist/genai/testing';
24
+ *
25
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
26
+ */
27
+ __exportStar(require("./mocks"), exports);
28
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/genai/testing.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,0CAAwB"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `genai/transport.ts`
3
+ * - JSONTransport-backed receiver for collecting GenAI generate results over `NetworkSupportable`.
4
+ * - the generic WebSocket → `NetworkSupportable` bridge lives in the shared socket core (`../socket/websocket`).
5
+ *
6
+ * @origin eureka-agents-api / src/lib/proxy/transport.ts (receiver parts; the WebSocket bridge was extracted into `../socket/websocket`)
7
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
8
+ */
9
+ import { JSONTransportOptions } from '../socket/transport';
10
+ import { NetworkSupportable } from '../socket/types';
11
+ import { ProxyTransportReceiver } from './types';
12
+ /** options for receiving a single JSONTransport response */
13
+ export interface ProxyTransportReceiverOptions<T extends object = object> {
14
+ timeoutMs?: number;
15
+ jsonTransport?: JSONTransportOptions;
16
+ validate?: (data: T) => boolean;
17
+ }
18
+ /** JSONTransport-backed receiver used by `HttpAbstractGenAI` transport mode */
19
+ export declare class JSONProxyTransportReceiver<T extends object = object> implements ProxyTransportReceiver<T> {
20
+ private readonly network;
21
+ private readonly options;
22
+ private readonly transport;
23
+ private pending?;
24
+ constructor(network: NetworkSupportable, options?: ProxyTransportReceiverOptions<T>);
25
+ /**
26
+ * Run an HTTP trigger task and resolve with the next complete JSONTransport payload.
27
+ *
28
+ * Only one pending wait is supported per receiver instance.
29
+ */
30
+ wait(transportId: string, task: () => Promise<unknown>): Promise<T>;
31
+ /** detach listeners and reject an in-flight wait */
32
+ detach(): void;
33
+ private resolve;
34
+ private reject;
35
+ }
36
+ /** create a receiver that filters raw network packets down to JSONTransport frames */
37
+ export declare const createProxyTransportReceiver: <T extends object = object>(network: NetworkSupportable, options?: ProxyTransportReceiverOptions<T>) => JSONProxyTransportReceiver<T>;
@@ -0,0 +1,136 @@
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.createProxyTransportReceiver = exports.JSONProxyTransportReceiver = void 0;
13
+ /**
14
+ * `genai/transport.ts`
15
+ * - JSONTransport-backed receiver for collecting GenAI generate results over `NetworkSupportable`.
16
+ * - the generic WebSocket → `NetworkSupportable` bridge lives in the shared socket core (`../socket/websocket`).
17
+ *
18
+ * @origin eureka-agents-api / src/lib/proxy/transport.ts (receiver parts; the WebSocket bridge was extracted into `../socket/websocket`)
19
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
20
+ */
21
+ const transport_1 = require("../socket/transport");
22
+ /** JSONTransport-backed receiver used by `HttpAbstractGenAI` transport mode */
23
+ class JSONProxyTransportReceiver {
24
+ constructor(network, options = {}) {
25
+ this.network = network;
26
+ this.options = options;
27
+ this.transport = (0, transport_1.createJSONTransport)(new TransportPacketNetwork(network), options.jsonTransport);
28
+ this.transport.onMessage(data => this.resolve(data));
29
+ this.transport.onError(error => this.reject(error));
30
+ }
31
+ /**
32
+ * Run an HTTP trigger task and resolve with the next complete JSONTransport payload.
33
+ *
34
+ * Only one pending wait is supported per receiver instance.
35
+ */
36
+ wait(transportId, task) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (this.pending)
39
+ throw new Error(`@transport is already waiting - proxy.transport(${transportId})`);
40
+ if (!transportId)
41
+ throw new Error(`@transportId (string) is required - proxy.transport`);
42
+ const promise = new Promise((resolve, reject) => {
43
+ var _a;
44
+ const timeoutMs = (_a = this.options.timeoutMs) !== null && _a !== void 0 ? _a : 30000;
45
+ const timer = timeoutMs > 0
46
+ ? setTimeout(() => {
47
+ this.reject(new Error(`@transport[${transportId}] timeout - proxy.transport`));
48
+ }, timeoutMs)
49
+ : undefined;
50
+ this.pending = { transportId, resolve, reject, timer };
51
+ });
52
+ try {
53
+ yield task();
54
+ }
55
+ catch (e) {
56
+ this.reject(e);
57
+ }
58
+ return promise;
59
+ });
60
+ }
61
+ /** detach listeners and reject an in-flight wait */
62
+ detach() {
63
+ this.reject(new Error(`@transport detached - proxy.transport`));
64
+ this.transport.detach();
65
+ }
66
+ resolve(data) {
67
+ if (!this.pending)
68
+ return;
69
+ if (this.options.validate && !this.options.validate(data))
70
+ return;
71
+ const pending = this.pending;
72
+ this.pending = undefined;
73
+ if (pending.timer)
74
+ clearTimeout(pending.timer);
75
+ pending.resolve(data);
76
+ }
77
+ reject(error) {
78
+ if (!this.pending)
79
+ return;
80
+ const pending = this.pending;
81
+ this.pending = undefined;
82
+ if (pending.timer)
83
+ clearTimeout(pending.timer);
84
+ pending.reject(error);
85
+ }
86
+ }
87
+ exports.JSONProxyTransportReceiver = JSONProxyTransportReceiver;
88
+ /** create a receiver that filters raw network packets down to JSONTransport frames */
89
+ const createProxyTransportReceiver = (network, options) => new JSONProxyTransportReceiver(network, options);
90
+ exports.createProxyTransportReceiver = createProxyTransportReceiver;
91
+ /** network wrapper that lets JSONTransport see only transport packet strings */
92
+ class TransportPacketNetwork {
93
+ constructor(source) {
94
+ this.source = source;
95
+ }
96
+ get readyState() {
97
+ return this.source.readyState;
98
+ }
99
+ ready() {
100
+ var _a, _b, _c;
101
+ return (_c = (_b = (_a = this.source).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
102
+ }
103
+ send(data) {
104
+ this.source.send(data);
105
+ }
106
+ onMessage(handler) {
107
+ return this.source.onMessage(data => {
108
+ if (!isTransportPacketString(data))
109
+ return;
110
+ handler(data);
111
+ });
112
+ }
113
+ configure(options) {
114
+ var _a, _b;
115
+ (_b = (_a = this.source).configure) === null || _b === void 0 ? void 0 : _b.call(_a, options);
116
+ }
117
+ onError(handler) {
118
+ return this.source.onError(handler);
119
+ }
120
+ close() {
121
+ this.source.close();
122
+ }
123
+ }
124
+ const isTransportPacketString = (data) => {
125
+ try {
126
+ const packet = JSON.parse(data);
127
+ return ((packet === null || packet === void 0 ? void 0 : packet.type) === 'json:manifest' ||
128
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:chunk' ||
129
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:complete' ||
130
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:error');
131
+ }
132
+ catch (_a) {
133
+ return false;
134
+ }
135
+ };
136
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/genai/transport.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;GAOG;AACH,mDAAqG;AAyBrG,+EAA+E;AAC/E,MAAa,0BAA0B;IAInC,YACqB,OAA2B,EAC3B,UAA4C,EAAE;QAD9C,YAAO,GAAP,OAAO,CAAoB;QAC3B,YAAO,GAAP,OAAO,CAAuC;QAE/D,IAAI,CAAC,SAAS,GAAG,IAAA,+BAAmB,EAAI,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACpG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACU,IAAI,CAAC,WAAmB,EAAE,IAA4B;;YAC/D,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,WAAW,GAAG,CAAC,CAAC;YACrG,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAEzF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;gBAC/C,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,mCAAI,KAAM,CAAC;gBACnD,MAAM,KAAK,GACP,SAAS,GAAG,CAAC;oBACT,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;wBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,WAAW,6BAA6B,CAAC,CAAC,CAAC;oBACnF,CAAC,EAAE,SAAS,CAAC;oBACf,CAAC,CAAC,SAAS,CAAC;gBACpB,IAAI,CAAC,OAAO,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,IAAI;gBACA,MAAM,IAAI,EAAE,CAAC;aAChB;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAClB;YAED,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;IAED,oDAAoD;IAC7C,MAAM;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAEO,OAAO,CAAC,IAAO;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK;YAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,MAAM,CAAC,KAAU;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,OAAO,CAAC,KAAK;YAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACJ;AAhED,gEAgEC;AAED,sFAAsF;AAC/E,MAAM,4BAA4B,GAAG,CACxC,OAA2B,EAC3B,OAA0C,EACb,EAAE,CAAC,IAAI,0BAA0B,CAAI,OAAO,EAAE,OAAO,CAAC,CAAC;AAH3E,QAAA,4BAA4B,gCAG+C;AAExF,gFAAgF;AAChF,MAAM,sBAAsB;IACxB,YAAoC,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;IAElE,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAClC,CAAC;IAEM,KAAK;;QACR,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,KAAK,kDAAI,mCAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAEM,IAAI,CAAC,IAAY;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,SAAS,CAAC,OAA8B;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,SAAS,CAAC,OAA6B;;QAC1C,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,SAAS,mDAAG,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,OAAO,CAAC,OAA2B;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACJ;AAED,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAW,EAAE;IACtD,IAAI;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiC,CAAC;QAChE,OAAO,CACH,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,eAAe;YAChC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,YAAY;YAC7B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,eAAe;YAChC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,YAAY,CAChC,CAAC;KACL;IAAC,WAAM;QACJ,OAAO,KAAK,CAAC;KAChB;AACL,CAAC,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * `genai/types.ts`
3
+ * - Runtime-neutral Gemini-compatible GenAI proxy surface types for F/B usage.
4
+ *
5
+ * @origin eureka-agents-api / src/lib/proxy/types.ts
6
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
7
+ */
8
+ /** inline binary payload in Gemini-compatible content parts */
9
+ export interface ProxyGenAIInlineData {
10
+ data: string;
11
+ mimeType?: string;
12
+ }
13
+ /** text or inline-data part for a Gemini-compatible content block */
14
+ export interface ProxyGenAIPart {
15
+ text?: string;
16
+ inlineData?: ProxyGenAIInlineData;
17
+ }
18
+ /** Gemini-compatible content block */
19
+ export interface ProxyGenAIContent {
20
+ role?: string;
21
+ parts: ProxyGenAIPart[];
22
+ }
23
+ /** accepted `contents` shapes for proxy generateContent calls */
24
+ export declare type ProxyGenAIContents = string | ProxyGenAIContent | ProxyGenAIContent[];
25
+ /** image generation config subset used by samples/proxy */
26
+ export interface ProxyGenAIImageConfig {
27
+ aspectRatio?: string;
28
+ imageSize?: string;
29
+ }
30
+ /** generation config subset supported by `HttpAbstractGenAI` */
31
+ export interface ProxyGenAIConfig {
32
+ systemInstruction?: string;
33
+ responseMimeType?: string;
34
+ responseSchema?: unknown;
35
+ responseModalities?: unknown[];
36
+ temperature?: number;
37
+ topP?: number;
38
+ imageConfig?: ProxyGenAIImageConfig;
39
+ }
40
+ /** Gemini-compatible generateContent params accepted by the proxy */
41
+ export interface ProxyGenAIGenerateContentParams {
42
+ model: string;
43
+ contents: ProxyGenAIContents;
44
+ config?: ProxyGenAIConfig;
45
+ }
46
+ /** Gemini-compatible candidate response */
47
+ export interface ProxyGenAICandidate {
48
+ content: {
49
+ parts: ProxyGenAIPart[];
50
+ };
51
+ }
52
+ /** Gemini-compatible generateContent response returned by the proxy */
53
+ export interface ProxyGenAIGenerateContentResponse {
54
+ text?: string;
55
+ candidates?: ProxyGenAICandidate[];
56
+ usageMetadata?: {
57
+ promptTokenCount?: number;
58
+ thoughtsTokenCount?: number;
59
+ totalTokenCount?: number;
60
+ };
61
+ }
62
+ /** minimal GenAI interface implemented by `HttpAbstractGenAI` */
63
+ export interface ProxyGenAI {
64
+ models: {
65
+ generateContent(params: ProxyGenAIGenerateContentParams): Promise<ProxyGenAIGenerateContentResponse>;
66
+ };
67
+ }
68
+ /** transport receiver used when HTTP only triggers work and the result arrives elsewhere */
69
+ export interface ProxyTransportReceiver<T extends object = object> {
70
+ wait(transportId: string, task: () => Promise<unknown>): Promise<T>;
71
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * `genai/types.ts`
4
+ * - Runtime-neutral Gemini-compatible GenAI proxy surface types for F/B usage.
5
+ *
6
+ * @origin eureka-agents-api / src/lib/proxy/types.ts
7
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/genai/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
package/dist/index.d.ts CHANGED
@@ -10,3 +10,5 @@
10
10
  */
11
11
  export * from './types';
12
12
  export * from './cores';
13
+ export * from './socket';
14
+ export * from './genai';
package/dist/index.js CHANGED
@@ -26,4 +26,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  */
27
27
  __exportStar(require("./types"), exports);
28
28
  __exportStar(require("./cores"), exports);
29
+ __exportStar(require("./socket"), exports);
30
+ __exportStar(require("./genai"), exports);
29
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,0CAAwB;AACxB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `index.ts`
3
+ * - main index for HTTP/WebSocket GenAI proxy adapters.
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
+ export * from './types';
11
+ export * from './proxy';
12
+ export * from './transport';
@@ -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
+ * `index.ts`
19
+ * - main index for HTTP/WebSocket GenAI proxy adapters.
20
+ *
21
+ * @author Claire <claude@lemoncloud.io>
22
+ * @date 2026-06-08 initial version
23
+ *
24
+ * @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
25
+ */
26
+ __exportStar(require("./types"), exports);
27
+ __exportStar(require("./proxy"), exports);
28
+ __exportStar(require("./transport"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;GAQG;AACH,0CAAwB;AACxB,0CAAwB;AACxB,8CAA4B"}