luma-mcp 1.2.0 → 1.2.2
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/.github/workflows/release.yml +0 -17
- package/CHANGELOG.md +37 -0
- package/README.md +63 -70
- package/build/image-processor.d.ts.map +1 -1
- package/build/image-processor.js +33 -17
- package/build/image-processor.js.map +1 -1
- package/build/prompts.d.ts +2 -3
- package/build/prompts.d.ts.map +1 -1
- package/build/prompts.js +15 -30
- package/build/prompts.js.map +1 -1
- package/minimax_coding_plan_mcp-0.0.2/.env.test +4 -0
- package/minimax_coding_plan_mcp-0.0.2/LICENSE +21 -0
- package/minimax_coding_plan_mcp-0.0.2/PKG-INFO +200 -0
- package/minimax_coding_plan_mcp-0.0.2/README.md +143 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/PKG-INFO +200 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/SOURCES.txt +17 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/dependency_links.txt +1 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/entry_points.txt +2 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/requires.txt +20 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/top_level.txt +1 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__init__.py +3 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__main__.py +99 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/__init__.cpython-313.pyc +0 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/client.cpython-313.pyc +0 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/const.cpython-313.pyc +0 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/exceptions.cpython-313.pyc +0 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/utils.cpython-313.pyc +0 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/client.py +104 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/const.py +4 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/exceptions.py +24 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/server.py +169 -0
- package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/utils.py +101 -0
- package/minimax_coding_plan_mcp-0.0.2/pyproject.toml +59 -0
- package/minimax_coding_plan_mcp-0.0.2/setup.cfg +4 -0
- package/minimax_coding_plan_mcp-0.0.2/setup.py +6 -0
- package/minimax_coding_plan_mcp-0.0.2/test_at_prefix.py +134 -0
- package/minimax_coding_plan_mcp-0.0.2/test_real_image.py +153 -0
- package/package.json +2 -2
|
@@ -17,18 +17,6 @@ jobs:
|
|
|
17
17
|
with:
|
|
18
18
|
fetch-depth: 0
|
|
19
19
|
|
|
20
|
-
- name: Setup Node.js
|
|
21
|
-
uses: actions/setup-node@v4
|
|
22
|
-
with:
|
|
23
|
-
node-version: '18'
|
|
24
|
-
registry-url: 'https://registry.npmjs.org'
|
|
25
|
-
|
|
26
|
-
- name: Install dependencies
|
|
27
|
-
run: npm ci
|
|
28
|
-
|
|
29
|
-
- name: Build
|
|
30
|
-
run: npm run build
|
|
31
|
-
|
|
32
20
|
- name: Extract version from tag
|
|
33
21
|
id: version
|
|
34
22
|
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
|
|
@@ -59,8 +47,3 @@ jobs:
|
|
|
59
47
|
prerelease: false
|
|
60
48
|
env:
|
|
61
49
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
62
|
-
|
|
63
|
-
- name: Publish to npm
|
|
64
|
-
run: npm publish --access public
|
|
65
|
-
env:
|
|
66
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.2.2] - 2025-11-20
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- ✨ **@ 路径支持**: 自动处理 Claude Code 的 @ 文件引用前缀,修复第一次调用失败的问题
|
|
9
|
+
- 📝 **智能 Prompt**: 通用请求自动添加详细指引,保证全面分析
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- 🔧 **Prompt 统一**: 简化为单一通用 prompt,智能处理不同场景
|
|
13
|
+
- ✨ **表述优化**: 融合 Minimax 的经典表述,强调“不遗漏细节”和“完整提取”
|
|
14
|
+
- 📚 **文档更新**: 更新项目结构,添加 qwen-client.ts 和测试文件
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- 🐛 **@ 路径问题**: 修复 Claude Code 中 `@folder/image.png` 导致的路径错误
|
|
18
|
+
- 🐛 **编译错误**: 修复 image-processor.ts 中重复声明的变量
|
|
19
|
+
|
|
20
|
+
### Technical Details
|
|
21
|
+
- 新增 `stripAtPrefix()` 函数处理 Claude Code 的文件引用语法
|
|
22
|
+
- 简化 `buildAnalysisPrompt()` 从两套逻辑到单一逻辑
|
|
23
|
+
- 添加智能请求检测,自动补充详细分析指引
|
|
24
|
+
- 在 minimax_mcp 上验证修复,真实 API 测试通过
|
|
25
|
+
|
|
26
|
+
## [1.2.1] - 2025-11-18
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- 📝 **文档优化**: 精简 README,移除冲余配置文件路径说明
|
|
30
|
+
- 📝 **更新日志简化**: 将 README 中的详细更新日志替换为 CHANGELOG.md 链接
|
|
31
|
+
- ✨ **Qwen 测试示例**: 添加 Qwen3-VL-Flash 本地测试命令
|
|
32
|
+
- 💰 **定价信息**: 添加阿里云通义千问定价参考链接
|
|
33
|
+
- 📋 **模型对比**: 更新模型选择表,完善 Qwen3-VL-Flash 信息
|
|
34
|
+
- 🔗 **API Key 获取**: 添加阿里云百炼 API Key 获取指南
|
|
35
|
+
- 📚 **相关链接**: 新增阿里云百炼平台和 Qwen3-VL 文档链接
|
|
36
|
+
- 🐛 **错误信息**: 优化 API 调用失败排查提示,包含阿里云账户
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- 🐛 **描述修正**: 修正 package.json 中模型名称为 qwen3-vl-flash
|
|
40
|
+
- 📝 **注释精简**: 简化 prompts.ts 注释头
|
|
41
|
+
|
|
5
42
|
## [1.2.0] - 2025-11-17
|
|
6
43
|
|
|
7
44
|
### Added
|
package/README.md
CHANGED
|
@@ -48,10 +48,6 @@ npx luma-mcp
|
|
|
48
48
|
|
|
49
49
|
#### Claude Desktop
|
|
50
50
|
|
|
51
|
-
**Windows 配置文件位置**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
52
|
-
|
|
53
|
-
**macOS 配置文件位置**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
54
|
-
|
|
55
51
|
**方案 A: 使用智谱 GLM-4.5V**:
|
|
56
52
|
|
|
57
53
|
```json
|
|
@@ -229,7 +225,7 @@ claude mcp add -s user luma-mcp --env MODEL_PROVIDER=qwen --env DASHSCOPE_API_KE
|
|
|
229
225
|
|
|
230
226
|
**注意**: 直接在聊天框粘贴图片,非视觉模型不会自动调用 Luma,需要明确指示。
|
|
231
227
|
|
|
232
|
-
### 在 Claude
|
|
228
|
+
### 在 Claude code 中使用
|
|
233
229
|
|
|
234
230
|
配置完成后,在 Claude 对话中可以这样使用:
|
|
235
231
|
|
|
@@ -272,6 +268,19 @@ $env:SILICONFLOW_API_KEY="your-api-key" # Windows PowerShell
|
|
|
272
268
|
npm run test:local ./test.png
|
|
273
269
|
```
|
|
274
270
|
|
|
271
|
+
**测试阿里云通义千问 Qwen3-VL-Flash**:
|
|
272
|
+
```bash
|
|
273
|
+
# 设置 API Key 和提供商
|
|
274
|
+
export MODEL_PROVIDER=qwen
|
|
275
|
+
export DASHSCOPE_API_KEY="your-api-key" # macOS/Linux
|
|
276
|
+
|
|
277
|
+
$env:MODEL_PROVIDER="qwen"
|
|
278
|
+
$env:DASHSCOPE_API_KEY="your-api-key" # Windows PowerShell
|
|
279
|
+
|
|
280
|
+
# 测试本地图片
|
|
281
|
+
npm run test:local ./test.png
|
|
282
|
+
```
|
|
283
|
+
|
|
275
284
|
**其他测试命令**:
|
|
276
285
|
```bash
|
|
277
286
|
# 测试并提问
|
|
@@ -328,31 +337,39 @@ analyze_image({
|
|
|
328
337
|
|
|
329
338
|
### 通用配置
|
|
330
339
|
|
|
331
|
-
| 变量名
|
|
332
|
-
|
|
333
|
-
| `MODEL_PROVIDER`
|
|
334
|
-
| `MODEL_NAME`
|
|
335
|
-
| `MAX_TOKENS`
|
|
336
|
-
| `TEMPERATURE`
|
|
337
|
-
| `TOP_P`
|
|
338
|
-
| `ENABLE_THINKING
|
|
340
|
+
| 变量名 | 必需 | 默认值 | 说明 |
|
|
341
|
+
|-------------------|------|---------|----------------------------------------------|
|
|
342
|
+
| `MODEL_PROVIDER` | 否 | `zhipu` | 模型提供商:`zhipu`、`siliconflow` 或 `qwen` |
|
|
343
|
+
| `MODEL_NAME` | 否 | 见下文 | 模型名称(自动根据提供商选择) |
|
|
344
|
+
| `MAX_TOKENS` | 否 | `4096` | 最大生成 tokens |
|
|
345
|
+
| `TEMPERATURE` | 否 | `0.7` | 温度参数 (0-1) |
|
|
346
|
+
| `TOP_P` | 否 | `0.7` | Top-p 参数 (0-1) |
|
|
347
|
+
| `ENABLE_THINKING` | 否 | `false` | 是否启用思考模式(GLM-4.5V 和 Qwen3-VL-Flash) |
|
|
339
348
|
|
|
340
349
|
### 智谱 GLM-4.5V 专用
|
|
341
350
|
|
|
342
|
-
| 变量名 | 必需
|
|
343
|
-
|
|
344
|
-
| `ZHIPU_API_KEY`
|
|
351
|
+
| 变量名 | 必需 | 默认值 | 说明 |
|
|
352
|
+
|-----------------|----------------|--------|---------------------|
|
|
353
|
+
| `ZHIPU_API_KEY` | 是(使用智谱时) | - | 智谱 AI 的 API 密钥 |
|
|
345
354
|
|
|
346
355
|
默认模型:`glm-4.5v`
|
|
347
356
|
|
|
348
357
|
### 硅基流动 DeepSeek-OCR 专用
|
|
349
358
|
|
|
350
|
-
| 变量名 | 必需
|
|
351
|
-
|
|
352
|
-
| `SILICONFLOW_API_KEY`
|
|
359
|
+
| 变量名 | 必需 | 默认值 | 说明 |
|
|
360
|
+
|-----------------------|--------------------|--------|---------------------|
|
|
361
|
+
| `SILICONFLOW_API_KEY` | 是(使用硅基流动时) | - | 硅基流动的 API 密钥 |
|
|
353
362
|
|
|
354
363
|
默认模型:`deepseek-ai/DeepSeek-OCR`
|
|
355
364
|
|
|
365
|
+
### 阿里云通义千问 Qwen3-VL-Flash 专用
|
|
366
|
+
|
|
367
|
+
| 变量名 | 必需 | 默认值 | 说明 |
|
|
368
|
+
|-------------------|------------------|--------|------------------------|
|
|
369
|
+
| `DASHSCOPE_API_KEY` | 是(使用千问时) | - | 阿里云百炼的 API 密钥 |
|
|
370
|
+
|
|
371
|
+
默认模型:`qwen3-vl-flash`
|
|
372
|
+
|
|
356
373
|
**思考模式说明**:
|
|
357
374
|
- 默认开启,提高图片分析的准确性和详细程度
|
|
358
375
|
- 如需关闭(提高速度、降低成本),请在配置文件中设置:
|
|
@@ -395,13 +412,17 @@ luma-mcp/
|
|
|
395
412
|
│ ├── vision-client.ts # 视觉模型客户端接口
|
|
396
413
|
│ ├── zhipu-client.ts # GLM-4.5V API 客户端
|
|
397
414
|
│ ├── siliconflow-client.ts # DeepSeek-OCR API 客户端
|
|
415
|
+
│ ├── qwen-client.ts # Qwen3-VL API 客户端
|
|
398
416
|
│ ├── image-processor.ts # 图片处理
|
|
399
417
|
│ ├── prompts.ts # 提示词模板
|
|
400
418
|
│ └── utils/
|
|
401
419
|
│ ├── logger.ts # 日志工具
|
|
402
420
|
│ └── helpers.ts # 工具函数
|
|
403
421
|
├── test/
|
|
404
|
-
│
|
|
422
|
+
│ ├── test-local.ts # 本地测试脚本
|
|
423
|
+
│ ├── test-qwen.ts # Qwen 测试脚本
|
|
424
|
+
│ ├── test-deepseek-raw.ts # DeepSeek 原始测试脚本
|
|
425
|
+
│ └── test-data-uri.ts # Data URI 测试脚本
|
|
405
426
|
├── docs/
|
|
406
427
|
│ ├── design.md # 设计文档
|
|
407
428
|
│ ├── installation.md # 安装指南
|
|
@@ -426,6 +447,12 @@ luma-mcp/
|
|
|
426
447
|
3. 进入 API 管理创建 API Key
|
|
427
448
|
4. 复制 API Key 到配置文件
|
|
428
449
|
|
|
450
|
+
**阿里云通义千问 Qwen3-VL-Flash**:
|
|
451
|
+
1. 访问 [阿里云百炼平台](https://bailian.console.aliyun.com/)
|
|
452
|
+
2. 注册/登录账号
|
|
453
|
+
3. 进入 API-KEY 管理创建 API Key
|
|
454
|
+
4. 复制 API Key 到配置文件
|
|
455
|
+
|
|
429
456
|
### 支持哪些图片格式?
|
|
430
457
|
|
|
431
458
|
支持 JPG、PNG、WebP、GIF 格式。建议使用 JPG 格式以获得更好的压缩率。
|
|
@@ -455,7 +482,7 @@ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...
|
|
|
455
482
|
### API 调用失败怎么办?
|
|
456
483
|
|
|
457
484
|
1. 检查 API Key 是否正确
|
|
458
|
-
2.
|
|
485
|
+
2. 确认账户余额充足(智谱/阿里云)
|
|
459
486
|
3. 检查网络连接
|
|
460
487
|
4. 查看日志文件了解详细错误信息
|
|
461
488
|
|
|
@@ -465,25 +492,29 @@ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...
|
|
|
465
492
|
|
|
466
493
|
**智谱 GLM-4.5V**: 定价请参考[智谱官方定价](https://open.bigmodel.cn/pricing)。
|
|
467
494
|
|
|
468
|
-
|
|
495
|
+
**阿里云通义千问 Qwen3-VL-Flash**: 定价请参考[阿里云百炼定价](https://help.aliyun.com/zh/model-studio/getting-started/models)。
|
|
496
|
+
|
|
497
|
+
典型场景估算:
|
|
469
498
|
- 简单图片理解: 500-1000 tokens
|
|
470
499
|
- 代码截图分析: 1500-2500 tokens
|
|
471
500
|
- 详细 UI 分析: 2000-3000 tokens
|
|
472
501
|
|
|
473
|
-
|
|
502
|
+
启用思考模式(GLM-4.5V/Qwen3-VL-Flash)会增加约 20-30% tokens。
|
|
474
503
|
|
|
475
504
|
### 如何选择模型?
|
|
476
505
|
|
|
477
|
-
| 特性
|
|
478
|
-
|
|
479
|
-
| **费用**
|
|
480
|
-
| **中文理解** | 优秀 | 良好 |
|
|
481
|
-
| **OCR 能力** | 良好 | **优秀** |
|
|
482
|
-
| **思考模式** | 支持 | 不支持 |
|
|
483
|
-
|
|
|
506
|
+
| 特性 | GLM-4.5V(智谱) | DeepSeek-OCR(硅基流动) | Qwen3-VL-Flash(阿里云) |
|
|
507
|
+
|--------------|----------------|------------------------|------------------------|
|
|
508
|
+
| **费用** | 收费 | **完全免费** | 收费 |
|
|
509
|
+
| **中文理解** | 优秀 | 良好 | **优秀** |
|
|
510
|
+
| **OCR 能力** | 良好 | **优秀** | 优秀 |
|
|
511
|
+
| **思考模式** | 支持 | 不支持 | 支持 |
|
|
512
|
+
| **速度/成本** | 中等 | 免费 | **快速/低成本** |
|
|
513
|
+
| **适用场景** | 通用图片分析 | OCR、文字识别 | 快速分析、3D定位 |
|
|
484
514
|
|
|
485
515
|
**推荐**:
|
|
486
516
|
- 需要 OCR 或文字识别:选择 **DeepSeek-OCR**(免费)
|
|
517
|
+
- 需要快速低成本分析:选择 **Qwen3-VL-Flash**
|
|
487
518
|
- 需要深度图片理解:选择 **GLM-4.5V**
|
|
488
519
|
|
|
489
520
|
## 贡献
|
|
@@ -500,50 +531,12 @@ MIT License
|
|
|
500
531
|
- [GLM-4.5V 文档](https://docs.bigmodel.cn/cn/guide/models/vlm/glm-4.5v)
|
|
501
532
|
- [硅基流动平台](https://cloud.siliconflow.cn/)
|
|
502
533
|
- [DeepSeek-OCR 文档](https://docs.siliconflow.cn/cn/api-reference/chat-completions/chat-completions)
|
|
534
|
+
- [阿里云百炼平台](https://bailian.console.aliyun.com/)
|
|
535
|
+
- [Qwen3-VL 文档](https://help.aliyun.com/zh/model-studio/getting-started/models)
|
|
503
536
|
- [MCP 协议文档](https://modelcontextprotocol.io/)
|
|
504
537
|
|
|
505
538
|
## 更新日志
|
|
506
539
|
|
|
507
|
-
### [1.1.1] - 2025-11-13
|
|
508
|
-
|
|
509
|
-
#### 新增
|
|
510
|
-
- 🖼️ **Data URI 支持**: 支持接收 base64 编码的图片数据(`data:image/png;base64,...`)
|
|
511
|
-
- 🚀 **为未来做准备**: 当 MCP 客户端支持时,可直接传递用户粘贴的图片
|
|
512
|
-
|
|
513
|
-
#### 修改
|
|
514
|
-
- 更新工具描述,说明支持三种输入格式:本地路径、URL、Data URI
|
|
515
|
-
- 新增 Data URI 格式验证(MIME 类型、大小限制)
|
|
516
|
-
|
|
517
|
-
### [1.1.0] - 2025-11-13
|
|
518
|
-
|
|
519
|
-
#### 新增
|
|
520
|
-
- 🎉 **多模型支持**: 新增硅基流动 DeepSeek-OCR 支持
|
|
521
|
-
- 🆓 **免费选项**: DeepSeek-OCR 通过硅基流动提供完全免费的 OCR 服务
|
|
522
|
-
- 📐 **统一接口**: 创建 VisionClient 接口,支持灵活扩展更多视觉模型
|
|
523
|
-
- ⚙️ **灵活配置**: 通过 `MODEL_PROVIDER` 环境变量轻松切换模型
|
|
524
|
-
|
|
525
|
-
#### 修改
|
|
526
|
-
- 🔧 环境变量命名优化,支持通用配置(`MODEL_NAME`、`MAX_TOKENS` 等)
|
|
527
|
-
- 📝 更新文档,提供双模型配置说明和选择建议
|
|
528
|
-
- 🏭️ 重构代码结构,提升可维护性
|
|
529
|
-
|
|
530
|
-
#### 技术细节
|
|
531
|
-
- 新增文件:
|
|
532
|
-
- `src/vision-client.ts` - 视觉模型客户端统一接口
|
|
533
|
-
- `src/siliconflow-client.ts` - 硅基流动 API 客户端实现
|
|
534
|
-
- `.env.example` - 配置示例文件
|
|
535
|
-
- 修改文件:
|
|
536
|
-
- `src/config.ts` - 支持多提供商配置
|
|
537
|
-
- `src/zhipu-client.ts` - 实现 VisionClient 接口
|
|
538
|
-
- `src/index.ts` - 根据配置动态选择客户端
|
|
539
|
-
|
|
540
|
-
### [1.0.3] - 2025-11-12
|
|
541
|
-
|
|
542
|
-
- 基于智谱 GLM-4.5V 的视觉理解能力
|
|
543
|
-
- 支持本地文件和远程 URL
|
|
544
|
-
- 内置重试机制
|
|
545
|
-
- 思考模式支持
|
|
546
|
-
|
|
547
540
|
更多更新历史请查看 [CHANGELOG.md](./CHANGELOG.md)
|
|
548
541
|
|
|
549
542
|
## 作者
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CpG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCtE"}
|
package/build/image-processor.js
CHANGED
|
@@ -27,18 +27,32 @@ function estimateBytesFromDataUri(input) {
|
|
|
27
27
|
return 0;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* 移除 Claude Code 的 @ 路径前缀
|
|
32
|
+
*/
|
|
33
|
+
function stripAtPrefix(path) {
|
|
34
|
+
// Claude Code 使用 @ 作为文件引用的语法糖
|
|
35
|
+
if (path.startsWith('@')) {
|
|
36
|
+
const stripped = path.substring(1);
|
|
37
|
+
logger.debug('Stripped @ prefix from path', { original: path, stripped });
|
|
38
|
+
return stripped;
|
|
39
|
+
}
|
|
40
|
+
return path;
|
|
41
|
+
}
|
|
30
42
|
/**
|
|
31
43
|
* 验证图片来源(文件或URL)
|
|
32
44
|
*/
|
|
33
45
|
export async function validateImageSource(imageSource, maxSizeMB = 10) {
|
|
46
|
+
// 首先移除可能的 @ 前缀
|
|
47
|
+
const cleanSource = stripAtPrefix(imageSource);
|
|
34
48
|
// 如果是 Data URI,则验证 mime 与大小后直接返回
|
|
35
|
-
if (isDataUri(
|
|
36
|
-
const mime = getMimeFromDataUri(
|
|
49
|
+
if (isDataUri(cleanSource)) {
|
|
50
|
+
const mime = getMimeFromDataUri(cleanSource);
|
|
37
51
|
const allowed = ['image/png', 'image/jpeg', 'image/jpg', 'image/webp', 'image/gif'];
|
|
38
52
|
if (!mime || !allowed.includes(mime)) {
|
|
39
53
|
throw new Error(`Unsupported data URI mimeType: ${mime || 'unknown'}. Supported: ${allowed.join(', ')}`);
|
|
40
54
|
}
|
|
41
|
-
const bytes = estimateBytesFromDataUri(
|
|
55
|
+
const bytes = estimateBytesFromDataUri(cleanSource);
|
|
42
56
|
const sizeMB = bytes / (1024 * 1024);
|
|
43
57
|
if (sizeMB > maxSizeMB) {
|
|
44
58
|
throw new Error(`Image data URI too large: ${sizeMB.toFixed(2)}MB (max: ${maxSizeMB}MB)`);
|
|
@@ -46,20 +60,20 @@ export async function validateImageSource(imageSource, maxSizeMB = 10) {
|
|
|
46
60
|
logger.debug('Image source is data URI, validated', { mime, sizeMB: sizeMB.toFixed(2) });
|
|
47
61
|
return;
|
|
48
62
|
}
|
|
49
|
-
// 如果是URL,直接返回
|
|
50
|
-
if (isUrl(
|
|
51
|
-
logger.debug('Image source is URL, skipping validation', { imageSource });
|
|
63
|
+
// 如果是 URL,直接返回
|
|
64
|
+
if (isUrl(cleanSource)) {
|
|
65
|
+
logger.debug('Image source is URL, skipping validation', { imageSource: cleanSource });
|
|
52
66
|
return;
|
|
53
67
|
}
|
|
54
68
|
// 验证本地文件
|
|
55
69
|
try {
|
|
56
|
-
const stats = await stat(
|
|
70
|
+
const stats = await stat(cleanSource);
|
|
57
71
|
const fileSizeMB = stats.size / (1024 * 1024);
|
|
58
72
|
if (fileSizeMB > maxSizeMB) {
|
|
59
73
|
throw new Error(`Image file too large: ${fileSizeMB.toFixed(2)}MB (max: ${maxSizeMB}MB)`);
|
|
60
74
|
}
|
|
61
75
|
// 验证文件格式
|
|
62
|
-
const ext =
|
|
76
|
+
const ext = cleanSource.toLowerCase().split('.').pop();
|
|
63
77
|
const supportedFormats = ['jpg', 'jpeg', 'png', 'webp', 'gif'];
|
|
64
78
|
if (!ext || !supportedFormats.includes(ext)) {
|
|
65
79
|
throw new Error(`Unsupported image format: ${ext}. Supported: ${supportedFormats.join(', ')}`);
|
|
@@ -67,7 +81,7 @@ export async function validateImageSource(imageSource, maxSizeMB = 10) {
|
|
|
67
81
|
}
|
|
68
82
|
catch (error) {
|
|
69
83
|
if (error.code === 'ENOENT') {
|
|
70
|
-
throw new Error(`Image file not found: ${
|
|
84
|
+
throw new Error(`Image file not found: ${cleanSource}`);
|
|
71
85
|
}
|
|
72
86
|
throw error;
|
|
73
87
|
}
|
|
@@ -77,18 +91,20 @@ export async function validateImageSource(imageSource, maxSizeMB = 10) {
|
|
|
77
91
|
*/
|
|
78
92
|
export async function imageToBase64(imagePath) {
|
|
79
93
|
try {
|
|
94
|
+
// 首先移除可能的 @ 前缀
|
|
95
|
+
const cleanPath = stripAtPrefix(imagePath);
|
|
80
96
|
// 如果是 Data URI,直接返回(已是 data:*;base64, 格式)
|
|
81
|
-
if (isDataUri(
|
|
97
|
+
if (isDataUri(cleanPath)) {
|
|
82
98
|
logger.info('Using data URI image');
|
|
83
|
-
return
|
|
99
|
+
return cleanPath;
|
|
84
100
|
}
|
|
85
|
-
// 如果是URL,直接返回
|
|
86
|
-
if (isUrl(
|
|
87
|
-
logger.info('Using remote image URL', { url:
|
|
88
|
-
return
|
|
101
|
+
// 如果是 URL,直接返回
|
|
102
|
+
if (isUrl(cleanPath)) {
|
|
103
|
+
logger.info('Using remote image URL', { url: cleanPath });
|
|
104
|
+
return cleanPath;
|
|
89
105
|
}
|
|
90
106
|
// 本地文件:读取并编码
|
|
91
|
-
let imageBuffer = await readFile(
|
|
107
|
+
let imageBuffer = await readFile(cleanPath);
|
|
92
108
|
// 检查文件大小,如果超过 2MB 则压缩
|
|
93
109
|
if (imageBuffer.length > 2 * 1024 * 1024) {
|
|
94
110
|
logger.info('Compressing large image', { originalSize: `${(imageBuffer.length / (1024 * 1024)).toFixed(2)}MB` });
|
|
@@ -96,7 +112,7 @@ export async function imageToBase64(imagePath) {
|
|
|
96
112
|
}
|
|
97
113
|
// 转换为 base64
|
|
98
114
|
const base64 = imageBuffer.toString('base64');
|
|
99
|
-
const mimeType = getMimeType(
|
|
115
|
+
const mimeType = getMimeType(cleanPath);
|
|
100
116
|
return `data:${mimeType};base64,${base64}`;
|
|
101
117
|
}
|
|
102
118
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,6CAA6C;AAC7C,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,yBAAyB;AACzB,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,4BAA4B;AAC5B,SAAS,wBAAwB,CAAC,KAAa;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,kCAAkC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,YAAoB,EAAE;IACnF,iCAAiC;IACjC,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,IAAI,SAAS,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,SAAS,KAAK,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;
|
|
1
|
+
{"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"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"}
|
package/build/prompts.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 参考 Claude Sonnet 4.5 的视觉理解方法
|
|
2
|
+
* 视觉提示词
|
|
4
3
|
*/
|
|
5
4
|
/**
|
|
6
5
|
* 构建图片分析提示词
|
|
7
6
|
*/
|
|
8
|
-
export declare function buildAnalysisPrompt(
|
|
7
|
+
export declare function buildAnalysisPrompt(userPrompt: string): string;
|
|
9
8
|
//# sourceMappingURL=prompts.d.ts.map
|
package/build/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuB9D"}
|
package/build/prompts.js
CHANGED
|
@@ -1,44 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 参考 Claude Sonnet 4.5 的视觉理解方法
|
|
2
|
+
* 视觉提示词
|
|
4
3
|
*/
|
|
5
4
|
/**
|
|
6
5
|
* 构建图片分析提示词
|
|
7
6
|
*/
|
|
8
|
-
export function buildAnalysisPrompt(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
export function buildAnalysisPrompt(userPrompt) {
|
|
8
|
+
// 判断是否为通用请求(过于简单或模糊)
|
|
9
|
+
const isGenericRequest = /^(分析|查看|识别|描述|理解|看一下|看看|分析一下|请分析|analyze|describe|view|check)/i.test(userPrompt)
|
|
10
|
+
&& userPrompt.length < 30;
|
|
11
|
+
// 如果是通用请求,添加详细指引
|
|
12
|
+
const finalPrompt = isGenericRequest
|
|
13
|
+
? `请详细分析这张图片的内容,包括图片中的主要元素、文字、场景等所有可见信息。`
|
|
14
|
+
: userPrompt;
|
|
15
|
+
return `
|
|
12
16
|
<image_analysis>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
${question}
|
|
17
|
+
${finalPrompt}
|
|
16
18
|
|
|
17
19
|
分析要求:
|
|
18
|
-
1.
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
21
|
-
4.
|
|
22
|
-
5. 具体可执行:如果涉及代码或问题,提供具体的解决方案
|
|
23
|
-
|
|
24
|
-
请开始分析:
|
|
25
|
-
</image_analysis>
|
|
26
|
-
`.trim();
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
// 没有问题时,通用描述
|
|
30
|
-
return `
|
|
31
|
-
<image_analysis>
|
|
32
|
-
请详细描述这张图片的内容,包括:
|
|
33
|
-
|
|
34
|
-
1. **主要内容**:图片展示了什么
|
|
35
|
-
2. **关键元素**:重要的视觉元素、文字、符号
|
|
36
|
-
3. **布局结构**:元素的组织和排列
|
|
37
|
-
4. **文字内容**:提取所有可见文字
|
|
20
|
+
1. **系统性观察**:从整体到细节,全面观察图片内容(不遗漏任何细节)
|
|
21
|
+
2. **准确识别**:精确识别并完整提取所有文字、符号、代码、数字等
|
|
22
|
+
3. **结构化输出**:使用清晰的标题和列表组织信息
|
|
23
|
+
4. **具体可执行**:如果涉及问题或代码,提供具体的解决方案
|
|
38
24
|
|
|
39
25
|
请用中文清晰描述。
|
|
40
26
|
</image_analysis>
|
|
41
27
|
`.trim();
|
|
42
|
-
}
|
|
43
28
|
}
|
|
44
29
|
//# sourceMappingURL=prompts.js.map
|
package/build/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,qBAAqB;IACrB,MAAM,gBAAgB,GAAG,gEAAgE,CAAC,IAAI,CAAC,UAAU,CAAC;WACrG,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;IAE5B,iBAAiB;IACjB,MAAM,WAAW,GAAG,gBAAgB;QAClC,CAAC,CAAC,uCAAuC;QACzC,CAAC,CAAC,UAAU,CAAC;IAEf,OAAO;;EAEP,WAAW;;;;;;;;;;CAUZ,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# Test environment variables
|
|
2
|
+
# Replace with your actual API key
|
|
3
|
+
MINIMAX_API_KEY=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiJKb2NoZW4iLCJVc2VyTmFtZSI6IkpvY2hlbiIsIkFjY291bnQiOiIiLCJTdWJqZWN0SUQiOiIxOTgzMDI4NDA1MDA3ODE4OTQ3IiwiUGhvbmUiOiIxODk4MDkwNTM3MCIsIkdyb3VwSUQiOiIxOTgzMDI4NDA0OTk5NDMwMzM5IiwiUGFnZU5hbWUiOiIiLCJNYWlsIjoiIiwiQ3JlYXRlVGltZSI6IjIwMjUtMTEtMTQgMTk6NTc6NTMiLCJUb2tlblR5cGUiOjQsImlzcyI6Im1pbmltYXgifQ.KTbvW9BShdS-nr9PWih_8haNleDcKLezSdXpyFGGa5Y3JJvQp8cGFIMPgS3ZtGOVhwCY-iM1N6p1bSACeTurXqlqxKVtanDgil43h_MKBr-cHrPrNMWwkSQiY9bYXVMjqxWxZY6pEWMDOAMcoAKQPGDXWVFV1YAHJYmLrpx_c8swBhYLtYQQfIb8z52qwyqUskh9WJ7AxF17g0jDCbITEg-gZRSQZySmDe8n9bS1b_jRIvjF35DayyQ_mJ5jYvaHRijfBXdnTgDNTxvkDH2W8nJ4rkdSKg82cLxwO-MZAMYIQ0HGwcBS_OfHFLmV98aZDd_lT5PSjEEQ2tPxYryDkg
|
|
4
|
+
MINIMAX_API_HOST=https://api.minimaxi.com
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright 2025 MiniMax AI.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|