speccore 8.3.87 → 8.3.97

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 (114) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +1 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/analyze.d.ts.map +1 -1
  5. package/dist/commands/analyze.js +195 -20
  6. package/dist/commands/analyze.js.map +1 -1
  7. package/dist/commands/change.js +3 -3
  8. package/dist/commands/change.js.map +1 -1
  9. package/dist/commands/clarify.js +3 -3
  10. package/dist/commands/clarify.js.map +1 -1
  11. package/dist/commands/cleanup.js +6 -6
  12. package/dist/commands/cleanup.js.map +1 -1
  13. package/dist/commands/config.d.ts +2 -1
  14. package/dist/commands/config.d.ts.map +1 -1
  15. package/dist/commands/config.js +21 -2
  16. package/dist/commands/config.js.map +1 -1
  17. package/dist/commands/current.d.ts +2 -1
  18. package/dist/commands/current.d.ts.map +1 -1
  19. package/dist/commands/current.js +25 -5
  20. package/dist/commands/current.js.map +1 -1
  21. package/dist/commands/doc2spec.js +3 -3
  22. package/dist/commands/doc2spec.js.map +1 -1
  23. package/dist/commands/execute.js +34 -16
  24. package/dist/commands/execute.js.map +1 -1
  25. package/dist/commands/graph.js +2 -2
  26. package/dist/commands/graph.js.map +1 -1
  27. package/dist/commands/init.js +3 -3
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/iteration/split.js +28 -28
  30. package/dist/commands/iteration/split.js.map +1 -1
  31. package/dist/commands/merge-check.d.ts.map +1 -1
  32. package/dist/commands/merge-check.js +41 -6
  33. package/dist/commands/merge-check.js.map +1 -1
  34. package/dist/commands/pr.d.ts.map +1 -1
  35. package/dist/commands/pr.js +63 -41
  36. package/dist/commands/pr.js.map +1 -1
  37. package/dist/commands/rag-index.js +3 -3
  38. package/dist/commands/rag-index.js.map +1 -1
  39. package/dist/commands/update.d.ts +1 -0
  40. package/dist/commands/update.d.ts.map +1 -1
  41. package/dist/commands/update.js +121 -17
  42. package/dist/commands/update.js.map +1 -1
  43. package/dist/commands/verify.d.ts +1 -0
  44. package/dist/commands/verify.d.ts.map +1 -1
  45. package/dist/commands/verify.js +13 -2
  46. package/dist/commands/verify.js.map +1 -1
  47. package/dist/core/ai-context-generator.d.ts.map +1 -1
  48. package/dist/core/ai-context-generator.js +10 -1
  49. package/dist/core/ai-context-generator.js.map +1 -1
  50. package/dist/core/analyze-engine.d.ts.map +1 -1
  51. package/dist/core/analyze-engine.js +20 -4
  52. package/dist/core/analyze-engine.js.map +1 -1
  53. package/dist/core/ask-engine.d.ts.map +1 -1
  54. package/dist/core/ask-engine.js +10 -5
  55. package/dist/core/ask-engine.js.map +1 -1
  56. package/dist/core/change-detection.d.ts +14 -7
  57. package/dist/core/change-detection.d.ts.map +1 -1
  58. package/dist/core/change-detection.js +34 -15
  59. package/dist/core/change-detection.js.map +1 -1
  60. package/dist/core/code-scanner.js +3 -3
  61. package/dist/core/code-scanner.js.map +1 -1
  62. package/dist/core/deploy/engine.js +78 -5
  63. package/dist/core/deploy/engine.js.map +1 -1
  64. package/dist/core/git-integration.d.ts +10 -5
  65. package/dist/core/git-integration.d.ts.map +1 -1
  66. package/dist/core/git-integration.js +25 -17
  67. package/dist/core/git-integration.js.map +1 -1
  68. package/dist/core/global-knowledge.js +3 -3
  69. package/dist/core/global-knowledge.js.map +1 -1
  70. package/dist/core/index-guard.d.ts.map +1 -1
  71. package/dist/core/index-guard.js +2 -1
  72. package/dist/core/index-guard.js.map +1 -1
  73. package/dist/core/knowledge-graph.d.ts.map +1 -1
  74. package/dist/core/knowledge-graph.js +7 -11
  75. package/dist/core/knowledge-graph.js.map +1 -1
  76. package/dist/core/pattern-detector.js +1 -1
  77. package/dist/core/pattern-detector.js.map +1 -1
  78. package/dist/core/perf-verify/engine.js +2 -1
  79. package/dist/core/perf-verify/engine.js.map +1 -1
  80. package/dist/core/prompt-builder.d.ts +11 -0
  81. package/dist/core/prompt-builder.d.ts.map +1 -1
  82. package/dist/core/prompt-builder.js +213 -18
  83. package/dist/core/prompt-builder.js.map +1 -1
  84. package/dist/core/quality-gate.d.ts +5 -0
  85. package/dist/core/quality-gate.d.ts.map +1 -1
  86. package/dist/core/quality-gate.js +2 -0
  87. package/dist/core/quality-gate.js.map +1 -1
  88. package/dist/core/rag-engine.d.ts +8 -0
  89. package/dist/core/rag-engine.d.ts.map +1 -1
  90. package/dist/core/rag-engine.js +41 -3
  91. package/dist/core/rag-engine.js.map +1 -1
  92. package/dist/core/requirement-clarifier.js +4 -4
  93. package/dist/core/requirement-clarifier.js.map +1 -1
  94. package/dist/core/semantic-locator.js +5 -5
  95. package/dist/core/semantic-locator.js.map +1 -1
  96. package/dist/core/ui-verify/route-scanner.js +1 -1
  97. package/dist/core/ui-verify/route-scanner.js.map +1 -1
  98. package/dist/core/ui-verify/smoke-engine.d.ts +2 -0
  99. package/dist/core/ui-verify/smoke-engine.d.ts.map +1 -1
  100. package/dist/core/ui-verify/smoke-engine.js +202 -34
  101. package/dist/core/ui-verify/smoke-engine.js.map +1 -1
  102. package/dist/core/ui-verify/spec-generator.js +2 -0
  103. package/dist/core/ui-verify/spec-generator.js.map +1 -1
  104. package/dist/core/ui-verify/types.d.ts +8 -1
  105. package/dist/core/ui-verify/types.d.ts.map +1 -1
  106. package/dist/core/unified-config.d.ts +17 -0
  107. package/dist/core/unified-config.d.ts.map +1 -1
  108. package/dist/core/unified-config.js +167 -14
  109. package/dist/core/unified-config.js.map +1 -1
  110. package/dist/core/vision-engine.d.ts +27 -0
  111. package/dist/core/vision-engine.d.ts.map +1 -0
  112. package/dist/core/vision-engine.js +358 -0
  113. package/dist/core/vision-engine.js.map +1 -0
  114. package/package.json +1 -1
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadVisionConfig = loadVisionConfig;
4
+ exports.describeImage = describeImage;
5
+ exports.isVisionEnabled = isVisionEnabled;
6
+ /**
7
+ * vision-engine — 视觉模型调用引擎(v8.3.94+)
8
+ *
9
+ * 用于 specs 图片理解:读取 PNG/JPG 等位图,调用视觉模型生成文本描述,
10
+ * 将描述注入 AI prompt,让 AI"看懂"设计稿截图。
11
+ *
12
+ * 支持 provider: qwen-vl | openai | anthropic | local
13
+ * 默认关闭,需在 .speccore.yml settings.vision 中启用。
14
+ */
15
+ const fs_extra_1 = require("fs-extra");
16
+ const path_1 = require("path");
17
+ const logger_1 = require("../utils/logger");
18
+ // ═══════════════════════════════════════════════════════════
19
+ // 配置读取(带缓存)
20
+ // ═══════════════════════════════════════════════════════════
21
+ let visionConfigCache = null;
22
+ /**
23
+ * 从 .speccore.yml 读取视觉模型配置
24
+ * 优先 settings.vision,回退到 quality_gates.verify_ui.visual_model
25
+ */
26
+ async function loadVisionConfig(cwd) {
27
+ if (visionConfigCache && visionConfigCache.cwd === cwd) {
28
+ return visionConfigCache.config;
29
+ }
30
+ const configPath = (0, path_1.join)(cwd, '.speccore.yml');
31
+ try {
32
+ if (!await (0, fs_extra_1.pathExists)(configPath)) {
33
+ visionConfigCache = { cwd, config: undefined };
34
+ return undefined;
35
+ }
36
+ const raw = await (0, fs_extra_1.readFile)(configPath, 'utf-8');
37
+ // 简易 YAML 解析(只读需要的字段)
38
+ const parsed = parseVisionYaml(raw);
39
+ // 优先 settings.vision
40
+ const vision = parsed.settings?.vision;
41
+ if (vision?.enabled) {
42
+ const cfg = {
43
+ provider: vision.provider || 'qwen-vl',
44
+ model: vision.model,
45
+ apiKey: vision.apiKey,
46
+ endpoint: vision.endpoint,
47
+ timeout: vision.timeout ?? 60000,
48
+ maxImagesPerPrompt: vision.maxImagesPerPrompt ?? 10,
49
+ imageMaxSizeKb: vision.imageMaxSizeKb ?? 2048,
50
+ enabled: true,
51
+ };
52
+ visionConfigCache = { cwd, config: cfg };
53
+ return cfg;
54
+ }
55
+ // 回退到 quality_gates.verify_ui.visual_model
56
+ const vm = parsed.quality_gates?.verify_ui?.visual_model;
57
+ if (vm) {
58
+ const cfg = {
59
+ provider: vm.provider || 'qwen-vl',
60
+ model: vm.model,
61
+ apiKey: vm.apiKey,
62
+ endpoint: vm.endpoint,
63
+ timeout: vm.timeout ?? 60000,
64
+ maxImagesPerPrompt: 10,
65
+ imageMaxSizeKb: 2048,
66
+ enabled: true,
67
+ };
68
+ visionConfigCache = { cwd, config: cfg };
69
+ return cfg;
70
+ }
71
+ }
72
+ catch (e) {
73
+ logger_1.logger.debug?.(`读取视觉模型配置失败: ${e}`);
74
+ }
75
+ visionConfigCache = { cwd, config: undefined };
76
+ return undefined;
77
+ }
78
+ /** 简易 YAML 解析(只提取 vision 相关字段) */
79
+ function parseVisionYaml(yaml) {
80
+ const result = {};
81
+ const lines = yaml.split(/\r?\n/);
82
+ const stack = [{ obj: result, indent: -1 }];
83
+ for (const line of lines) {
84
+ if (!line.trim() || line.trim().startsWith('#'))
85
+ continue;
86
+ const indent = line.length - line.trimStart().length;
87
+ const trimmed = line.trim();
88
+ // 回退到合适的层级
89
+ while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
90
+ stack.pop();
91
+ }
92
+ const parent = stack[stack.length - 1].obj;
93
+ if (trimmed.startsWith('- ')) {
94
+ const val = trimmed.slice(2).trim();
95
+ if (!Array.isArray(parent))
96
+ continue;
97
+ parent.push(val);
98
+ }
99
+ else if (trimmed.includes(':')) {
100
+ const colonIdx = trimmed.indexOf(':');
101
+ const key = trimmed.slice(0, colonIdx).trim();
102
+ let val = trimmed.slice(colonIdx + 1).trim();
103
+ // 去掉引号
104
+ if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
105
+ val = val.slice(1, -1);
106
+ }
107
+ if (val === '' || val === '~' || val === 'null') {
108
+ // 可能是对象或数组,先创建空对象
109
+ parent[key] = {};
110
+ stack.push({ obj: parent[key], indent });
111
+ }
112
+ else {
113
+ parent[key] = val;
114
+ }
115
+ }
116
+ }
117
+ return result;
118
+ }
119
+ // ═══════════════════════════════════════════════════════════
120
+ // 图片描述核心函数
121
+ // ═══════════════════════════════════════════════════════════
122
+ /**
123
+ * 调用视觉模型获取图片的文本描述
124
+ */
125
+ async function describeImage(imagePath, config) {
126
+ // 1. 检查文件存在和大小
127
+ try {
128
+ if (!await (0, fs_extra_1.pathExists)(imagePath)) {
129
+ return { success: false, description: '', error: '文件不存在' };
130
+ }
131
+ const st = await (0, fs_extra_1.stat)(imagePath);
132
+ const sizeKb = st.size / 1024;
133
+ const maxSize = config.imageMaxSizeKb ?? 2048;
134
+ if (sizeKb > maxSize) {
135
+ return {
136
+ success: false,
137
+ description: '',
138
+ error: `图片过大 (${sizeKb.toFixed(0)} KB > ${maxSize} KB 限制)`,
139
+ };
140
+ }
141
+ }
142
+ catch (e) {
143
+ return { success: false, description: '', error: `文件检查失败: ${e}` };
144
+ }
145
+ // 2. 读取并编码为 base64
146
+ let base64;
147
+ let mediaType;
148
+ try {
149
+ const buf = await (0, fs_extra_1.readFile)(imagePath);
150
+ base64 = buf.toString('base64');
151
+ mediaType = inferMediaType(imagePath);
152
+ }
153
+ catch (e) {
154
+ return { success: false, description: '', error: `读取图片失败: ${e}` };
155
+ }
156
+ // 3. 根据 provider 调用不同 API
157
+ const timeout = config.timeout ?? 60000;
158
+ const prompt = '请详细描述这张图片的内容,包括:界面布局、元素位置、颜色、文字内容、交互元素等。用中文回答。';
159
+ try {
160
+ switch (config.provider) {
161
+ case 'qwen-vl':
162
+ return await callQwenVl(base64, mediaType, prompt, config, timeout);
163
+ case 'openai':
164
+ return await callOpenAiVision(base64, mediaType, prompt, config, timeout);
165
+ case 'anthropic':
166
+ return await callAnthropicVision(base64, mediaType, prompt, config, timeout);
167
+ case 'local':
168
+ return await callLocalVision(base64, mediaType, prompt, config, timeout);
169
+ default:
170
+ return { success: false, description: '', error: `不支持的视觉模型提供商: ${config.provider}` };
171
+ }
172
+ }
173
+ catch (e) {
174
+ return { success: false, description: '', error: `API 调用失败: ${e.message || e}` };
175
+ }
176
+ }
177
+ /** 推断图片 MIME 类型 */
178
+ function inferMediaType(imagePath) {
179
+ const ext = (0, path_1.extname)(imagePath).toLowerCase();
180
+ const map = {
181
+ '.png': 'image/png',
182
+ '.jpg': 'image/jpeg',
183
+ '.jpeg': 'image/jpeg',
184
+ '.gif': 'image/gif',
185
+ '.webp': 'image/webp',
186
+ '.bmp': 'image/bmp',
187
+ '.svg': 'image/svg+xml',
188
+ };
189
+ return map[ext] || 'image/png';
190
+ }
191
+ // ═══════════════════════════════════════════════════════════
192
+ // Provider 实现
193
+ // ═══════════════════════════════════════════════════════════
194
+ /** 调用通义千问 VL (OpenAI 兼容格式) */
195
+ async function callQwenVl(base64, mediaType, prompt, config, timeout) {
196
+ const apiKey = config.apiKey || process.env.DASHSCOPE_API_KEY || process.env.QWEN_API_KEY;
197
+ if (!apiKey) {
198
+ return { success: false, description: '', error: '缺少 API Key(请设置 DASHSCOPE_API_KEY 或 qwen-vl 配置中的 apiKey)' };
199
+ }
200
+ const endpoint = config.endpoint || 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';
201
+ const model = config.model || 'qwen-vl-plus';
202
+ const body = {
203
+ model,
204
+ messages: [
205
+ {
206
+ role: 'user',
207
+ content: [
208
+ { type: 'text', text: prompt },
209
+ { type: 'image_url', image_url: { url: `data:${mediaType};base64,${base64}` } },
210
+ ],
211
+ },
212
+ ],
213
+ max_tokens: 1024,
214
+ };
215
+ const response = await fetchWithTimeout(endpoint, {
216
+ method: 'POST',
217
+ headers: {
218
+ 'Content-Type': 'application/json',
219
+ 'Authorization': `Bearer ${apiKey}`,
220
+ },
221
+ body: JSON.stringify(body),
222
+ }, timeout);
223
+ const data = await response.json();
224
+ if (!response.ok) {
225
+ return { success: false, description: '', error: `qwen-vl API 错误: ${data.error?.message || JSON.stringify(data)}` };
226
+ }
227
+ const description = data.choices?.[0]?.message?.content || '';
228
+ return { success: true, description };
229
+ }
230
+ /** 调用 OpenAI GPT-4V / GPT-4o */
231
+ async function callOpenAiVision(base64, mediaType, prompt, config, timeout) {
232
+ const apiKey = config.apiKey || process.env.OPENAI_API_KEY;
233
+ if (!apiKey) {
234
+ return { success: false, description: '', error: '缺少 API Key(请设置 OPENAI_API_KEY 或 openai 配置中的 apiKey)' };
235
+ }
236
+ const endpoint = config.endpoint || 'https://api.openai.com/v1/chat/completions';
237
+ const model = config.model || 'gpt-4o';
238
+ const body = {
239
+ model,
240
+ messages: [
241
+ {
242
+ role: 'user',
243
+ content: [
244
+ { type: 'text', text: prompt },
245
+ { type: 'image_url', image_url: { url: `data:${mediaType};base64,${base64}` } },
246
+ ],
247
+ },
248
+ ],
249
+ max_tokens: 1024,
250
+ };
251
+ const response = await fetchWithTimeout(endpoint, {
252
+ method: 'POST',
253
+ headers: {
254
+ 'Content-Type': 'application/json',
255
+ 'Authorization': `Bearer ${apiKey}`,
256
+ },
257
+ body: JSON.stringify(body),
258
+ }, timeout);
259
+ const data = await response.json();
260
+ if (!response.ok) {
261
+ return { success: false, description: '', error: `OpenAI API 错误: ${data.error?.message || JSON.stringify(data)}` };
262
+ }
263
+ const description = data.choices?.[0]?.message?.content || '';
264
+ return { success: true, description };
265
+ }
266
+ /** 调用 Anthropic Claude 3 */
267
+ async function callAnthropicVision(base64, mediaType, prompt, config, timeout) {
268
+ const apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY;
269
+ if (!apiKey) {
270
+ return { success: false, description: '', error: '缺少 API Key(请设置 ANTHROPIC_API_KEY 或 anthropic 配置中的 apiKey)' };
271
+ }
272
+ const endpoint = config.endpoint || 'https://api.anthropic.com/v1/messages';
273
+ const model = config.model || 'claude-3-sonnet-20240229';
274
+ const body = {
275
+ model,
276
+ max_tokens: 1024,
277
+ messages: [
278
+ {
279
+ role: 'user',
280
+ content: [
281
+ { type: 'text', text: prompt },
282
+ {
283
+ type: 'image',
284
+ source: {
285
+ type: 'base64',
286
+ media_type: mediaType,
287
+ data: base64,
288
+ },
289
+ },
290
+ ],
291
+ },
292
+ ],
293
+ };
294
+ const response = await fetchWithTimeout(endpoint, {
295
+ method: 'POST',
296
+ headers: {
297
+ 'Content-Type': 'application/json',
298
+ 'x-api-key': apiKey,
299
+ 'anthropic-version': '2023-06-01',
300
+ },
301
+ body: JSON.stringify(body),
302
+ }, timeout);
303
+ const data = await response.json();
304
+ if (!response.ok) {
305
+ return { success: false, description: '', error: `Anthropic API 错误: ${data.error?.message || JSON.stringify(data)}` };
306
+ }
307
+ const description = data.content?.[0]?.text || '';
308
+ return { success: true, description };
309
+ }
310
+ /** 调用本地视觉模型(Ollama / LM Studio 等 OpenAI 兼容端点) */
311
+ async function callLocalVision(base64, mediaType, prompt, config, timeout) {
312
+ const endpoint = config.endpoint || 'http://localhost:11434/v1/chat/completions';
313
+ const model = config.model || 'llava';
314
+ const body = {
315
+ model,
316
+ messages: [
317
+ {
318
+ role: 'user',
319
+ content: [
320
+ { type: 'text', text: prompt },
321
+ { type: 'image_url', image_url: { url: `data:${mediaType};base64,${base64}` } },
322
+ ],
323
+ },
324
+ ],
325
+ max_tokens: 1024,
326
+ };
327
+ const response = await fetchWithTimeout(endpoint, {
328
+ method: 'POST',
329
+ headers: { 'Content-Type': 'application/json' },
330
+ body: JSON.stringify(body),
331
+ }, timeout);
332
+ const data = await response.json();
333
+ if (!response.ok) {
334
+ return { success: false, description: '', error: `本地模型 API 错误: ${data.error?.message || JSON.stringify(data)}` };
335
+ }
336
+ const description = data.choices?.[0]?.message?.content || '';
337
+ return { success: true, description };
338
+ }
339
+ // ═══════════════════════════════════════════════════════════
340
+ // 工具函数
341
+ // ═══════════════════════════════════════════════════════════
342
+ /** 带超时的 fetch */
343
+ async function fetchWithTimeout(url, init, timeoutMs) {
344
+ const controller = new AbortController();
345
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
346
+ try {
347
+ const response = await fetch(url, { ...init, signal: controller.signal });
348
+ return response;
349
+ }
350
+ finally {
351
+ clearTimeout(timeoutId);
352
+ }
353
+ }
354
+ /** 检查视觉模型是否启用 */
355
+ function isVisionEnabled(config) {
356
+ return !!config && config.enabled === true;
357
+ }
358
+ //# sourceMappingURL=vision-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-engine.js","sourceRoot":"","sources":["../../src/core/vision-engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccore",
3
- "version": "8.3.87",
3
+ "version": "8.3.97",
4
4
  "description": "SpecCore - Code by Spec, Not by Vibe.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",