needware-cli 1.2.9 → 1.3.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.
- package/IMAGE_FEATURE_SUMMARY.md +246 -0
- package/README.md +73 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +0 -1
- package/dist/commands/agent.js.map +1 -1
- package/dist/utils/prompt-parser.d.ts +88 -0
- package/dist/utils/prompt-parser.d.ts.map +1 -1
- package/dist/utils/prompt-parser.js +429 -8
- package/dist/utils/prompt-parser.js.map +1 -1
- package/examples/auto-convert-url-to-base64.json +19 -0
- package/examples/image-conversion-example.ts +350 -0
- package/package.json +2 -2
- package/test-multimodal.sh +69 -0
- package/EXAMPLES.md +0 -241
- package/examples/sdk-message-example.json +0 -10
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as path from 'path';
|
|
6
|
+
import * as https from 'https';
|
|
7
|
+
import * as http from 'http';
|
|
6
8
|
/**
|
|
7
9
|
* 解析 Prompt 输入(自动判断类型)
|
|
8
10
|
*
|
|
@@ -29,12 +31,46 @@ export async function parsePrompt(input) {
|
|
|
29
31
|
// 尝试解析为 SDKUserMessage JSON
|
|
30
32
|
if (input.trim().startsWith('{')) {
|
|
31
33
|
try {
|
|
32
|
-
|
|
34
|
+
let data;
|
|
35
|
+
try {
|
|
36
|
+
// 首先尝试直接解析
|
|
37
|
+
data = JSON.parse(input);
|
|
38
|
+
}
|
|
39
|
+
catch (firstError) {
|
|
40
|
+
console.log('First parse failed, trying to unescape...');
|
|
41
|
+
// 如果失败,尝试反转义字符串(处理命令行转义问题)
|
|
42
|
+
// 将 \" 替换为 ",\\ 替换为 \
|
|
43
|
+
const unescaped = input.replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
|
44
|
+
console.log('Unescaped input:', unescaped);
|
|
45
|
+
data = JSON.parse(unescaped);
|
|
46
|
+
// data = await convertImageUrlsToBase64InData(data);
|
|
47
|
+
// console.log('*********1122', JSON.stringify(data, null, 2));
|
|
48
|
+
}
|
|
49
|
+
// 检查是否双重编码(data 是字符串而非对象)
|
|
50
|
+
if (typeof data === 'string') {
|
|
51
|
+
console.log('Detected double-encoded JSON, parsing again...');
|
|
52
|
+
let actualData = JSON.parse(data);
|
|
53
|
+
// 转换图片URL为base64(如果存在)
|
|
54
|
+
// actualData = await convertImageUrlsToBase64InData(actualData);
|
|
55
|
+
if (isSDKUserMessage(actualData)) {
|
|
56
|
+
return parseSDKUserMessage(actualData);
|
|
57
|
+
}
|
|
58
|
+
if (isSimplifiedUserMessage(actualData)) {
|
|
59
|
+
return parseSimplifiedUserMessage(actualData);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
33
62
|
if (isSDKUserMessage(data)) {
|
|
63
|
+
console.log('************888877779999');
|
|
34
64
|
return parseSDKUserMessage(data);
|
|
35
65
|
}
|
|
66
|
+
// 检查是否为简化的用户消息格式
|
|
67
|
+
if (isSimplifiedUserMessage(data)) {
|
|
68
|
+
console.log('************1111112222');
|
|
69
|
+
return parseSimplifiedUserMessage(data);
|
|
70
|
+
}
|
|
36
71
|
}
|
|
37
|
-
catch {
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('JSON parse error:', error);
|
|
38
74
|
// 不是有效的 JSON,继续作为普通字符串处理
|
|
39
75
|
}
|
|
40
76
|
}
|
|
@@ -63,11 +99,16 @@ async function parsePromptFromFile(filePath) {
|
|
|
63
99
|
// 如果是 JSON 文件,尝试解析为 SDKUserMessage
|
|
64
100
|
if (ext === '.json') {
|
|
65
101
|
try {
|
|
66
|
-
|
|
102
|
+
let data = JSON.parse(content);
|
|
103
|
+
// 转换图片URL为base64(如果存在)
|
|
104
|
+
// data = await convertImageUrlsToBase64InData(data);
|
|
67
105
|
if (isSDKUserMessage(data)) {
|
|
68
106
|
return parseSDKUserMessage(data);
|
|
69
107
|
}
|
|
70
|
-
|
|
108
|
+
if (isSimplifiedUserMessage(data)) {
|
|
109
|
+
return parseSimplifiedUserMessage(data);
|
|
110
|
+
}
|
|
111
|
+
throw new Error('JSON file must contain a valid SDKUserMessage object or simplified user message');
|
|
71
112
|
}
|
|
72
113
|
catch (error) {
|
|
73
114
|
throw new Error(`Invalid JSON in prompt file: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
@@ -83,8 +124,20 @@ async function parsePromptFromFile(filePath) {
|
|
|
83
124
|
* 解析 SDKUserMessage
|
|
84
125
|
*/
|
|
85
126
|
function parseSDKUserMessage(data) {
|
|
86
|
-
//
|
|
127
|
+
// 如果 content 包含非文本内容(如图片),使用交互式模式
|
|
87
128
|
const message = data.message;
|
|
129
|
+
const hasMultimodalContent = Array.isArray(message.content) &&
|
|
130
|
+
message.content.some((item) => item.type !== 'text');
|
|
131
|
+
if (hasMultimodalContent) {
|
|
132
|
+
// 创建消息流来支持多模态内容
|
|
133
|
+
const messageStream = createMessageStreamFromSDKMessage(data);
|
|
134
|
+
return {
|
|
135
|
+
prompt: messageStream,
|
|
136
|
+
sessionId: data.session_id,
|
|
137
|
+
isInteractive: true,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// 提取文本内容
|
|
88
141
|
let promptText = '';
|
|
89
142
|
if (typeof message.content === 'string') {
|
|
90
143
|
promptText = message.content;
|
|
@@ -93,7 +146,7 @@ function parseSDKUserMessage(data) {
|
|
|
93
146
|
// 如果 content 是数组,提取文本部分
|
|
94
147
|
promptText = message.content
|
|
95
148
|
.filter((item) => item.type === 'text')
|
|
96
|
-
.map((item) => item.text)
|
|
149
|
+
.map((item) => item.text || '')
|
|
97
150
|
.join('\n');
|
|
98
151
|
}
|
|
99
152
|
return {
|
|
@@ -102,6 +155,31 @@ function parseSDKUserMessage(data) {
|
|
|
102
155
|
isInteractive: false,
|
|
103
156
|
};
|
|
104
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* 解析简化的用户消息格式
|
|
160
|
+
*/
|
|
161
|
+
function parseSimplifiedUserMessage(data) {
|
|
162
|
+
// 将简化格式转换为标准的 SDKUserMessage
|
|
163
|
+
const sessionId = data.session_id || `session-${Date.now()}`;
|
|
164
|
+
const sdkMessage = {
|
|
165
|
+
type: 'user',
|
|
166
|
+
session_id: sessionId,
|
|
167
|
+
message: {
|
|
168
|
+
role: 'user',
|
|
169
|
+
content: data.user.content,
|
|
170
|
+
},
|
|
171
|
+
parent_tool_use_id: null,
|
|
172
|
+
};
|
|
173
|
+
console.log('************1111112222', JSON.stringify(sdkMessage, null, 2));
|
|
174
|
+
// 使用 parseSDKUserMessage 处理转换后的消息
|
|
175
|
+
return parseSDKUserMessage(sdkMessage);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* 从 SDKUserMessage 创建消息流
|
|
179
|
+
*/
|
|
180
|
+
async function* createMessageStreamFromSDKMessage(message) {
|
|
181
|
+
yield message;
|
|
182
|
+
}
|
|
105
183
|
/**
|
|
106
184
|
* 将字符串转换为消息流(用于交互式模式)
|
|
107
185
|
*/
|
|
@@ -119,13 +197,16 @@ export async function* createMessageStream(sessionId, initialPrompt) {
|
|
|
119
197
|
* 类型守卫:检查是否为 AsyncIterable
|
|
120
198
|
*/
|
|
121
199
|
function isAsyncIterable(obj) {
|
|
122
|
-
return obj
|
|
200
|
+
return (obj !== null &&
|
|
201
|
+
obj !== undefined &&
|
|
202
|
+
typeof obj[Symbol.asyncIterator] === 'function');
|
|
123
203
|
}
|
|
124
204
|
/**
|
|
125
205
|
* 类型守卫:检查是否为 SDKUserMessage
|
|
126
206
|
*/
|
|
127
207
|
function isSDKUserMessage(obj) {
|
|
128
|
-
return (obj &&
|
|
208
|
+
return (obj !== null &&
|
|
209
|
+
obj !== undefined &&
|
|
129
210
|
typeof obj === 'object' &&
|
|
130
211
|
'type' in obj &&
|
|
131
212
|
obj.type === 'user' &&
|
|
@@ -134,6 +215,19 @@ function isSDKUserMessage(obj) {
|
|
|
134
215
|
'session_id' in obj &&
|
|
135
216
|
typeof obj.session_id === 'string');
|
|
136
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* 类型守卫:检查是否为简化的用户消息格式(只有 user 字段)
|
|
220
|
+
*/
|
|
221
|
+
function isSimplifiedUserMessage(obj) {
|
|
222
|
+
return (obj !== null &&
|
|
223
|
+
obj !== undefined &&
|
|
224
|
+
typeof obj === 'object' &&
|
|
225
|
+
'user' in obj &&
|
|
226
|
+
obj.user !== null &&
|
|
227
|
+
obj.user !== undefined &&
|
|
228
|
+
typeof obj.user === 'object' &&
|
|
229
|
+
'content' in obj.user);
|
|
230
|
+
}
|
|
137
231
|
/**
|
|
138
232
|
* 从命令行参数解析 Prompt(自动判断类型)
|
|
139
233
|
*/
|
|
@@ -145,4 +239,331 @@ export async function parsePromptFromArgs(args) {
|
|
|
145
239
|
// 使用统一的 parsePrompt 函数,它会自动判断类型
|
|
146
240
|
return parsePrompt(firstArg);
|
|
147
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* 根据文件扩展名获取图片的 MIME 类型
|
|
244
|
+
*/
|
|
245
|
+
function getImageMediaType(filePath) {
|
|
246
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
247
|
+
const mimeTypes = {
|
|
248
|
+
'.jpg': 'image/jpeg',
|
|
249
|
+
'.jpeg': 'image/jpeg',
|
|
250
|
+
'.png': 'image/png',
|
|
251
|
+
'.gif': 'image/gif',
|
|
252
|
+
'.webp': 'image/webp',
|
|
253
|
+
};
|
|
254
|
+
const mediaType = mimeTypes[ext];
|
|
255
|
+
if (!mediaType) {
|
|
256
|
+
throw new Error(`Unsupported image format: ${ext}. Supported formats: jpg, jpeg, png, gif, webp`);
|
|
257
|
+
}
|
|
258
|
+
return mediaType;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* 将图片文件转换为 base64 编码的内容块
|
|
262
|
+
*
|
|
263
|
+
* @param imagePath - 图片文件路径
|
|
264
|
+
* @returns 符合 Anthropic Claude API 格式的图片内容块
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* const imageBlock = await convertImageToBase64('/path/to/image.jpg');
|
|
268
|
+
* // Returns:
|
|
269
|
+
* // {
|
|
270
|
+
* // type: "image",
|
|
271
|
+
* // source: {
|
|
272
|
+
* // type: "base64",
|
|
273
|
+
* // media_type: "image/jpeg",
|
|
274
|
+
* // data: "/9j/4AAQSkZJRgABAQAAAQABAAD..."
|
|
275
|
+
* // }
|
|
276
|
+
* // }
|
|
277
|
+
*/
|
|
278
|
+
export async function convertImageToBase64(imagePath) {
|
|
279
|
+
const resolvedPath = path.resolve(imagePath);
|
|
280
|
+
// 检查文件是否存在
|
|
281
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
282
|
+
throw new Error(`Image file not found: ${resolvedPath}`);
|
|
283
|
+
}
|
|
284
|
+
// 获取 MIME 类型
|
|
285
|
+
const mediaType = getImageMediaType(resolvedPath);
|
|
286
|
+
// 读取文件并转换为 base64
|
|
287
|
+
const imageBuffer = fs.readFileSync(resolvedPath);
|
|
288
|
+
const base64Data = imageBuffer.toString('base64');
|
|
289
|
+
return {
|
|
290
|
+
type: 'image',
|
|
291
|
+
source: {
|
|
292
|
+
type: 'base64',
|
|
293
|
+
media_type: mediaType,
|
|
294
|
+
data: base64Data,
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* 批量转换多个图片文件为 base64 内容块
|
|
300
|
+
*
|
|
301
|
+
* @param imagePaths - 图片文件路径数组
|
|
302
|
+
* @returns 图片内容块数组
|
|
303
|
+
*/
|
|
304
|
+
export async function convertImagesToBase64(imagePaths) {
|
|
305
|
+
const results = [];
|
|
306
|
+
for (const imagePath of imagePaths) {
|
|
307
|
+
try {
|
|
308
|
+
const imageBlock = await convertImageToBase64(imagePath);
|
|
309
|
+
results.push(imageBlock);
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
console.error(`Failed to convert image ${imagePath}:`, error);
|
|
313
|
+
throw error;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return results;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* 检查文件是否为支持的图片格式
|
|
320
|
+
*/
|
|
321
|
+
export function isImageFile(filePath) {
|
|
322
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
323
|
+
return ['.jpg', '.jpeg', '.png', '.gif', '.webp'].includes(ext);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* 检查字符串是否为URL
|
|
327
|
+
*/
|
|
328
|
+
function isURL(str) {
|
|
329
|
+
try {
|
|
330
|
+
const url = new URL(str);
|
|
331
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* 转换数据中的图片URL为base64格式
|
|
339
|
+
* 支持 SDKUserMessage 和简化的用户消息格式
|
|
340
|
+
*/
|
|
341
|
+
async function convertImageUrlsToBase64InData(data) {
|
|
342
|
+
if (!data || typeof data !== 'object') {
|
|
343
|
+
return data;
|
|
344
|
+
}
|
|
345
|
+
// 深拷贝以避免修改原始数据
|
|
346
|
+
const result = JSON.parse(JSON.stringify(data));
|
|
347
|
+
try {
|
|
348
|
+
// 处理 SDKUserMessage 格式: { message: { content: [...] } }
|
|
349
|
+
if (result.message && result.message.content) {
|
|
350
|
+
result.message.content = await convertImageUrlsInContent(result.message.content);
|
|
351
|
+
}
|
|
352
|
+
// 处理简化格式: { user: { content: [...] } }
|
|
353
|
+
else if (result.user && result.user.content) {
|
|
354
|
+
result.user.content = await convertImageUrlsInContent(result.user.content);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
console.error('Failed to convert image URLs to base64:', error);
|
|
359
|
+
// 转换失败时返回原始数据
|
|
360
|
+
return data;
|
|
361
|
+
}
|
|
362
|
+
return result;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* 转换 content 数组中的图片URL为base64
|
|
366
|
+
*/
|
|
367
|
+
async function convertImageUrlsInContent(content) {
|
|
368
|
+
if (typeof content === 'string') {
|
|
369
|
+
return content;
|
|
370
|
+
}
|
|
371
|
+
if (!Array.isArray(content)) {
|
|
372
|
+
return content;
|
|
373
|
+
}
|
|
374
|
+
const convertedContent = [];
|
|
375
|
+
for (const item of content) {
|
|
376
|
+
if (!item || typeof item !== 'object') {
|
|
377
|
+
convertedContent.push(item);
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
// 检查是否是需要转换的图片项
|
|
381
|
+
if (item.type === 'image' &&
|
|
382
|
+
item.source &&
|
|
383
|
+
item.source.type === 'url' &&
|
|
384
|
+
item.source.url) {
|
|
385
|
+
try {
|
|
386
|
+
console.log(`Converting image URL to base64: ${item.source.url}`);
|
|
387
|
+
// 下载并转换图片
|
|
388
|
+
const imageBlock = await convertRemoteImageToBase64(item.source.url);
|
|
389
|
+
console.log(`Successfully converted image to base64 (${imageBlock.source.data.length} chars)`);
|
|
390
|
+
convertedContent.push(imageBlock);
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
console.error(`Failed to convert image URL ${item.source.url}:`, error);
|
|
394
|
+
// 转换失败时保留原始格式
|
|
395
|
+
convertedContent.push(item);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// 不是需要转换的图片项,保持原样
|
|
400
|
+
convertedContent.push(item);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return convertedContent;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* 从URL下载图片数据
|
|
407
|
+
*
|
|
408
|
+
* @param imageUrl - 图片的URL地址
|
|
409
|
+
* @returns Promise<Buffer> 图片的二进制数据
|
|
410
|
+
*/
|
|
411
|
+
function downloadImage(imageUrl) {
|
|
412
|
+
return new Promise((resolve, reject) => {
|
|
413
|
+
const url = new URL(imageUrl);
|
|
414
|
+
const protocol = url.protocol === 'https:' ? https : http;
|
|
415
|
+
protocol
|
|
416
|
+
.get(imageUrl, (response) => {
|
|
417
|
+
// 处理重定向
|
|
418
|
+
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
419
|
+
const redirectUrl = response.headers.location;
|
|
420
|
+
if (redirectUrl) {
|
|
421
|
+
downloadImage(redirectUrl).then(resolve).catch(reject);
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
// 检查响应状态
|
|
426
|
+
if (response.statusCode !== 200) {
|
|
427
|
+
reject(new Error(`Failed to download image: HTTP ${response.statusCode}`));
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const chunks = [];
|
|
431
|
+
response.on('data', (chunk) => {
|
|
432
|
+
chunks.push(chunk);
|
|
433
|
+
});
|
|
434
|
+
response.on('end', () => {
|
|
435
|
+
resolve(Buffer.concat(chunks));
|
|
436
|
+
});
|
|
437
|
+
response.on('error', (error) => {
|
|
438
|
+
reject(error);
|
|
439
|
+
});
|
|
440
|
+
})
|
|
441
|
+
.on('error', (error) => {
|
|
442
|
+
reject(error);
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* 根据URL或文件扩展名获取图片的MIME类型
|
|
448
|
+
*/
|
|
449
|
+
function getImageMediaTypeFromUrl(url) {
|
|
450
|
+
const urlPath = new URL(url).pathname;
|
|
451
|
+
const ext = path.extname(urlPath).toLowerCase();
|
|
452
|
+
const mimeTypes = {
|
|
453
|
+
'.jpg': 'image/jpeg',
|
|
454
|
+
'.jpeg': 'image/jpeg',
|
|
455
|
+
'.png': 'image/png',
|
|
456
|
+
'.gif': 'image/gif',
|
|
457
|
+
'.webp': 'image/webp',
|
|
458
|
+
};
|
|
459
|
+
const mediaType = mimeTypes[ext];
|
|
460
|
+
if (!mediaType) {
|
|
461
|
+
// 默认返回 jpeg,如果无法确定
|
|
462
|
+
return 'image/jpeg';
|
|
463
|
+
}
|
|
464
|
+
return mediaType;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* 从远程URL下载图片并转换为base64编码的内容块
|
|
468
|
+
*
|
|
469
|
+
* @param imageUrl - 图片的URL地址
|
|
470
|
+
* @returns 符合 Anthropic Claude API 格式的图片内容块
|
|
471
|
+
*
|
|
472
|
+
* @example
|
|
473
|
+
* const imageBlock = await convertRemoteImageToBase64('https://example.com/photo.jpg');
|
|
474
|
+
* // Returns:
|
|
475
|
+
* // {
|
|
476
|
+
* // type: "image",
|
|
477
|
+
* // source: {
|
|
478
|
+
* // type: "base64",
|
|
479
|
+
* // media_type: "image/jpeg",
|
|
480
|
+
* // data: "/9j/4AAQSkZJRgABAQAAAQABAAD..."
|
|
481
|
+
* // }
|
|
482
|
+
* // }
|
|
483
|
+
*/
|
|
484
|
+
export async function convertRemoteImageToBase64(imageUrl) {
|
|
485
|
+
if (!isURL(imageUrl)) {
|
|
486
|
+
throw new Error(`Invalid URL: ${imageUrl}`);
|
|
487
|
+
}
|
|
488
|
+
try {
|
|
489
|
+
// 下载图片
|
|
490
|
+
const imageBuffer = await downloadImage(imageUrl);
|
|
491
|
+
// 获取MIME类型
|
|
492
|
+
const mediaType = getImageMediaTypeFromUrl(imageUrl);
|
|
493
|
+
// 转换为base64
|
|
494
|
+
const base64Data = imageBuffer.toString('base64');
|
|
495
|
+
return {
|
|
496
|
+
type: 'image',
|
|
497
|
+
source: {
|
|
498
|
+
type: 'base64',
|
|
499
|
+
media_type: mediaType,
|
|
500
|
+
data: base64Data,
|
|
501
|
+
},
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
catch (error) {
|
|
505
|
+
throw new Error(`Failed to convert remote image: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* 批量转换远程图片URL为base64内容块
|
|
510
|
+
*
|
|
511
|
+
* @param imageUrls - 图片URL数组
|
|
512
|
+
* @returns 图片内容块数组
|
|
513
|
+
*/
|
|
514
|
+
export async function convertRemoteImagesToBase64(imageUrls) {
|
|
515
|
+
const results = [];
|
|
516
|
+
for (const imageUrl of imageUrls) {
|
|
517
|
+
try {
|
|
518
|
+
const imageBlock = await convertRemoteImageToBase64(imageUrl);
|
|
519
|
+
results.push(imageBlock);
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
console.error(`Failed to convert remote image ${imageUrl}:`, error);
|
|
523
|
+
throw error;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return results;
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* 智能转换图片(自动检测本地文件或远程URL)
|
|
530
|
+
*
|
|
531
|
+
* @param imagePath - 图片的本地路径或远程URL
|
|
532
|
+
* @returns 符合 Anthropic Claude API 格式的图片内容块
|
|
533
|
+
*
|
|
534
|
+
* @example
|
|
535
|
+
* // 本地文件
|
|
536
|
+
* const local = await convertImageToBase64Smart('./photo.jpg');
|
|
537
|
+
*
|
|
538
|
+
* // 远程URL
|
|
539
|
+
* const remote = await convertImageToBase64Smart('https://example.com/photo.jpg');
|
|
540
|
+
*/
|
|
541
|
+
export async function convertImageToBase64Smart(imagePath) {
|
|
542
|
+
if (isURL(imagePath)) {
|
|
543
|
+
return convertRemoteImageToBase64(imagePath);
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
return convertImageToBase64(imagePath);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* 批量智能转换图片(自动检测本地文件或远程URL)
|
|
551
|
+
*
|
|
552
|
+
* @param imagePaths - 图片路径或URL数组(可混合)
|
|
553
|
+
* @returns 图片内容块数组
|
|
554
|
+
*/
|
|
555
|
+
export async function convertImagesToBase64Smart(imagePaths) {
|
|
556
|
+
const results = [];
|
|
557
|
+
for (const imagePath of imagePaths) {
|
|
558
|
+
try {
|
|
559
|
+
const imageBlock = await convertImageToBase64Smart(imagePath);
|
|
560
|
+
results.push(imageBlock);
|
|
561
|
+
}
|
|
562
|
+
catch (error) {
|
|
563
|
+
console.error(`Failed to convert image ${imagePath}:`, error);
|
|
564
|
+
throw error;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
return results;
|
|
568
|
+
}
|
|
148
569
|
//# sourceMappingURL=prompt-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-parser.js","sourceRoot":"","sources":["../../src/utils/prompt-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prompt-parser.js","sourceRoot":"","sources":["../../src/utils/prompt-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"user": {
|
|
3
|
+
"content": [
|
|
4
|
+
{
|
|
5
|
+
"type": "text",
|
|
6
|
+
"text": "根据图片一比一还原应用"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"type": "image",
|
|
10
|
+
"source": {
|
|
11
|
+
"type": "url",
|
|
12
|
+
"url": "https://7axlbrrfp5dibdsm.public.blob.vercel-storage.com/0402ebdc-c13a-4983-b092-b849aee4006d-%25E6%2588%25AA%25E5%25B1%258F2025-10-28%252014.47.01.png"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|