mcp-hydrocoder-image 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 (48) hide show
  1. package/README.md +153 -29
  2. package/dist/api/geminiClient.d.ts +3 -30
  3. package/dist/api/geminiClient.d.ts.map +1 -1
  4. package/dist/api/geminiClient.js +13 -57
  5. package/dist/api/geminiClient.js.map +1 -1
  6. package/dist/api/geminiTextClient.js +1 -1
  7. package/dist/api/geminiTextClient.js.map +1 -1
  8. package/dist/api/imageProvider.d.ts +29 -0
  9. package/dist/api/imageProvider.d.ts.map +1 -0
  10. package/dist/api/imageProvider.js +5 -0
  11. package/dist/api/imageProvider.js.map +1 -0
  12. package/dist/api/volcengineClient.d.ts +13 -0
  13. package/dist/api/volcengineClient.d.ts.map +1 -0
  14. package/dist/api/volcengineClient.js +288 -0
  15. package/dist/api/volcengineClient.js.map +1 -0
  16. package/dist/business/inputValidator.d.ts.map +1 -1
  17. package/dist/business/inputValidator.js +69 -1
  18. package/dist/business/inputValidator.js.map +1 -1
  19. package/dist/business/multiImagePrompt.d.ts +13 -0
  20. package/dist/business/multiImagePrompt.d.ts.map +1 -0
  21. package/dist/business/multiImagePrompt.js +135 -0
  22. package/dist/business/multiImagePrompt.js.map +1 -0
  23. package/dist/business/responseBuilder.d.ts +3 -2
  24. package/dist/business/responseBuilder.d.ts.map +1 -1
  25. package/dist/business/responseBuilder.js +69 -48
  26. package/dist/business/responseBuilder.js.map +1 -1
  27. package/dist/index.d.ts +1 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/server/errorHandler.d.ts.map +1 -1
  30. package/dist/server/errorHandler.js +3 -2
  31. package/dist/server/errorHandler.js.map +1 -1
  32. package/dist/server/mcpServer.d.ts +90 -29
  33. package/dist/server/mcpServer.d.ts.map +1 -1
  34. package/dist/server/mcpServer.js +429 -288
  35. package/dist/server/mcpServer.js.map +1 -1
  36. package/dist/types/mcp.d.ts +62 -15
  37. package/dist/types/mcp.d.ts.map +1 -1
  38. package/dist/types/mcp.js +15 -0
  39. package/dist/types/mcp.js.map +1 -1
  40. package/dist/utils/config.d.ts +6 -2
  41. package/dist/utils/config.d.ts.map +1 -1
  42. package/dist/utils/config.js +39 -14
  43. package/dist/utils/config.js.map +1 -1
  44. package/dist/utils/errors.d.ts +9 -0
  45. package/dist/utils/errors.d.ts.map +1 -1
  46. package/dist/utils/errors.js +50 -1
  47. package/dist/utils/errors.js.map +1 -1
  48. package/package.json +2 -1
