mcp-hydrocoder-image 1.1.1 → 1.2.1

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 (52) hide show
  1. package/README.md +239 -80
  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/providerResolver.d.ts +4 -0
  24. package/dist/business/providerResolver.d.ts.map +1 -0
  25. package/dist/business/providerResolver.js +45 -0
  26. package/dist/business/providerResolver.js.map +1 -0
  27. package/dist/business/responseBuilder.d.ts +3 -2
  28. package/dist/business/responseBuilder.d.ts.map +1 -1
  29. package/dist/business/responseBuilder.js +69 -48
  30. package/dist/business/responseBuilder.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/server/errorHandler.d.ts.map +1 -1
  34. package/dist/server/errorHandler.js +3 -2
  35. package/dist/server/errorHandler.js.map +1 -1
  36. package/dist/server/mcpServer.d.ts +90 -29
  37. package/dist/server/mcpServer.d.ts.map +1 -1
  38. package/dist/server/mcpServer.js +430 -288
  39. package/dist/server/mcpServer.js.map +1 -1
  40. package/dist/types/mcp.d.ts +62 -15
  41. package/dist/types/mcp.d.ts.map +1 -1
  42. package/dist/types/mcp.js +15 -0
  43. package/dist/types/mcp.js.map +1 -1
  44. package/dist/utils/config.d.ts +6 -2
  45. package/dist/utils/config.d.ts.map +1 -1
  46. package/dist/utils/config.js +43 -13
  47. package/dist/utils/config.js.map +1 -1
  48. package/dist/utils/errors.d.ts +9 -0
  49. package/dist/utils/errors.d.ts.map +1 -1
  50. package/dist/utils/errors.js +50 -1
  51. package/dist/utils/errors.js.map +1 -1
  52. package/package.json +2 -1
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Volcengine Ark image client for Seedream generation via OpenAI-compatible SDK.
3
+ */
4
+ import OpenAI from 'openai';
5
+ import { VOLCENGINE_MODELS as MODELS } from '../types/mcp.js';
6
+ import { Err, Ok } from '../types/result.js';
7
+ import { NetworkError, VolcengineAPIError } from '../utils/errors.js';
8
+ import { Logger } from '../utils/logger.js';
9
+ import { applyProxyFetch } from '../utils/proxyFetch.js';
10
+ const logger = new Logger();
11
+ const MIN_GROUP_IMAGE_PIXELS = 3686400;
12
+ const MAX_IMAGE_PIXELS = 10404496;
13
+ const MAX_DIMENSION = 4096;
14
+ const DIMENSION_ALIGNMENT = 64;
15
+ const DATA_URL_PREFIX_REGEX = /^data:image\/[a-z0-9.+-]+;base64,/i;
16
+ const DEFAULT_VOLCENGINE_ASPECT_RATIO = '16:9';
17
+ const DEFAULT_VOLCENGINE_IMAGE_SIZE = '4K';
18
+ function parseAspectRatio(aspectRatio) {
19
+ if (!aspectRatio) {
20
+ return { width: 1, height: 1 };
21
+ }
22
+ const [width, height] = aspectRatio.split(':').map((value) => parseInt(value, 10));
23
+ if (!width || !height) {
24
+ return { width: 1, height: 1 };
25
+ }
26
+ return { width, height };
27
+ }
28
+ function alignDimensionUp(value) {
29
+ return Math.ceil(value / DIMENSION_ALIGNMENT) * DIMENSION_ALIGNMENT;
30
+ }
31
+ function alignDimensionDown(value) {
32
+ return Math.max(DIMENSION_ALIGNMENT, Math.floor(value / DIMENSION_ALIGNMENT) * DIMENSION_ALIGNMENT);
33
+ }
34
+ function scaleToDimensionLimit(dimensions) {
35
+ const scale = Math.min(1, MAX_DIMENSION / Math.max(dimensions.width, dimensions.height));
36
+ return {
37
+ width: dimensions.width * scale,
38
+ height: dimensions.height * scale,
39
+ };
40
+ }
41
+ function scaleToPixelRange(dimensions) {
42
+ let next = scaleToDimensionLimit(dimensions);
43
+ let pixels = next.width * next.height;
44
+ if (pixels < MIN_GROUP_IMAGE_PIXELS) {
45
+ const scaleUp = Math.sqrt(MIN_GROUP_IMAGE_PIXELS / pixels);
46
+ next = scaleToDimensionLimit({
47
+ width: next.width * scaleUp,
48
+ height: next.height * scaleUp,
49
+ });
50
+ }
51
+ pixels = next.width * next.height;
52
+ if (pixels > MAX_IMAGE_PIXELS) {
53
+ const scaleDown = Math.sqrt(MAX_IMAGE_PIXELS / pixels);
54
+ next = scaleToDimensionLimit({
55
+ width: next.width * scaleDown,
56
+ height: next.height * scaleDown,
57
+ });
58
+ }
59
+ return next;
60
+ }
61
+ function mapImageSizeToVolcengineSize(imageSize, aspectRatio, _outputCount) {
62
+ const baseSizeMap = {
63
+ '1K': 1024,
64
+ '2K': 2048,
65
+ '4K': 4096,
66
+ };
67
+ const effectiveAspectRatio = aspectRatio ?? DEFAULT_VOLCENGINE_ASPECT_RATIO;
68
+ const effectiveImageSize = imageSize ?? DEFAULT_VOLCENGINE_IMAGE_SIZE;
69
+ const { width: ratioWidth, height: ratioHeight } = parseAspectRatio(effectiveAspectRatio);
70
+ const targetEdge = baseSizeMap[effectiveImageSize] ?? baseSizeMap[DEFAULT_VOLCENGINE_IMAGE_SIZE];
71
+ const isLandscape = ratioWidth >= ratioHeight;
72
+ let widthValue = isLandscape ? targetEdge : (targetEdge * ratioWidth) / ratioHeight;
73
+ let heightValue = isLandscape ? (targetEdge * ratioHeight) / ratioWidth : targetEdge;
74
+ const scaled = scaleToPixelRange({ width: widthValue, height: heightValue });
75
+ widthValue = alignDimensionDown(scaled.width);
76
+ heightValue = alignDimensionDown(scaled.height);
77
+ while (widthValue * heightValue < MIN_GROUP_IMAGE_PIXELS) {
78
+ const canGrowWidth = widthValue + DIMENSION_ALIGNMENT <= MAX_DIMENSION;
79
+ const canGrowHeight = heightValue + DIMENSION_ALIGNMENT <= MAX_DIMENSION;
80
+ if (!canGrowWidth && !canGrowHeight) {
81
+ break;
82
+ }
83
+ const widthProgress = widthValue / ratioWidth;
84
+ const heightProgress = heightValue / ratioHeight;
85
+ if ((widthProgress <= heightProgress && canGrowWidth) || !canGrowHeight) {
86
+ widthValue += DIMENSION_ALIGNMENT;
87
+ }
88
+ else {
89
+ heightValue += DIMENSION_ALIGNMENT;
90
+ }
91
+ while (widthValue * heightValue > MAX_IMAGE_PIXELS) {
92
+ if (widthValue >= heightValue && widthValue > DIMENSION_ALIGNMENT) {
93
+ widthValue -= DIMENSION_ALIGNMENT;
94
+ }
95
+ else if (heightValue > DIMENSION_ALIGNMENT) {
96
+ heightValue -= DIMENSION_ALIGNMENT;
97
+ }
98
+ else {
99
+ break;
100
+ }
101
+ }
102
+ }
103
+ while (widthValue * heightValue > MAX_IMAGE_PIXELS) {
104
+ if (widthValue >= heightValue && widthValue > DIMENSION_ALIGNMENT) {
105
+ widthValue -= DIMENSION_ALIGNMENT;
106
+ }
107
+ else if (heightValue > DIMENSION_ALIGNMENT) {
108
+ heightValue -= DIMENSION_ALIGNMENT;
109
+ }
110
+ else {
111
+ break;
112
+ }
113
+ }
114
+ widthValue = alignDimensionUp(widthValue);
115
+ heightValue = alignDimensionUp(heightValue);
116
+ while (widthValue * heightValue > MAX_IMAGE_PIXELS) {
117
+ if (widthValue >= heightValue && widthValue > DIMENSION_ALIGNMENT) {
118
+ widthValue -= DIMENSION_ALIGNMENT;
119
+ }
120
+ else if (heightValue > DIMENSION_ALIGNMENT) {
121
+ heightValue -= DIMENSION_ALIGNMENT;
122
+ }
123
+ else {
124
+ break;
125
+ }
126
+ }
127
+ return `${widthValue}x${heightValue}`;
128
+ }
129
+ async function fetchImageAsBuffer(url, timeout) {
130
+ const controller = new AbortController();
131
+ const timer = setTimeout(() => controller.abort(), timeout);
132
+ try {
133
+ const response = await fetch(url, {
134
+ method: 'GET',
135
+ signal: controller.signal,
136
+ });
137
+ if (!response.ok) {
138
+ throw new Error(`Failed to download generated image: HTTP ${response.status}`);
139
+ }
140
+ const arrayBuffer = await response.arrayBuffer();
141
+ return Buffer.from(arrayBuffer);
142
+ }
143
+ finally {
144
+ clearTimeout(timer);
145
+ }
146
+ }
147
+ function toVolcengineDataUrl(imageData, mimeType = 'image/jpeg') {
148
+ if (DATA_URL_PREFIX_REGEX.test(imageData)) {
149
+ return imageData;
150
+ }
151
+ return `data:${mimeType};base64,${imageData.replace(DATA_URL_PREFIX_REGEX, '')}`;
152
+ }
153
+ class VolcengineClientImpl {
154
+ constructor(client, timeout, model) {
155
+ this.client = client;
156
+ this.timeout = timeout;
157
+ this.model = model;
158
+ }
159
+ async generateImage(params) {
160
+ try {
161
+ await applyProxyFetch();
162
+ const imageValues = params.inputImages?.map((image) => toVolcengineDataUrl(image.data, image.mimeType)) ||
163
+ (params.inputImage
164
+ ? [toVolcengineDataUrl(params.inputImage, params.inputImageMimeType)]
165
+ : undefined);
166
+ const size = mapImageSizeToVolcengineSize(params.imageSize, params.aspectRatio, params.outputCount);
167
+ const responseFormat = params.returnBase64 ? 'b64_json' : 'url';
168
+ const request = {
169
+ model: this.model,
170
+ prompt: params.prompt,
171
+ ...(size && { size }),
172
+ response_format: responseFormat,
173
+ ...(params.outputFormat && { output_format: params.outputFormat }),
174
+ ...(imageValues && { image: imageValues.length === 1 ? imageValues[0] : imageValues }),
175
+ watermark: false,
176
+ ...(params.outputCount && params.outputCount > 1 && {
177
+ sequential_image_generation: 'auto',
178
+ sequential_image_generation_options: { max_images: params.outputCount },
179
+ }),
180
+ };
181
+ logger.info('volcengine-client', 'Prepared image request', {
182
+ model: this.model,
183
+ hasImageInput: Boolean(imageValues?.length),
184
+ imageCount: imageValues?.length ?? 0,
185
+ firstImageLength: imageValues?.[0]?.length ?? 0,
186
+ size,
187
+ responseFormat,
188
+ outputCount: params.outputCount ?? 1,
189
+ });
190
+ const response = (await this.client.images.generate(request));
191
+ const items = response.data || [];
192
+ logger.info('volcengine-client', 'Received image response', {
193
+ itemCount: items.length,
194
+ itemSummaries: items.map((item, index) => ({
195
+ index,
196
+ hasUrl: Boolean(item.url),
197
+ hasBase64: Boolean(item.b64_json),
198
+ size: item.size,
199
+ })),
200
+ firstItemKeys: items[0] ? Object.keys(items[0]) : [],
201
+ });
202
+ const firstItem = items[0];
203
+ if (!firstItem) {
204
+ return Err(new VolcengineAPIError('Volcengine API returned no image data', {
205
+ stage: 'response_validation',
206
+ suggestion: 'Check whether the selected model and grouped generation settings are supported',
207
+ }));
208
+ }
209
+ const images = [];
210
+ for (const item of items) {
211
+ if (item.b64_json) {
212
+ images.push({ imageData: Buffer.from(item.b64_json, 'base64'), mimeType: 'image/png' });
213
+ continue;
214
+ }
215
+ if (item.url) {
216
+ images.push({ imageData: await fetchImageAsBuffer(item.url, this.timeout), mimeType: 'image/png' });
217
+ }
218
+ }
219
+ if (!images.length) {
220
+ return Err(new VolcengineAPIError('Volcengine API response did not contain a usable image field', {
221
+ stage: 'image_extraction',
222
+ responseKeys: Object.keys(firstItem),
223
+ }));
224
+ }
225
+ const metadata = {
226
+ provider: 'volcengine',
227
+ model: this.model,
228
+ prompt: params.prompt,
229
+ mimeType: images[0]?.mimeType || 'image/png',
230
+ timestamp: new Date(),
231
+ inputImageProvided: !!params.inputImage || !!params.inputImages?.length,
232
+ };
233
+ return Ok({
234
+ imageData: images[0].imageData,
235
+ images,
236
+ metadata,
237
+ });
238
+ }
239
+ catch (error) {
240
+ return this.handleError(error);
241
+ }
242
+ }
243
+ handleError(error) {
244
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
245
+ if (this.isNetworkError(error)) {
246
+ return Err(new NetworkError(`Network error during Volcengine image generation: ${errorMessage}`, {
247
+ provider: 'volcengine',
248
+ }));
249
+ }
250
+ return Err(new VolcengineAPIError(`Failed to generate image with Volcengine: ${errorMessage}`, {
251
+ provider: 'volcengine',
252
+ status: this.extractStatusCode(error),
253
+ }));
254
+ }
255
+ isNetworkError(error) {
256
+ if (error instanceof Error) {
257
+ const networkErrorCodes = ['ECONNRESET', 'ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND', 'AbortError'];
258
+ return networkErrorCodes.some((code) => error.message.includes(code) || error.name === code || error.code === code);
259
+ }
260
+ return false;
261
+ }
262
+ extractStatusCode(error) {
263
+ if (error && typeof error === 'object' && 'status' in error) {
264
+ return typeof error.status === 'number'
265
+ ? error.status
266
+ : undefined;
267
+ }
268
+ return undefined;
269
+ }
270
+ }
271
+ export function createVolcengineClient(config) {
272
+ try {
273
+ if (!config.volcengineApiKey) {
274
+ return Err(new VolcengineAPIError('Failed to initialize Volcengine client: VOLCENGINE_API_KEY is missing', 'Set VOLCENGINE_API_KEY to your Volcengine Ark API key'));
275
+ }
276
+ const client = new OpenAI({
277
+ apiKey: config.volcengineApiKey,
278
+ baseURL: config.volcengineApiBaseUrl || 'https://ark.cn-beijing.volces.com/api/v3',
279
+ timeout: config.apiTimeout,
280
+ });
281
+ return Ok(new VolcengineClientImpl(client, config.apiTimeout, config.volcengineModel || MODELS.SEEDREAM_LITE));
282
+ }
283
+ catch (error) {
284
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
285
+ return Err(new VolcengineAPIError(`Failed to initialize Volcengine client: ${errorMessage}`, 'Verify your VOLCENGINE_API_KEY and VOLCENGINE_API_BASE_URL configuration'));
286
+ }
287
+ }
288
+ //# sourceMappingURL=volcengineClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volcengineClient.js","sourceRoot":"","sources":["../../src/api/volcengineClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/business/inputValidator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAe,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAiCzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAanF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,oBAAoB,CAAC,CAuDlD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAyBpC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAuBpC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,oBAAoB,CAAC,CA6BlD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CA2GnD"}
1
+ {"version":3,"file":"inputValidator.d.ts","sourceRoot":"","sources":["../../src/business/inputValidator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAe,mBAAmB,EAAoC,MAAM,iBAAiB,CAAA;AAEzG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAiCzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAanF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,oBAAoB,CAAC,CAuDlD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAyBpC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAuBpC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,oBAAoB,CAAC,CA6BlD;AAkGD;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CA4InD"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { existsSync } from 'node:fs';
6
6
  import { extname } from 'node:path';
7
- import { IMAGE_QUALITY_VALUES } from '../types/mcp.js';
7
+ import { IMAGE_OUTPUT_FORMAT_VALUES, IMAGE_PROVIDER_VALUES, IMAGE_QUALITY_VALUES } from '../types/mcp.js';
8
8
  import { Err, Ok } from '../types/result.js';
9
9
  import { InputValidationError } from '../utils/errors.js';
10
10
  // Constants for validation limits
@@ -142,15 +142,83 @@ export function validateImagePath(imagePath) {
142
142
  }
143
143
  return Ok(imagePath);
144
144
  }
145
+ function validateOutputFormat(outputFormat) {
146
+ if (!outputFormat) {
147
+ return Ok(undefined);
148
+ }
149
+ if (!IMAGE_OUTPUT_FORMAT_VALUES.includes(outputFormat)) {
150
+ return Err(new InputValidationError(`Invalid outputFormat: ${outputFormat}. Supported values: ${IMAGE_OUTPUT_FORMAT_VALUES.join(', ')}`, `Please use one of the supported output formats: ${IMAGE_OUTPUT_FORMAT_VALUES.join(', ')}`));
151
+ }
152
+ return Ok(outputFormat);
153
+ }
154
+ function validateProvider(provider) {
155
+ if (!provider) {
156
+ return Ok(undefined);
157
+ }
158
+ if (!IMAGE_PROVIDER_VALUES.includes(provider)) {
159
+ return Err(new InputValidationError(`Invalid provider: ${provider}. Supported values: ${IMAGE_PROVIDER_VALUES.join(', ')}`, `Please use one of the supported providers: ${IMAGE_PROVIDER_VALUES.join(', ')}`));
160
+ }
161
+ return Ok(provider);
162
+ }
163
+ function validateOutputCount(outputCount) {
164
+ if (outputCount === undefined) {
165
+ return Ok(undefined);
166
+ }
167
+ if (!Number.isInteger(outputCount) || outputCount < 1 || outputCount > 15) {
168
+ return Err(new InputValidationError(`Invalid outputCount: ${outputCount}. Supported range: 1-15`, 'Please use an integer outputCount between 1 and 15'));
169
+ }
170
+ return Ok(outputCount);
171
+ }
172
+ function validateImageRequests(imageRequests) {
173
+ if (imageRequests === undefined) {
174
+ return Ok(undefined);
175
+ }
176
+ if (!Array.isArray(imageRequests) || imageRequests.length === 0) {
177
+ return Err(new InputValidationError('imageRequests must be a non-empty string array', 'Provide imageRequests as an array of per-image prompt strings.'));
178
+ }
179
+ const normalizedRequests = [];
180
+ for (const request of imageRequests) {
181
+ if (typeof request !== 'string') {
182
+ return Err(new InputValidationError('Each imageRequests item must be a string', 'Ensure every imageRequests entry is a text prompt.'));
183
+ }
184
+ const promptResult = validatePrompt(request.trim());
185
+ if (!promptResult.success) {
186
+ return Err(new InputValidationError(`Invalid imageRequests item: ${promptResult.error.message}`, 'Ensure every imageRequests entry is a non-empty prompt shorter than 4000 characters.'));
187
+ }
188
+ normalizedRequests.push(promptResult.data);
189
+ }
190
+ return Ok(normalizedRequests);
191
+ }
145
192
  /**
146
193
  * Validates complete GenerateImageParams object
147
194
  */
148
195
  export function validateGenerateImageParams(params) {
196
+ const providerResult = validateProvider(params.provider);
197
+ if (!providerResult.success) {
198
+ return Err(providerResult.error);
199
+ }
200
+ const outputFormatResult = validateOutputFormat(params.outputFormat);
201
+ if (!outputFormatResult.success) {
202
+ return Err(outputFormatResult.error);
203
+ }
204
+ const outputCountResult = validateOutputCount(params.outputCount);
205
+ if (!outputCountResult.success) {
206
+ return Err(outputCountResult.error);
207
+ }
208
+ const imageRequestsResult = validateImageRequests(params.imageRequests);
209
+ if (!imageRequestsResult.success) {
210
+ return Err(imageRequestsResult.error);
211
+ }
149
212
  // Validate prompt
150
213
  const promptResult = validatePrompt(params.prompt);
151
214
  if (!promptResult.success) {
152
215
  return Err(promptResult.error);
153
216
  }
217
+ if (imageRequestsResult.data &&
218
+ outputCountResult.data !== undefined &&
219
+ outputCountResult.data !== imageRequestsResult.data.length) {
220
+ return Err(new InputValidationError(`outputCount (${outputCountResult.data}) must match imageRequests length (${imageRequestsResult.data.length})`, 'Keep outputCount aligned with imageRequests length, or omit outputCount and let the server infer it.'));
221
+ }
154
222
  // Validate input image path if provided
155
223
  const imagePathResult = validateImagePath(params.inputImagePath);
156
224
  if (!imagePathResult.success) {
@@ -1 +1 @@
1
- {"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/business/inputValidator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzD,kCAAkC;AAClC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAC9B,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,gBAAgB;AACxD,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AAChG,MAAM,uBAAuB,GAA2B;IACtD,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACE,CAAA;AAEV,MAAM,wBAAwB,GAAG,oBAAoB,CAAA;AAErD;;GAEG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC3E,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,0BAA0B,iBAAiB,QAAQ,iBAAiB,gCAAgC,MAAM,CAAC,MAAM,EAAE,EACnH,MAAM,CAAC,MAAM,KAAK,CAAC;YACjB,CAAC,CAAC,2DAA2D;YAC7D,CAAC,CAAC,iCAAiC,MAAM,CAAC,MAAM,GAAG,iBAAiB,cAAc,CACrF,CACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAkB,EAClB,QAAiB;IAEjB,6DAA6D;IAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;IACtB,CAAC;IAED,iCAAiC;IACjC,IAAI,QAAQ,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,0BAA0B,QAAQ,sBAAsB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACzF,yDAAyD,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CACF,CAAA;IACH,CAAC;IAED,6BAA6B;IAC7B,oCAAoC;IACpC,MAAM,WAAW,GAAG,wBAAwB,CAAA;IAC5C,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAA;IAExE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,uBAAuB,EACvB,oDAAoD,CACrD,CACF,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QAE3C,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;YAChD,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,sBAAsB,SAAS,2BAA2B,QAAQ,IAAI,EACtE,qEAAqE,SAAS,IAAI,CACnF,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,+BAA+B,EAC/B,oDAAoD,CACrD,CACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAiD;IAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,qCAAqC,EACrC,qDAAqD,CACtD,CACF,CAAA;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,GAAG;YAAE,SAAQ;QAClB,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,eAAe,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAC5C,MAAM,CAAC,KAAK,CAAC,UAAU,CACxB,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAe;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,yCAAyC,EACzC,6DAA6D,CAC9D,CACF,CAAA;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,mBAAmB,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAChD,MAAM,CAAC,KAAK,CAAC,UAAU,CACxB,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAkB;IAElB,uDAAuD;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;IACtB,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,+BAA+B,SAAS,EAAE,EAC1C,gEAAgE,CACjE,CACF,CAAA;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5C,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,6BAA6B,GAAG,wBAAwB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACxF,yDAAyD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE,CAAC,SAAS,CAAC,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA2B;IAE3B,kBAAkB;IAClB,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,wCAAwC;IACxC,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAChE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAChF,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,qCAAqC,EACrC,oFAAoF,CACrF,CACF,CAAA;IACH,CAAC;IAED,kDAAkD;IAClD,IACE,MAAM,CAAC,4BAA4B,KAAK,SAAS;QACjD,OAAO,MAAM,CAAC,4BAA4B,KAAK,SAAS,EACxD,CAAC;QACD,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,sDAAsD,EACtD,sGAAsG,CACvG,CACF,CAAA;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5F,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,2CAA2C,EAC3C,iGAAiG,CAClG,CACF,CAAA;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,eAAe,GAAG;QACtB,MAAM,CAAC,cAAc;QACrB,MAAM,CAAC,UAAU;QACjB,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,eAAe;KACvB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IACxB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,gHAAgH,EAChH,0IAA0I,CAC3I,CACF,CAAA;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAC7D,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAA;QACrF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAChF,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,yBAAyB,MAAM,CAAC,WAAW,uBAAuB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACtG,kDAAkD,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvF,CACF,CAAA;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvF,OAAO,GAAG,CACR,IAAI,oBAAoB,CACtB,2BAA2B,MAAM,CAAC,OAAO,wBAAwB,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACtG,mDAAmD,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzF,CACF,CAAA;IACH,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"inputValidator.js","sourceRoot":"","sources":["../../src/business/inputValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { GenerateImageParams } from '../types/mcp.js';
2
+ import type { Result } from '../types/result.js';
3
+ import { InputValidationError } from '../utils/errors.js';
4
+ export declare function hasExplicitMultiImageStructure(prompt: string): boolean;
5
+ export declare function inferRequestedImageCount(prompt: string): number | undefined;
6
+ export declare function extractExplicitImageRequests(prompt: string): {
7
+ sharedPrompt?: string;
8
+ imageRequests: string[];
9
+ };
10
+ export declare function buildIndependentImagePrompt(sharedPrompt: string | undefined, imageRequest: string): string;
11
+ export declare function prepareGenerateMultiImageParams(params: GenerateImageParams): Result<GenerateImageParams, InputValidationError>;
12
+ export declare function normalizeMultiImageParams(params: GenerateImageParams): GenerateImageParams;
13
+ //# sourceMappingURL=multiImagePrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiImagePrompt.d.ts","sourceRoot":"","sources":["../../src/business/multiImagePrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAkDzD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqB3E;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAkC/G;AAED,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAQ1G;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAiBnD;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CA8B1F"}
@@ -0,0 +1,135 @@
1
+ import { Err, Ok } from '../types/result.js';
2
+ import { InputValidationError } from '../utils/errors.js';
3
+ const EXPLICIT_MULTI_IMAGE_PATTERNS = [
4
+ /第\s*[0-9一二三四五六七八九十百千]+\s*张/iu,
5
+ /\bimage\s*[1-9]\d*\b/iu,
6
+ /\bshot\s*[1-9]\d*\b/iu,
7
+ /\bvariation\s*[1-9]\d*\b/iu,
8
+ /\b(first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth)\s+image\b/iu,
9
+ ];
10
+ const EXPLICIT_MULTI_IMAGE_SECTION_REGEX = /((?:第[\s ]*[0-9一二三四五六七八九十百千]+[\s ]*(?:张|幅|个)(?:图|图片)?)(?:[\s ]*(?:是|为))?|Image[_\s]*[1-9]\d*(?:\s*\([^)]*\))?(?:\s+(?:is|should\s+be))?|(?:First|Second|Third|Fourth|Fifth|Sixth|Seventh|Eighth|Ninth|Tenth)\s+Image(?:\s+(?:is|should\s+be))?|(?:For\s+)?Image[_\s]*[1-9]\d*\s*,|Shot[_\s]*[1-9]\d*(?:\s+(?:is|should\s+be))?|Variation[_\s]*[1-9]\d*(?:\s+(?:is|should\s+be))?)\s*[::,,;;、]?/giu;
11
+ const CHINESE_NUMBER_MAP = {
12
+ 两: 2,
13
+ 二: 2,
14
+ 三: 3,
15
+ 四: 4,
16
+ 五: 5,
17
+ 六: 6,
18
+ 七: 7,
19
+ 八: 8,
20
+ 九: 9,
21
+ 十: 10,
22
+ 十一: 11,
23
+ 十二: 12,
24
+ 十三: 13,
25
+ 十四: 14,
26
+ 十五: 15,
27
+ };
28
+ function trimNonEmpty(value) {
29
+ return value.trim();
30
+ }
31
+ function buildAutomaticImageRequest(index) {
32
+ return `在满足总体要求的前提下,生成第${index}张独立图片;允许构图、景别、姿态或细节自然变化,但不要输出拼图,也不要缺少图片。`;
33
+ }
34
+ function buildNormalizedMultiImagePrompt(sharedPrompt, imageRequests) {
35
+ const total = imageRequests.length;
36
+ const sections = [
37
+ `总体要求:${sharedPrompt.trim()}`,
38
+ `请一次性生成${total}张彼此独立的图片。必须返回${total}张单独图片,不要合并成拼图,不要只返回1张。`,
39
+ ...imageRequests.map((request, index) => `第${index + 1}张:${request.trim()}`),
40
+ `最终输出要求:严格返回${total}张独立图片,并分别对应第1张到第${total}张的描述。`,
41
+ ];
42
+ return sections.join('\n');
43
+ }
44
+ export function hasExplicitMultiImageStructure(prompt) {
45
+ return EXPLICIT_MULTI_IMAGE_PATTERNS.some((pattern) => pattern.test(prompt));
46
+ }
47
+ export function inferRequestedImageCount(prompt) {
48
+ const arabicMatch = prompt.match(/(?:生成|创建|做|出|给我|提供|返回|输出|一组|组|共|total)?\s*([2-9]|1[0-5])\s*(?:张|幅|个|套)\s*(?:图|图片|图像|海报|产品图)?/iu);
49
+ if (arabicMatch?.[1]) {
50
+ return Number.parseInt(arabicMatch[1], 10);
51
+ }
52
+ const englishMatch = prompt.match(/\b([2-9]|1[0-5])\s*(?:images?|variations?|shots?|posters?|renders?)\b/iu);
53
+ if (englishMatch?.[1]) {
54
+ return Number.parseInt(englishMatch[1], 10);
55
+ }
56
+ const chineseMatch = prompt.match(/(?:生成|创建|做|出|给我|提供|返回|输出|一组|组)?\s*(两|二|三|四|五|六|七|八|九|十|十一|十二|十三|十四|十五)\s*(?:张|幅|个|套)\s*(?:图|图片|图像|海报|产品图)?/iu);
57
+ if (chineseMatch?.[1]) {
58
+ return CHINESE_NUMBER_MAP[chineseMatch[1]];
59
+ }
60
+ return undefined;
61
+ }
62
+ export function extractExplicitImageRequests(prompt) {
63
+ const matches = Array.from(prompt.matchAll(EXPLICIT_MULTI_IMAGE_SECTION_REGEX));
64
+ if (!matches.length) {
65
+ return { imageRequests: [] };
66
+ }
67
+ const imageRequests = [];
68
+ for (let index = 0; index < matches.length; index++) {
69
+ const currentMatch = matches[index];
70
+ if (!currentMatch) {
71
+ continue;
72
+ }
73
+ const nextMatch = matches[index + 1];
74
+ const currentIndex = currentMatch.index;
75
+ if (currentIndex === undefined) {
76
+ continue;
77
+ }
78
+ const segmentStart = currentIndex + currentMatch[0].length;
79
+ const segmentEnd = nextMatch?.index ?? prompt.length;
80
+ const segment = prompt.slice(segmentStart, segmentEnd).trim();
81
+ if (segment) {
82
+ imageRequests.push(segment);
83
+ }
84
+ }
85
+ const firstMatchIndex = matches[0]?.index;
86
+ const sharedPrompt = firstMatchIndex !== undefined ? prompt.slice(0, firstMatchIndex).trim() || undefined : undefined;
87
+ return {
88
+ ...(sharedPrompt ? { sharedPrompt } : {}),
89
+ imageRequests,
90
+ };
91
+ }
92
+ export function buildIndependentImagePrompt(sharedPrompt, imageRequest) {
93
+ const parts = [
94
+ sharedPrompt?.trim(),
95
+ '只生成1张独立图片,不要拼图,不要四宫格,不要在同一画面中合成多张子图。',
96
+ imageRequest.trim(),
97
+ ].filter(Boolean);
98
+ return parts.join('\n\n');
99
+ }
100
+ export function prepareGenerateMultiImageParams(params) {
101
+ const inferredCount = params.outputCount ?? params.imageRequests?.length ?? inferRequestedImageCount(params.prompt);
102
+ if (inferredCount === undefined || inferredCount < 2) {
103
+ return Err(new InputValidationError('generate_multi_image requires a multi-image request with outputCount >= 2, imageRequests, or an explicit image count in the prompt', 'Provide outputCount, imageRequests, or mention an explicit count such as "4张图" or "4 images".'));
104
+ }
105
+ return Ok({
106
+ ...params,
107
+ outputCount: params.outputCount ?? inferredCount,
108
+ });
109
+ }
110
+ export function normalizeMultiImageParams(params) {
111
+ const imageRequests = params.imageRequests?.map(trimNonEmpty).filter(Boolean);
112
+ const requestedCount = imageRequests?.length ?? params.outputCount;
113
+ let prompt = params.prompt;
114
+ let promptWasNormalized = false;
115
+ if (imageRequests?.length) {
116
+ prompt = buildNormalizedMultiImagePrompt(params.prompt, imageRequests);
117
+ promptWasNormalized = true;
118
+ }
119
+ else if (params.outputCount && params.outputCount > 1 && !hasExplicitMultiImageStructure(params.prompt)) {
120
+ prompt = buildNormalizedMultiImagePrompt(params.prompt, Array.from({ length: params.outputCount }, (_, index) => buildAutomaticImageRequest(index + 1)));
121
+ promptWasNormalized = true;
122
+ }
123
+ const shouldPreserveMultiImagePrompt = params.skipPromptEnhancement === undefined &&
124
+ requestedCount !== undefined &&
125
+ requestedCount > 1 &&
126
+ (promptWasNormalized || hasExplicitMultiImageStructure(prompt));
127
+ return {
128
+ ...params,
129
+ prompt,
130
+ ...(imageRequests?.length ? { imageRequests } : {}),
131
+ ...(imageRequests?.length && params.outputCount === undefined ? { outputCount: imageRequests.length } : {}),
132
+ ...(shouldPreserveMultiImagePrompt ? { skipPromptEnhancement: true } : {}),
133
+ };
134
+ }
135
+ //# sourceMappingURL=multiImagePrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiImagePrompt.js","sourceRoot":"","sources":["../../src/business/multiImagePrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ImageProvider } from '../types/mcp.js';
2
+ export declare function inferProviderFromPrompt(prompt: string): ImageProvider | undefined;
3
+ export declare function resolveRequestedProvider(explicitProvider: ImageProvider | undefined, prompt: string, defaultProvider: ImageProvider): ImageProvider;
4
+ //# sourceMappingURL=providerResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerResolver.d.ts","sourceRoot":"","sources":["../../src/business/providerResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAiCpD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAejF;AAED,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,aAAa,GAAG,SAAS,EAC3C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,aAAa,GAC7B,aAAa,CAEf"}