package/README.md CHANGED
@@ -36,6 +36,8 @@ The prompt optimizer uses a **Subject–Context–Style** framework (powered by
36
36
 
37
37
  ## Features
38
38
 
39
+ - **Multi-Provider Support**: Use either Google Gemini or Volcengine Seedream behind the same MCP server, with provider selection via config or per-request override.
40
+ - **Dedicated Multi-Image Tooling**: Use `generate_image` for single-image work and `generate_multi_image` for grouped multi-image output with server-side fan-out and prompt normalization.
39
41
  - **Built-in Prompt Optimization**: Your simple prompt is automatically enriched with photographic and artistic details — lighting, composition, atmosphere — using Gemini 2.5 Flash. No prompt engineering skills required.
40
42
  - **Three Quality Tiers**: Choose between fast iteration, balanced quality, or maximum fidelity with Nano Banana 2 (Gemini 3.1 Flash Image) and Nano Banana Pro (Gemini 3 Pro Image). [See Quality Presets](#quality-presets).
41
43
  - **Image Editing**: Transform existing images with natural language instructions (image-to-image) while preserving original style and visual consistency.
@@ -90,15 +92,19 @@ npx mcp-hydrocoder-image skills install --path ~/.claude/skills
90
92
  ## Prerequisites
91
93
 
92
94
  - **Node.js** 20 or higher
93
- - **Gemini API Key** - Get yours at [Google AI Studio](https://aistudio.google.com/apikey)
95
+ - **API Key**
96
+ - Gemini: get yours at [Google AI Studio](https://aistudio.google.com/apikey)
97
+ - Volcengine: create an Ark API key in the Volcengine console
94
98
  - An MCP-compatible AI tool: **Cursor**, **Claude Code**, **Codex**, or others
95
99
  - Basic terminal/command line knowledge
96
100
 
97
101
  ## Quick Start
98
102
 
99
- ### 1. Get Your Gemini API Key
103
+ ### 1. Get Your API Key
100
104
 
101
- Get your API key from [Google AI Studio](https://aistudio.google.com/apikey)
105
+ Choose a provider and create an API key:
106
+ - **Gemini**: [Google AI Studio](https://aistudio.google.com/apikey)
107
+ - **Volcengine**: Volcengine Ark console (`ARK_API_KEY`-compatible key)
102
108
 
103
109
  ### 2. MCP Configuration
104
110
 
@@ -112,8 +118,10 @@ command = "npx"
112
118
  args = ["-y", "mcp-hydrocoder-image"]
113
119
 
114
120
  [mcp_servers.mcp-hydrocoder-image.env]
121
+ IMAGE_PROVIDER = "gemini"
115
122
  GEMINI_API_KEY = "your_gemini_api_key_here"
116
123
  IMAGE_OUTPUT_DIR = "/absolute/path/to/images"
124
+ API_TIMEOUT = "120000" # Optional: timeout in milliseconds (default: 120s)
117
125
  ```
118
126
 
119
127
  #### For Cursor
@@ -130,8 +138,10 @@ Add to your Cursor settings:
130
138
  "command": "npx",
131
139
  "args": ["-y", "mcp-hydrocoder-image"],
132
140
  "env": {
141
+ "IMAGE_PROVIDER": "gemini",
133
142
  "GEMINI_API_KEY": "your_gemini_api_key_here",
134
- "IMAGE_OUTPUT_DIR": "/absolute/path/to/images"
143
+ "IMAGE_OUTPUT_DIR": "/absolute/path/to/images",
144
+ "API_TIMEOUT": "120000"
135
145
  }
136
146
  }
137
147
  }
@@ -146,8 +156,10 @@ Add to your Cursor settings:
146
156
  "command": "npx",
147
157
  "args": ["-y", "mcp-hydrocoder-image"],
148
158
  "env": {
159
+ "IMAGE_PROVIDER": "gemini",
149
160
  "GEMINI_API_KEY": "your_gemini_api_key_here",
150
- "IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images"
161
+ "IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images",
162
+ "API_TIMEOUT": "120000"
151
163
  }
152
164
  }
153
165
  }
@@ -160,13 +172,23 @@ Run in your project directory to enable for that project:
160
172
 
161
173
  ```bash
162
174
  cd /path/to/your/project
163
- claude mcp add mcp-hydrocoder-image --env GEMINI_API_KEY=your-api-key --env IMAGE_OUTPUT_DIR=/absolute/path/to/images -- npx -y mcp-hydrocoder-image
175
+ claude mcp add mcp-hydrocoder-image \
176
+ --env IMAGE_PROVIDER=gemini \
177
+ --env GEMINI_API_KEY=your-api-key \
178
+ --env IMAGE_OUTPUT_DIR=/absolute/path/to/images \
179
+ --env API_TIMEOUT=120000 \
180
+ -- npx -y mcp-hydrocoder-image
164
181
  ```
165
182
 
166
183
  Or add globally for all projects:
167
184
 
168
185
  ```bash
169
- claude mcp add mcp-hydrocoder-image --scope user --env GEMINI_API_KEY=your-api-key --env IMAGE_OUTPUT_DIR=/absolute/path/to/images -- npx -y mcp-hydrocoder-image
186
+ claude mcp add mcp-hydrocoder-image --scope user \
187
+ --env IMAGE_PROVIDER=gemini \
188
+ --env GEMINI_API_KEY=your-api-key \
189
+ --env IMAGE_OUTPUT_DIR=/absolute/path/to/images \
190
+ --env API_TIMEOUT=120000 \
191
+ -- npx -y mcp-hydrocoder-image
170
192
  ```
171
193
 
172
194
  Or add via JSON config (`~/.claude/settings.json` for global, `.mcp.json` for project):
@@ -179,8 +201,10 @@ Or add via JSON config (`~/.claude/settings.json` for global, `.mcp.json` for pr
179
201
  "command": "npx",
180
202
  "args": ["-y", "mcp-hydrocoder-image"],
181
203
  "env": {
204
+ "IMAGE_PROVIDER": "gemini",
182
205
  "GEMINI_API_KEY": "your_gemini_api_key_here",
183
- "IMAGE_OUTPUT_DIR": "/absolute/path/to/images"
206
+ "IMAGE_OUTPUT_DIR": "/absolute/path/to/images",
207
+ "API_TIMEOUT": "120000"
184
208
  }
185
209
  }
186
210
  }
@@ -195,8 +219,10 @@ Or add via JSON config (`~/.claude/settings.json` for global, `.mcp.json` for pr
195
219
  "command": "npx",
196
220
  "args": ["-y", "mcp-hydrocoder-image"],
197
221
  "env": {
222
+ "IMAGE_PROVIDER": "gemini",
198
223
  "GEMINI_API_KEY": "your_gemini_api_key_here",
199
- "IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images"
224
+ "IMAGE_OUTPUT_DIR": "C:\\absolute\\path\\to\\images",
225
+ "API_TIMEOUT": "120000"
200
226
  }
201
227
  }
202
228
  }
@@ -250,7 +276,48 @@ IMAGE_OUTPUT_DIR = "/absolute/path/to/images"
250
276
 
251
277
  > **Note**: The base URL should be the root domain (e.g., `https://llm.myseek.fun`), without the `/v1` suffix — the SDK will append the API version automatically.
252
278
 
253
- ## Quality Presets
279
+ ### Volcengine Example
280
+
281
+ To use Volcengine Seedream as the default backend, switch provider and set a Volcengine API key.
282
+
283
+ Current implementation status for Volcengine in this repo:
284
+ - Stable path: text-to-image
285
+ - Reference-image workflows are wired through the OpenAI-compatible image API using the `image` field
286
+ - Base64 image inputs are normalized to the official Volcengine format: `data:image/<format>;base64,<Base64编码>`
287
+ - Grouped output (`outputCount`) is best-effort and depends on provider-side behavior
288
+ - If the user does not specify `aspectRatio` or `imageSize`, Gemini and Volcengine default to `16:9` and `4K`
289
+ - If the user specifies `aspectRatio` and/or `imageSize`, the server automatically normalizes the final `WxH` into Volcengine's legal pixel range
290
+ - When the user provides local image paths, they should be passed through `inputImagePath` / `inputImagePaths` instead of being summarized into the prompt
291
+
292
+ **Claude Code:**
293
+ ```bash
294
+ claude mcp add mcp-hydrocoder-image \
295
+ --env IMAGE_PROVIDER=volcengine \
296
+ --env VOLCENGINE_API_KEY=your-volcengine-api-key \
297
+ --env VOLCENGINE_API_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 \
298
+ --env IMAGE_OUTPUT_DIR=/absolute/path/to/images \
299
+ -- npx -y mcp-hydrocoder-image
300
+ ```
301
+
302
+ **Cursor / JSON config:**
303
+ ```json
304
+ {
305
+ "mcpServers": {
306
+ "mcp-hydrocoder-image": {
307
+ "command": "npx",
308
+ "args": ["-y", "mcp-hydrocoder-image"],
309
+ "env": {
310
+ "IMAGE_PROVIDER": "volcengine",
311
+ "VOLCENGINE_API_KEY": "your_volcengine_api_key_here",
312
+ "VOLCENGINE_MODEL": "doubao-seedream-4-5-251128",
313
+ "VOLCENGINE_API_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
314
+ "IMAGE_OUTPUT_DIR": "/absolute/path/to/images"
315
+ }
316
+ }
317
+ }
318
+ }
319
+ ```
320
+
254
321
 
255
322
  Choose the right balance of speed, quality, and cost:
256
323
 
@@ -317,7 +384,7 @@ Your prompt is automatically enhanced with rich details about lighting, material
317
384
  (with inputImagePath: "/path/to/image.jpg")
318
385
  ```
319
386
 
320
- ### Advanced Features
387
+ ### Advanced Features
321
388
 
322
389
  **Character Consistency:**
323
390
  ```
@@ -331,41 +398,98 @@ Your prompt is automatically enhanced with rich details about lighting, material
331
398
  (with imageSize: "4K")
332
399
  ```
333
400
 
334
- **Custom Aspect Ratio:**
335
- ```
336
- "Generate a cinematic landscape of a desert at golden hour"
337
- (with aspectRatio: "21:9")
338
- ```
339
-
340
- ## API Reference
341
-
342
- ### `generate_image` Tool
401
+ **Custom Aspect Ratio:**
402
+ ```
403
+ "Generate a cinematic landscape of a desert at golden hour"
404
+ (with aspectRatio: "21:9")
405
+ ```
406
+
407
+ ### Grouped Multi-Image Generation
408
+
409
+ For a grouped multi-image task, prefer `generate_multi_image` instead of repeating `generate_image`.
410
+
411
+ **Natural-language grouped request:**
412
+ ```text
413
+ "Use generate_multi_image to create 4 unified e-commerce product images of the same minimalist white thermos cup: hero shot, side-detail shot, handheld lifestyle shot, and desk scene. Return 4 separate images in one run."
414
+ ```
415
+
416
+ **Structured grouped request with inferred numbering:**
417
+ ```json
418
+ {
419
+ "prompt": "同一款极简白色保温杯,整体风格统一,高级感、干净、真实、适合品牌官网和详情页使用。",
420
+ "outputCount": 4,
421
+ "provider": "volcengine"
422
+ }
423
+ ```
424
+
425
+ **Structured grouped request with explicit per-image prompts:**
426
+ ```json
427
+ {
428
+ "prompt": "同一款极简白色保温杯,整体风格统一,高级感、干净、真实、适合品牌官网和详情页使用。",
429
+ "provider": "volcengine",
430
+ "imageRequests": [
431
+ "电商主图,白底,正面展示产品",
432
+ "侧面细节图,突出杯盖和材质纹理",
433
+ "手持使用场景图,突出尺寸感",
434
+ "办公桌场景图,氛围高级"
435
+ ]
436
+ }
437
+ ```
438
+
439
+ ## API Reference
440
+
441
+ ### `generate_image` Tool
343
442
 
344
443
  The server uses a two-stage process with separate models for each stage:
345
444
  1. **Prompt Optimization** (Gemini 2.5 Flash): Refines your prompt using the Subject–Context–Style framework. Skippable via `SKIP_PROMPT_ENHANCEMENT`.
346
- 2. **Image Generation** (Nano Banana 2 or Pro): Creates the final image. Model varies by quality preset.
445
+ 2. **Image Generation** (Nano Banana 2 or Pro): Creates the final image. Model varies by quality preset.
446
+
447
+ Use `generate_image` as the default tool for single-image generation and image editing. If the user wants multiple images in one grouped request, prefer `generate_multi_image`.
347
448
 
348
449
  #### Parameters
349
450
 
350
451
  | Parameter | Type | Required | Description |
351
452
  |-----------|------|----------|-------------|
352
453
  | `prompt` | string | Yes | Text description or editing instruction |
454
+ | `provider` | string | - | Optional provider override: `gemini` or `volcengine`. Defaults to `IMAGE_PROVIDER` |
353
455
  | `quality` | string | - | Quality preset: `fast` (default), `balanced`, `quality`. Overrides `IMAGE_QUALITY` env var for this request |
354
- | `inputImagePath` | string | - | Absolute path to input image for image-to-image editing |
355
- | `inputImage` | string | - | Base64 encoded image data for image-to-image editing. Alternative to `inputImagePath` |
356
- | `inputImageMimeType` | string | - | MIME type of the input image (`image/jpeg`, `image/png`, `image/webp`, `image/gif`, `image/bmp`). Used with `inputImage` |
357
- | `inputImages` | array | - | Multiple input images for multi-image composition. Each item: `{ data: string, mimeType: string }`. Cannot be used with `inputImage`/`inputImagePath`/`inputImagePaths` |
358
- | `inputImagePaths` | array | - | Multiple input image file paths for multi-image composition. Each item is an absolute path string. Cannot be used with other image input params |
456
+ | `outputFormat` | string | - | Output image format if supported by the provider. Some provider endpoints may ignore or reject format overrides |
457
+ | `outputCount` | integer | - | Backward-compatible grouped output count for `generate_image`. For new multi-image requests, prefer `generate_multi_image` |
458
+ | `inputImagePath` | string | - | Absolute path to input image for image-to-image editing. Supported by Gemini and by Volcengine reference-image workflows |
459
+ | `inputImage` | string | - | Base64 encoded image data for image-to-image editing. Gemini accepts raw base64; Volcengine sends it as `data:image/<format>;base64,<data>` and uses `inputImageMimeType` to build the official request format |
460
+ | `inputImageMimeType` | string | - | MIME type of the input image (`image/jpeg`, `image/png`, `image/webp`, `image/gif`, `image/bmp`). Required for correct Volcengine Data URL formatting when `inputImage` is provided |
461
+ | `inputImages` | array | - | Multiple input images for multi-image composition. Each item uses `{ data, mimeType }`; Volcengine converts them to `data:image/<format>;base64,<data>` entries in the `image` array |
462
+ | `inputImagePaths` | array | - | Multiple input image file paths for multi-image composition. Supported by Gemini and by Volcengine when mapped to reference-image arrays |
359
463
  | `returnBase64` | boolean | - | Return the generated image as base64 data in the response. Image is always saved to disk regardless |
360
464
  | `fileName` | string | - | Custom filename for output (auto-generated if not specified). Extension is auto-appended based on output format if omitted |
361
465
  | `skipPromptEnhancement` | boolean | - | Skip prompt enhancement and use the prompt as-is. Recommended for multi-image blending. Overrides `SKIP_PROMPT_ENHANCEMENT` env var. Default: `false` |
362
- | `aspectRatio` | string | - | `1:1` (default), `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9`, `1:4`, `1:8`, `4:1`, `8:1` |
363
- | `imageSize` | string | - | `1K`, `2K`, `4K`. Leave unspecified for standard quality |
466
+ | `aspectRatio` | string | - | `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9`, `1:4`, `1:8`, `4:1`, `8:1`. When omitted, Gemini and Volcengine default to `16:9` |
467
+ | `imageRequests` | array | - | Backward-compatible per-image prompts for `generate_image`. For new grouped multi-image requests, prefer `generate_multi_image` |
468
+ | `imageSize` | string | - | `1K`, `2K`, `4K`. When omitted, Gemini and Volcengine default to `4K`. Volcengine further normalizes the final `WxH` into the provider legal pixel range |
364
469
  | `blendImages` | boolean | - | Enable multi-image blending for combining multiple visual elements naturally |
365
470
  | `maintainCharacterConsistency` | boolean | - | Maintain character appearance consistency across different poses and scenes |
366
471
  | `useWorldKnowledge` | boolean | - | Use real-world knowledge for accurate context (historical figures, landmarks, factual scenarios) |
367
472
  | `useGoogleSearch` | boolean | - | Enable Google Search grounding for real-time factual accuracy |
368
- | `purpose` | string | - | Intended use (e.g., "cookbook cover", "social media post"). Helps tailor visual style and details |
473
+ | `purpose` | string | - | Intended use (e.g., "cookbook cover", "social media post"). Helps tailor visual style and details |
474
+
475
+ ### `generate_multi_image` Tool
476
+
477
+ Use `generate_multi_image` for grouped multi-image generation in a single tool call. This is the preferred entry for Notebook planners that might otherwise split one user request into multiple `generate_image` calls.
478
+
479
+ #### Recommended patterns
480
+
481
+ - Use `outputCount` when the user wants multiple images with shared overall constraints.
482
+ - Use `imageRequests` when the user wants several distinct images in one grouped request.
483
+ - If `outputCount` is omitted, the server will try to infer it from phrases such as `4张图`, `四张海报`, or `4 images`.
484
+
485
+ #### Example
486
+
487
+ ```json
488
+ {
489
+ "prompt": "请生成4张统一风格的电商产品图,主题都是同一款极简白色保温杯,分别覆盖主图、侧面细节、手持使用场景、办公桌场景。要求返回4张独立图片,不要拆成多次生成。",
490
+ "provider": "volcengine"
491
+ }
492
+ ```
369
493
 
370
494
  #### Response
371
495
 
@@ -3,22 +3,10 @@
3
3
  * Integrates with Google's Gemini AI API using the official SDK
4
4
  * Supports automatic URL Context processing and feature parameters
5
5
  */
6
- import type { ImageQuality } from '../types/mcp.js';
6
+ import type { GeneratedImageResult, ImageProviderClient } from './imageProvider.js';
7
7
  import type { Result } from '../types/result.js';
8
8
  import type { Config } from '../utils/config.js';
9
9
  import { GeminiAPIError, NetworkError } from '../utils/errors.js';
10
- /**
11
- * Metadata for generated images
12
- */
13
- export interface GeminiGenerationMetadata {
14
- model: string;
15
- prompt: string;
16
- mimeType: string;
17
- timestamp: Date;
18
- inputImageProvided: boolean;
19
- modelVersion?: string;
20
- responseId?: string;
21
- }
22
10
  /**
23
11
  * Parameters for Gemini API image generation
24
12
  */
@@ -33,25 +21,10 @@ export interface GeminiApiParams {
33
21
  aspectRatio?: string;
34
22
  imageSize?: string;
35
23
  useGoogleSearch?: boolean;
36
- quality?: ImageQuality;
24
+ quality?: 'fast' | 'balanced' | 'quality';
37
25
  }
38
- /**
39
- * Result of image generation
40
- */
41
- export interface GeneratedImageResult {
42
- imageData: Buffer;
43
- metadata: GeminiGenerationMetadata;
44
- }
45
- /**
46
- * Gemini API client interface
47
- */
48
- export interface GeminiClient {
26
+ export interface GeminiClient extends ImageProviderClient {
49
27
  generateImage(params: GeminiApiParams): Promise<Result<GeneratedImageResult, GeminiAPIError | NetworkError>>;
50
28
  }
51
- /**
52
- * Creates a new Gemini API client
53
- * @param config Configuration containing API key and other settings
54
- * @returns Result containing the client or an error
55
- */
56
29
  export declare function createGeminiClient(config: Config): Result<GeminiClient, GeminiAPIError>;
57
30
  //# sourceMappingURL=geminiClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAuHjE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,IAAI,CAAA;IACf,kBAAkB,EAAE,OAAO,CAAA;IAE3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,wBAAwB,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,CACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,CAAA;CACxE;AA6VD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAmDvF"}
1
+ {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAA0B,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE3G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAkHjE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAC1C;AAED,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,aAAa,CACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,CAAA;CACxE;AA6TD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAiDvF"}
@@ -8,9 +8,6 @@ import { GEMINI_MODELS } from '../types/mcp.js';
8
8
  import { Err, Ok } from '../types/result.js';
9
9
  import { GeminiAPIError, NetworkError } from '../utils/errors.js';
10
10
  import { applyProxyFetch } from '../utils/proxyFetch.js';
11
- /**
12
- * Safely analyze response structure for debugging (removes sensitive data)
13
- */
14
11
  function analyzeResponseStructure(obj) {
15
12
  if (!obj || typeof obj !== 'object') {
16
13
  return { type: typeof obj, value: obj };
@@ -21,10 +18,11 @@ function analyzeResponseStructure(obj) {
21
18
  return '[max depth]';
22
19
  if (value === null || value === undefined)
23
20
  return value;
24
- if (typeof value !== 'object')
21
+ if (typeof value !== 'object') {
25
22
  return typeof value === 'string' && value.length > 100
26
23
  ? `[string length: ${value.length}]`
27
24
  : value;
25
+ }
28
26
  if (seen.has(value))
29
27
  return '[circular]';
30
28
  seen.add(value);
@@ -34,12 +32,10 @@ function analyzeResponseStructure(obj) {
34
32
  const record = value;
35
33
  const result = {};
36
34
  for (const [key, val] of Object.entries(record)) {
37
- // Skip sensitive keys
38
35
  if (/apikey|token|secret|password|credential/i.test(key)) {
39
36
  result[key] = '[REDACTED]';
40
37
  }
41
38
  else if (key === 'data' && typeof val === 'string' && val.length > 100) {
42
- // Likely base64 image data
43
39
  result[key] = `[base64 data, length: ${val.length}]`;
44
40
  }
45
41
  else {
@@ -50,24 +46,18 @@ function analyzeResponseStructure(obj) {
50
46
  };
51
47
  return sanitize(obj);
52
48
  }
53
- /**
54
- * Type guard for Gemini response validation
55
- */
56
49
  function isGeminiResponse(obj) {
57
50
  if (!obj || typeof obj !== 'object')
58
51
  return false;
59
52
  const response = obj;
60
- // Check if it has response property (wrapped response)
61
53
  if ('response' in response && response['response'] && typeof response['response'] === 'object') {
62
54
  const innerResponse = response['response'];
63
55
  return 'candidates' in innerResponse && Array.isArray(innerResponse['candidates']);
64
56
  }
65
- // Check direct candidates property (direct response)
66
57
  return 'candidates' in response && Array.isArray(response['candidates']);
67
58
  }
68
- /**
69
- * Implementation of Gemini API client
70
- */
59
+ const DEFAULT_GEMINI_ASPECT_RATIO = '16:9';
60
+ const DEFAULT_GEMINI_IMAGE_SIZE = '4K';
71
61
  class GeminiClientImpl {
72
62
  constructor(genai, defaultQuality = 'fast') {
73
63
  this.genai = genai;
@@ -75,12 +65,8 @@ class GeminiClientImpl {
75
65
  }
76
66
  async generateImage(params) {
77
67
  try {
78
- // Prepare the request content with proper structure for multimodal input
79
68
  const requestContent = [];
80
- // Structure the contents properly for image generation/editing
81
- // Priority: inputImages > inputImage > text-only
82
69
  if (params.inputImages && params.inputImages.length > 0) {
83
- // For multi-image: multiple inlineData parts + text
84
70
  const parts = params.inputImages.map((img) => ({
85
71
  inlineData: {
86
72
  data: img.data,
@@ -91,7 +77,6 @@ class GeminiClientImpl {
91
77
  requestContent.push({ parts });
92
78
  }
93
79
  else if (params.inputImage) {
94
- // For image editing: provide image first, then text instructions
95
80
  requestContent.push({
96
81
  parts: [
97
82
  {
@@ -107,7 +92,6 @@ class GeminiClientImpl {
107
92
  });
108
93
  }
109
94
  else {
110
- // For text-to-image: provide only text prompt
111
95
  requestContent.push({
112
96
  parts: [
113
97
  {
@@ -116,38 +100,27 @@ class GeminiClientImpl {
116
100
  ],
117
101
  });
118
102
  }
119
- // Determine effective quality
120
103
  const effectiveQuality = params.quality ?? this.defaultQuality;
121
- // Select model based on quality preset
122
104
  const modelName = effectiveQuality === 'quality' ? GEMINI_MODELS.PRO : GEMINI_MODELS.FLASH;
123
- // Construct config object for generateContent
124
- const imageConfig = {};
125
- if (params.aspectRatio) {
126
- imageConfig['aspectRatio'] = params.aspectRatio;
127
- }
128
- if (params.imageSize) {
129
- imageConfig['imageSize'] = params.imageSize;
130
- }
131
- // Build config with optional thinkingConfig
105
+ const imageConfig = {
106
+ aspectRatio: params.aspectRatio ?? DEFAULT_GEMINI_ASPECT_RATIO,
107
+ imageSize: params.imageSize ?? DEFAULT_GEMINI_IMAGE_SIZE,
108
+ };
132
109
  const thinkingConfig = effectiveQuality === 'balanced' ? { thinkingConfig: { thinkingLevel: 'high' } } : {};
133
110
  const config = {
134
- ...(Object.keys(imageConfig).length > 0 && { imageConfig }),
111
+ imageConfig,
135
112
  responseModalities: ['IMAGE'],
136
113
  ...thinkingConfig,
137
114
  };
138
- // Construct tools array for Google Search grounding
139
115
  const tools = params.useGoogleSearch ? [{ googleSearch: {} }] : undefined;
140
- // Generate content using Gemini API
141
116
  const rawResponse = await this.genai.models.generateContent({
142
117
  model: modelName,
143
118
  contents: requestContent,
144
119
  config,
145
120
  ...(tools && { tools }),
146
121
  });
147
- // Validate response structure with type guard
148
122
  if (!isGeminiResponse(rawResponse)) {
149
123
  const responseStructure = analyzeResponseStructure(rawResponse);
150
- // Check if it's an error response from Gemini
151
124
  const asRecord = rawResponse;
152
125
  if (asRecord['error']) {
153
126
  const error = asRecord['error'];
@@ -160,16 +133,14 @@ class GeminiClientImpl {
160
133
  }
161
134
  return Err(new GeminiAPIError('Invalid response structure from Gemini API', {
162
135
  message: 'The API returned an unexpected response format',
163
- responseStructure: responseStructure,
136
+ responseStructure,
164
137
  stage: 'response_validation',
165
138
  suggestion: 'Check if the API endpoint or model configuration is correct',
166
139
  }));
167
140
  }
168
- // Extract the actual response data (handle wrapped responses)
169
141
  const responseData = rawResponse['response']
170
142
  ? rawResponse['response']
171
143
  : rawResponse;
172
- // Check for prompt feedback (safety blocking)
173
144
  const responseAsRecord = responseData;
174
145
  if (responseAsRecord['promptFeedback']) {
175
146
  const promptFeedback = responseAsRecord['promptFeedback'];
@@ -189,7 +160,6 @@ class GeminiClientImpl {
189
160
  }));
190
161
  }
191
162
  }
192
- // Check for candidates
193
163
  if (!responseData.candidates || responseData.candidates.length === 0) {
194
164
  return Err(new GeminiAPIError('No image generated: Content may have been filtered', {
195
165
  stage: 'generation',
@@ -205,7 +175,6 @@ class GeminiClientImpl {
205
175
  }));
206
176
  }
207
177
  const parts = candidate.content.parts;
208
- // Handle finish reason specific errors before checking parts
209
178
  if (candidate.finishReason) {
210
179
  const finishReason = candidate.finishReason;
211
180
  if (finishReason === 'IMAGE_SAFETY') {
@@ -241,11 +210,9 @@ class GeminiClientImpl {
241
210
  suggestion: 'The generation was incomplete. Please try again',
242
211
  }));
243
212
  }
244
- // Check if we got an image or text (error message)
245
213
  const imagePart = parts.find((part) => part.inlineData?.data);
246
214
  const textPart = parts.find((part) => part.text);
247
215
  if (!imagePart?.inlineData) {
248
- // If there's text, it's likely an error message from Gemini
249
216
  const errorMessage = textPart?.text || 'Image generation failed';
250
217
  return Err(new GeminiAPIError('Image generation failed due to content filtering', {
251
218
  reason: errorMessage,
@@ -253,11 +220,10 @@ class GeminiClientImpl {
253
220
  suggestion: 'The prompt was blocked by safety filters. Try rephrasing your prompt to avoid potentially sensitive content.',
254
221
  }));
255
222
  }
256
- // Convert base64 image data to Buffer
257
223
  const imageBuffer = Buffer.from(imagePart.inlineData.data, 'base64');
258
224
  const mimeType = imagePart.inlineData.mimeType || 'image/png';
259
- // Create metadata
260
225
  const metadata = {
226
+ provider: 'gemini',
261
227
  model: modelName,
262
228
  prompt: params.prompt,
263
229
  mimeType,
@@ -277,15 +243,12 @@ class GeminiClientImpl {
277
243
  }
278
244
  handleError(error, prompt) {
279
245
  const errorMessage = error instanceof Error ? error.message : 'Unknown error';
280
- // Check if it's a network error
281
246
  if (this.isNetworkError(error)) {
282
247
  return Err(new NetworkError(`Network error during image generation: ${errorMessage}`, 'Check your internet connection and try again', error instanceof Error ? error : undefined));
283
248
  }
284
- // Check if it's an API-specific error
285
249
  if (this.isAPIError(error)) {
286
250
  return Err(new GeminiAPIError(`Failed to generate image: ${errorMessage}`, this.getAPIErrorSuggestion(errorMessage), this.extractStatusCode(error)));
287
251
  }
288
- // Generic API error
289
252
  return Err(new GeminiAPIError(`Failed to generate image with prompt "${prompt}": ${errorMessage}`, 'Check your API key, quota, and prompt validity. Try again with a different prompt'));
290
253
  }
291
254
  isNetworkError(error) {
@@ -322,16 +285,10 @@ class GeminiClientImpl {
322
285
  return undefined;
323
286
  }
324
287
  }
325
- /**
326
- * Creates a new Gemini API client
327
- * @param config Configuration containing API key and other settings
328
- * @returns Result containing the client or an error
329
- */
330
288
  export function createGeminiClient(config) {
331
289
  try {
332
290
  const createClient = async () => {
333
291
  await applyProxyFetch();
334
- // Build httpOptions with optional baseUrl
335
292
  const httpOptions = {};
336
293
  if (config.geminiApiBaseUrl) {
337
294
  httpOptions.baseUrl = config.geminiApiBaseUrl;
@@ -340,11 +297,10 @@ export function createGeminiClient(config) {
340
297
  httpOptions.timeout = config.apiTimeout;
341
298
  }
342
299
  return new GoogleGenAI({
343
- apiKey: config.geminiApiKey,
344
- ...(Object.keys(httpOptions).length > 0 && { httpOptions })
300
+ apiKey: config.geminiApiKey || '',
301
+ ...(Object.keys(httpOptions).length > 0 && { httpOptions }),
345
302
  });
346
303
  };
347
- // Create client synchronously with lazy proxy initialization
348
304
  let genaiInstance = null;
349
305
  const genaiProxy = new Proxy({}, {
350
306
  get(_target, prop) {
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/api/geminiClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAmDxD,SAAS,wBAAwB,CAAC,GAAY;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAA;IAE1B,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC,EAAW,EAAE;QACtD,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,aAAa,CAAA;QAEnC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;gBACpD,CAAC,CAAC,mBAAmB,KAAK,CAAC,MAAM,GAAG;gBACpC,CAAC,CAAC,KAAK,CAAA;QACX,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAA;QACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,MAAM,MAAM,GAA4B,EAAE,CAAA;QAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,IAAI,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAA;YAC5B,CAAC;iBAAM,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACzE,MAAM,CAAC,GAAG,CAAC,GAAG,yBAAyB,GAAG,CAAC,MAAM,GAAG,CAAA;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,OAAO,QAAQ,CAAC,GAAG,CAA4B,CAAA;AACjD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACjD,MAAM,QAAQ,GAAG,GAA8B,CAAA;IAE/C,IAAI,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/F,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAA4B,CAAA;QACrE,OAAO,YAAY,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAA;IACpF,CAAC;IAED,OAAO,YAAY,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAA;AAC1E,CAAC;AAMD,MAAM,2BAA2B,GAAG,MAAM,CAAA;AAC1C,MAAM,yBAAyB,GAAG,IAAI,CAAA;AAsBtC,MAAM,gBAAgB;IACpB,YACmB,KAA2B,EAC3B,iBAAkD,MAAM;QADxD,UAAK,GAAL,KAAK,CAAsB;QAC3B,mBAAc,GAAd,cAAc,CAA0C;IACxE,CAAC;IAEJ,KAAK,CAAC,aAAa,CACjB,MAAuB;QAEvB,IAAI,CAAC;YACH,MAAM,cAAc,GAAc,EAAE,CAAA;YAEpC,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAc,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACxD,UAAU,EAAE;wBACV,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB;iBACF,CAAC,CAAC,CAAA;gBACH,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;gBACnC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7B,cAAc,CAAC,IAAI,CAAC;oBAClB,KAAK,EAAE;wBACL;4BACE,UAAU,EAAE;gCACV,IAAI,EAAE,MAAM,CAAC,UAAU;gCACvB,QAAQ,EAAE,MAAM,CAAC,kBAAkB,IAAI,YAAY;6BACpD;yBACF;wBACD;4BACE,IAAI,EAAE,MAAM,CAAC,MAAM;yBACpB;qBACF;iBACF,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC;oBAClB,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,MAAM,CAAC,MAAM;yBACpB;qBACF;iBACF,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAA;YAC9D,MAAM,SAAS,GAAG,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAA;YAE1F,MAAM,WAAW,GAA2B;gBAC1C,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,2BAA2B;gBAC9D,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,yBAAyB;aACzD,CAAA;YAED,MAAM,cAAc,GAClB,gBAAgB,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAEtF,MAAM,MAAM,GAAG;gBACb,WAAW;gBACX,kBAAkB,EAAE,CAAC,OAAO,CAAC;gBAC7B,GAAG,cAAc;aAClB,CAAA;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAEzE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;gBAC1D,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,cAAc;gBACxB,MAAM;gBACN,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;aACxB,CAAC,CAAA;YAEF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;gBAC/D,MAAM,QAAQ,GAAG,WAAsC,CAAA;gBACvD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAA4B,CAAA;oBAC1D,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,qBAAqB,KAAK,CAAC,SAAS,CAAC,IAAI,eAAe,EAAE,EAAE;wBAC7E,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;wBACnB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;wBACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,iBAAiB;wBAC9C,KAAK,EAAE,WAAW;qBACnB,CAAC,CACH,CAAA;gBACH,CAAC;gBAED,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,4CAA4C,EAAE;oBAC/D,OAAO,EAAE,gDAAgD;oBACzD,iBAAiB;oBACjB,KAAK,EAAE,qBAAqB;oBAC5B,UAAU,EAAE,6DAA6D;iBAC1E,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,YAAY,GAAI,WAAuC,CAAC,UAAU,CAAC;gBACvE,CAAC,CAAG,WAAuC,CAAC,UAAU,CAAoB;gBAC1E,CAAC,CAAE,WAA8B,CAAA;YAEnC,MAAM,gBAAgB,GAAG,YAAuC,CAAA;YAChE,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvC,MAAM,cAAc,GAAG,gBAAgB,CAAC,gBAAgB,CAA4B,CAAA;gBACpF,IAAI,cAAc,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC/C,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,6CAA6C,EAAE;wBAChE,KAAK,EAAE,iBAAiB;wBACxB,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC;wBAC1C,UAAU,EAAE,6DAA6D;qBAC1E,CAAC,CACH,CAAA;gBACH,CAAC;gBACD,IACE,cAAc,CAAC,aAAa,CAAC,KAAK,OAAO;oBACzC,cAAc,CAAC,aAAa,CAAC,KAAK,oBAAoB,EACtD,CAAC;oBACD,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,oDAAoD,EAAE;wBACvE,KAAK,EAAE,iBAAiB;wBACxB,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC;wBAC1C,UAAU,EAAE,8DAA8D;qBAC3E,CAAC,CACH,CAAA;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrE,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,oDAAoD,EAAE;oBACvE,KAAK,EAAE,YAAY;oBACnB,eAAe,EAAE,CAAC;oBAClB,UAAU,EAAE,mEAAmE;iBAChF,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YAC5C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACjE,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,8BAA8B,EAAE;oBACjD,KAAK,EAAE,sBAAsB;oBAC7B,UAAU,EAAE,mDAAmD;iBAChE,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAA;YAErC,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC3B,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAA;gBAE3C,IAAI,YAAY,KAAK,cAAc,EAAE,CAAC;oBACpC,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,6CAA6C,EAAE;wBAChE,YAAY;wBACZ,KAAK,EAAE,oBAAoB;wBAC3B,UAAU,EAAE,2DAA2D;wBACvE,aAAa,EAAG,SAAqC,CAAC,eAAe,CAAC;4BACpE,CAAC,CACI,SAAqC,CAAC,eAAe,CAIvD;gCACC,EAAE,GAAG,CAAC,CAAC,MAA+B,EAAE,EAAE;gCACxC,MAAM,QAAQ,GAAI,MAAM,CAAC,UAAU,CAAY;qCAC5C,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;qCAC7B,KAAK,CAAC,GAAG,CAAC;qCACV,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;qCACnE,IAAI,CAAC,GAAG,CAAC,CAAA;gCACZ,OAAO,GAAG,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,CAAA;4BACrE,CAAC,CAAC;iCACD,IAAI,CAAC,IAAI,CAAC;4BACf,CAAC,CAAC,SAAS;qBACd,CAAC,CACH,CAAA;gBACH,CAAC;gBAED,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;oBAClC,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,+CAA+C,EAAE;wBAClE,YAAY;wBACZ,KAAK,EAAE,oBAAoB;wBAC3B,UAAU,EAAE,uCAAuC;qBACpD,CAAC,CACH,CAAA;gBACH,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,8BAA8B,EAAE;oBACjD,KAAK,EAAE,oBAAoB;oBAC3B,UAAU,EAAE,iDAAiD;iBAC9D,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEhD,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC;gBAC3B,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,IAAI,yBAAyB,CAAA;gBAEhE,OAAO,GAAG,CACR,IAAI,cAAc,CAAC,kDAAkD,EAAE;oBACrE,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,kBAAkB;oBACzB,UAAU,EACR,8GAA8G;iBACjH,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACpE,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,IAAI,WAAW,CAAA;YAE7D,MAAM,QAAQ,GAA2B;gBACvC,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClG,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC;gBAC7E,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;aACxE,CAAA;YAED,OAAO,EAAE,CAAC;gBACR,SAAS,EAAE,WAAW;gBACtB,QAAQ;aACT,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAEO,WAAW,CACjB,KAAc,EACd,MAAc;QAEd,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;QAE7E,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,GAAG,CACR,IAAI,YAAY,CACd,0CAA0C,YAAY,EAAE,EACxD,8CAA8C,EAC9C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CACF,CAAA;QACH,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,CACR,IAAI,cAAc,CAChB,6BAA6B,YAAY,EAAE,EAC3C,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,EACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B,CACF,CAAA;QACH,CAAC;QAED,OAAO,GAAG,CACR,IAAI,cAAc,CAChB,yCAAyC,MAAM,MAAM,YAAY,EAAE,EACnE,mFAAmF,CACpF,CACF,CAAA;IACH,CAAC;IAEO,cAAc,CAAC,KAAc;QACnC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;YAClF,OAAO,iBAAiB,CAAC,IAAI,CAC3B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAK,KAAuB,CAAC,IAAI,KAAK,IAAI,CACjF,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,UAAU,CAAC,KAAc;QAC/B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;YACxF,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;QAC1F,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,qBAAqB,CAAC,YAAoB;QAChD,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;QAE/C,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1E,OAAO,uGAAuG,CAAA;QAChH,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9E,OAAO,2EAA2E,CAAA;QACpF,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO,0DAA0D,CAAA;QACnE,CAAC;QAED,OAAO,4CAA4C,CAAA;IACrD,CAAC;IAEO,iBAAiB,CAAC,KAAc;QACtC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC5D,OAAO,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;QACpE,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,MAAM,eAAe,EAAE,CAAA;YAEvB,MAAM,WAAW,GAA2C,EAAE,CAAA;YAC9D,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAA;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAA;YACzC,CAAC;YAED,OAAO,IAAI,WAAW,CAAC;gBACrB,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;gBACjC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;aAC5D,CAAoC,CAAA;QACvC,CAAC,CAAA;QAED,IAAI,aAAa,GAAgC,IAAI,CAAA;QACrD,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,EAA0B,EAAE;YACvD,GAAG,CAAC,OAAO,EAAE,IAAI;gBACf,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,OAAO,IAAI,KAAK,CAAC,EAAoC,EAAE;wBACrD,GAAG,CAAC,EAAE,EAAE,MAAM;4BACZ,OAAO,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;gCAClC,IAAI,CAAC,aAAa,EAAE,CAAC;oCACnB,aAAa,GAAG,MAAM,YAAY,EAAE,CAAA;gCACtC,CAAC;gCACD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAsD,CAAA;gCACnF,OAAO,MAAM,CAAC,MAAgB,CAAE,CAAC,GAAG,IAAI,CAAC,CAAA;4BAC3C,CAAC,CAAA;wBACH,CAAC;qBACF,CAAC,CAAA;gBACJ,CAAC;gBACD,OAAO,SAAS,CAAA;YAClB,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,EAAE,CAAC,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;QAC7E,OAAO,GAAG,CACR,IAAI,cAAc,CAChB,uCAAuC,YAAY,EAAE,EACrD,yFAAyF,CAC1F,CACF,CAAA;IACH,CAAC;AACH,CAAC"}