spec-agent 2.0.5 → 2.0.7

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.

Potentially problematic release.


This version of spec-agent might be problematic. Click here for more details.

package/README.md CHANGED
@@ -6,7 +6,8 @@
6
6
 
7
7
  如果你是通过 npm 公网安装并希望从零开始跑通,建议先阅读:
8
8
 
9
- - `USAGE_FROM_NPM.md`(npm 网页不支持该相对链接,安装后在本地包目录查看)
9
+ - `USAGE.md`
10
+ - `IMPLEMENTATION.md`
10
11
 
11
12
  ## 在 Cursor 中使用
12
13
 
@@ -279,6 +280,13 @@ node dist/index.js doctor --workspace . --check-llm --format json
279
280
  manifest.json chunk_*.json spec.json task_plan.json dispatch.json
280
281
  ```
281
282
 
283
+ 原型图相关产物(当需求文档含图片时):
284
+
285
+ - `output/prototypes/*`:抽取后的原型图文件
286
+ - `output/prototype_index.json`:原型图索引(ID、路径、来源、摘要、sourceChunks)
287
+ - `output/prototype_index.md`:便于人工查看的原型总览
288
+ - `output/handoff/tasks/*.md`:任务提示词内自动附带匹配到的原型引用
289
+
282
290
  ### 6. 支持的文档格式
283
291
 
284
292
  - `.md` - Markdown
@@ -322,4 +330,4 @@ npm run dev
322
330
 
323
331
  如果你要把本工具作为“可直接调用的 Cursor 智能体”交付给其他人,请看:
324
332
 
325
- - `CURSOR_AGENT_PACK.md`
333
+ - `USAGE.md`
package/USAGE.md ADDED
@@ -0,0 +1,75 @@
1
+ # SPEC-AGENT USAGE
2
+
3
+ 本文件合并了原 `USAGE_FROM_NPM.md` 与 `CURSOR_AGENT_PACK.md` 的使用内容,作为统一操作手册。
4
+
5
+ ## 1. 安装与检查
6
+
7
+ ```bash
8
+ npm install -g spec-agent@latest --registry=https://registry.npmjs.org/
9
+ spec-agent --version
10
+ spec-agent --help
11
+ ```
12
+
13
+ ## 2. LLM 配置(单模型)
14
+
15
+ PowerShell:
16
+
17
+ ```powershell
18
+ $env:LLM_API_KEY="your_api_key"
19
+ $env:LLM_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
20
+ $env:LLM_MODEL="qwen-plus"
21
+ ```
22
+
23
+ 可选自检:
24
+
25
+ ```bash
26
+ spec-agent doctor --workspace ./output --check-llm
27
+ ```
28
+
29
+ ## 3. 最小跑通流程
30
+
31
+ ```bash
32
+ spec-agent pipeline --input ./docs --output ./output
33
+ spec-agent handoff --workspace ./output --target cursor --include-summaries
34
+ spec-agent round --workspace ./output --input ./docs --target cursor --max-parallel 4
35
+ ```
36
+
37
+ ## 4. 原型图产物
38
+
39
+ 当需求文档包含图片时,重点查看:
40
+
41
+ - `output/prototypes/*`
42
+ - `output/prototype_index.json`
43
+ - `output/prototype_index.md`
44
+ - `output/handoff/tasks/*.md`(含 `Prototype References` 与 `Prototype Candidates`)
45
+
46
+ 前端交付建议:
47
+
48
+ - 优先按 `Prototype References`(高置信)实现页面
49
+ - `Prototype Candidates` 仅作为候选,必要时人工确认
50
+
51
+ ## 5. 回填执行
52
+
53
+ ```bash
54
+ spec-agent round --workspace ./output --input ./docs --complete T001,T002 --fail T003 --error "compile failed"
55
+ ```
56
+
57
+ ## 6. Cursor Agent Pack 使用
58
+
59
+ 需要在项目内放置:
60
+
61
+ - `.cursor/rules/spec-agent-assistant.mdc`
62
+ - `.cursor/skills/spec-agent-onboarding-agent/SKILL.md`
63
+ - `.cursor/skills/spec-agent-execution-orchestrator/SKILL.md`
64
+ - `.cursor/skills/spec-agent-product-dev-agent/SKILL.md`
65
+
66
+ 推荐触发语句:
67
+
68
+ ```text
69
+ 请按 spec-agent-product-dev-agent 流程,从需求分析开始,产出并推进一轮开发。
70
+ ```
71
+
72
+ ## 7. 当前交付范围
73
+
74
+ - 默认前端优先(页面/路由/组件/交互/状态/假数据)
75
+ - 后端/API/数据库任务默认延期,除非明确要求
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAcD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmJ7F"}
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuCD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgK7F"}
@@ -45,6 +45,7 @@ async function handoffCommand(options, command) {
45
45
  const dispatchPath = path.join(workspacePath, 'dispatch_plan.json');
46
46
  const taskPlanPath = path.join(workspacePath, 'task_plan.json');
47
47
  const specPath = path.join(workspacePath, 'spec_summary.json');
48
+ const prototypeIndexPath = path.join(workspacePath, 'prototype_index.json');
48
49
  if (!(await (0, file_1.fileExists)(dispatchPath))) {
49
50
  logger.error(`dispatch_plan.json not found in workspace: ${workspacePath}`);
50
51
  logger.info('Run spec-agent dispatch first.');
@@ -61,6 +62,10 @@ async function handoffCommand(options, command) {
61
62
  const dispatch = await (0, file_1.readJson)(dispatchPath);
62
63
  const taskPlan = await (0, file_1.readJson)(taskPlanPath);
63
64
  const spec = (await (0, file_1.fileExists)(specPath)) ? await (0, file_1.readJson)(specPath) : null;
65
+ const prototypeIndex = (await (0, file_1.fileExists)(prototypeIndexPath))
66
+ ? await (0, file_1.readJson)(prototypeIndexPath)
67
+ : null;
68
+ const prototypeAssets = prototypeIndex?.assets || [];
64
69
  const taskById = new Map();
65
70
  for (const group of taskPlan.parallelGroups) {
66
71
  for (const task of group.tasks) {
@@ -77,6 +82,8 @@ async function handoffCommand(options, command) {
77
82
  const task = taskById.get(taskId);
78
83
  if (!task)
79
84
  continue;
85
+ const sourceChunks = guessSourceChunks(task, sourceChunkMap);
86
+ const prototypeMatches = matchTaskPrototypes(task, sourceChunks, prototypeAssets);
80
87
  const mapped = {
81
88
  id: task.id,
82
89
  name: task.name,
@@ -86,7 +93,9 @@ async function handoffCommand(options, command) {
86
93
  assignedAgent: agent.agentId,
87
94
  assignedType: agentType,
88
95
  estimatedHours: task.estimatedHours,
89
- sourceChunks: guessSourceChunks(task, sourceChunkMap),
96
+ sourceChunks,
97
+ prototypeRefs: prototypeMatches.filter(match => match.level === 'high'),
98
+ prototypeCandidates: prototypeMatches.filter(match => match.level !== 'high'),
90
99
  };
91
100
  rows.push(mapped);
92
101
  handoffTasks.push(mapped);
@@ -138,10 +147,12 @@ async function handoffCommand(options, command) {
138
147
  taskPlan: 'task_plan.json',
139
148
  dispatchPlan: 'dispatch_plan.json',
140
149
  summariesDir: options.includeSummaries ? 'summaries/' : null,
150
+ prototypeIndex: prototypeAssets.length > 0 ? 'prototype_index.json' : null,
141
151
  },
142
152
  totals: {
143
153
  agents: agentTaskMap.size,
144
154
  tasks: handoffTasks.length,
155
+ prototypeAssets: prototypeAssets.length,
145
156
  },
146
157
  tasks: handoffTasks,
147
158
  unassigned: dispatch.unassigned,
@@ -151,6 +162,7 @@ async function handoffCommand(options, command) {
151
162
  target: normalizeTarget(options.target),
152
163
  totalAgents: agentTaskMap.size,
153
164
  totalTasks: handoffTasks.length,
165
+ totalPrototypeAssets: prototypeAssets.length,
154
166
  includeSummaries: Boolean(options.includeSummaries),
155
167
  }), 'utf-8');
156
168
  logger.success('Handoff bundle generated');
@@ -160,6 +172,7 @@ async function handoffCommand(options, command) {
160
172
  target: normalizeTarget(options.target),
161
173
  totalAgents: agentTaskMap.size,
162
174
  totalTasks: handoffTasks.length,
175
+ totalPrototypeAssets: prototypeAssets.length,
163
176
  outputPath,
164
177
  bundlePath,
165
178
  indexPath,
@@ -215,6 +228,10 @@ function renderTaskPrompt(input) {
215
228
  const sourceChunkText = row.sourceChunks && row.sourceChunks.length > 0
216
229
  ? row.sourceChunks.map(i => `chunk_${i}_summary.json`).join(', ')
217
230
  : '未定位到明确 source chunk,请从 spec_summary.json 补充判断';
231
+ const prototypeLines = (row.prototypeRefs || [])
232
+ .map(ref => `- ${ref.id} | \`${ref.path}\` | ${ref.level} | score=${ref.score} | ${ref.reason}${ref.summary ? ` | ${ref.summary}` : ''}`);
233
+ const prototypeCandidateLines = (row.prototypeCandidates || [])
234
+ .map(ref => `- ${ref.id} | \`${ref.path}\` | ${ref.level} | score=${ref.score} | ${ref.reason}${ref.summary ? ` | ${ref.summary}` : ''}`);
218
235
  return [
219
236
  `# Task Handoff - ${row.id} ${row.name}`,
220
237
  '',
@@ -238,11 +255,20 @@ function renderTaskPrompt(input) {
238
255
  '- `task_plan.json`',
239
256
  '- `dispatch_plan.json`',
240
257
  includeSummaries ? '- `summaries/`' : '- (可选)`summaries/`',
258
+ '- (可选)`prototype_index.json` / `prototypes/*`',
241
259
  '',
242
260
  '## Suggested Evidence',
243
261
  '',
244
262
  `- ${sourceChunkText}`,
245
263
  '',
264
+ '## Prototype References',
265
+ '',
266
+ ...(prototypeLines.length > 0 ? prototypeLines : ['- 无 high 置信度匹配原型,必要时参考候选区']),
267
+ '',
268
+ '## Prototype Candidates (medium/low)',
269
+ '',
270
+ ...(prototypeCandidateLines.length > 0 ? prototypeCandidateLines : ['- 无候选原型']),
271
+ '',
246
272
  '## Execution Constraints',
247
273
  '',
248
274
  '- 只改与该任务直接相关文件;避免大范围重构',
@@ -281,18 +307,20 @@ function renderAgentPrompt(input) {
281
307
  ].join('\n');
282
308
  }
283
309
  function renderIndexMarkdown(input) {
284
- const { target, totalAgents, totalTasks, includeSummaries } = input;
310
+ const { target, totalAgents, totalTasks, totalPrototypeAssets, includeSummaries } = input;
285
311
  return [
286
312
  '# Handoff Bundle Index',
287
313
  '',
288
314
  `- Target: ${target}`,
289
315
  `- Total Agents: ${totalAgents}`,
290
316
  `- Total Tasks: ${totalTasks}`,
317
+ `- Total Prototype Assets: ${totalPrototypeAssets}`,
291
318
  `- Include Summaries: ${includeSummaries ? 'yes' : 'no'}`,
292
319
  '',
293
320
  '## Files',
294
321
  '',
295
322
  '- `handoff_bundle.json`: 机器可读任务总览',
323
+ '- `prototype_index.json`: 原型图索引(如存在)',
296
324
  '- `agents/*.md`: 每个 agent 的任务队列',
297
325
  '- `tasks/*.md`: 每个任务可直接投喂编码 Agent 的提示词模板',
298
326
  '',
@@ -303,6 +331,74 @@ function renderIndexMarkdown(input) {
303
331
  '3. 每完成一个任务后人工回填状态到你的任务系统',
304
332
  ].join('\n');
305
333
  }
334
+ function matchTaskPrototypes(task, sourceChunks, assets) {
335
+ if (assets.length === 0) {
336
+ return [];
337
+ }
338
+ const taskName = normalizeName(task.name);
339
+ const taskTokens = new Set(taskName.split(' ').filter(token => token.length >= 2));
340
+ const matches = [];
341
+ const minBytes = Math.max(1024, parseInt(process.env.PROTOTYPE_MIN_BYTES || '12000', 10) || 12000);
342
+ for (const asset of assets) {
343
+ if (shouldSkipPrototypeForMatching(asset, minBytes)) {
344
+ continue;
345
+ }
346
+ let score = 0;
347
+ const reasons = [];
348
+ const chunkHits = intersectCount(sourceChunks || [], asset.sourceChunks || []);
349
+ if (chunkHits > 0) {
350
+ score += 70 + Math.min(20, chunkHits * 5);
351
+ reasons.push(`chunk重合(${chunkHits})`);
352
+ }
353
+ const text = normalizeName(`${asset.alt || ''} ${asset.summary || ''} ${path.basename(asset.sourceFile || '')}`);
354
+ let tokenHits = 0;
355
+ for (const token of taskTokens) {
356
+ if (token.length >= 2 && text.includes(token)) {
357
+ tokenHits++;
358
+ }
359
+ }
360
+ if (tokenHits > 0) {
361
+ score += Math.min(30, tokenHits * 8);
362
+ reasons.push(`关键词命中(${tokenHits})`);
363
+ }
364
+ if (score >= 35) {
365
+ const level = score >= 70 ? 'high' : score >= 45 ? 'medium' : 'low';
366
+ matches.push({
367
+ id: asset.id,
368
+ path: asset.path,
369
+ score,
370
+ level,
371
+ reason: reasons.join(' + ') || '弱匹配',
372
+ summary: asset.summary,
373
+ });
374
+ }
375
+ }
376
+ return matches
377
+ .sort((a, b) => b.score - a.score)
378
+ .slice(0, 5);
379
+ }
380
+ function shouldSkipPrototypeForMatching(asset, minBytes) {
381
+ const estimatedSize = asset.estimatedSize || 0;
382
+ if (estimatedSize > 0 && estimatedSize < minBytes) {
383
+ return true;
384
+ }
385
+ const text = normalizeName(`${asset.alt || ''} ${asset.summary || ''}`);
386
+ if (text.length < 8 && estimatedSize < minBytes * 2) {
387
+ return true;
388
+ }
389
+ return false;
390
+ }
391
+ function intersectCount(a, b) {
392
+ if (a.length === 0 || b.length === 0)
393
+ return 0;
394
+ const set = new Set(a);
395
+ let count = 0;
396
+ for (const value of b) {
397
+ if (set.has(value))
398
+ count++;
399
+ }
400
+ return count;
401
+ }
306
402
  function normalizeName(input) {
307
403
  return (input || '')
308
404
  .toLowerCase()
@@ -1 +1 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AASD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+OvF"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmRvF"}
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.scanCommand = scanCommand;
37
37
  const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs-extra"));
38
39
  const logger_1 = require("../utils/logger");
39
40
  const file_1 = require("../utils/file");
40
41
  const document_parser_1 = require("../services/document-parser");
@@ -99,6 +100,7 @@ async function scanCommand(options, command) {
99
100
  let llmChunkingFallbackFiles = 0;
100
101
  let imageAssetsDetected = 0;
101
102
  let imageAssetsDescribed = 0;
103
+ const pendingPrototypeAssets = [];
102
104
  if (useLLMChunking && llmConfig) {
103
105
  // LLM chunking is enabled by default; fail fast so we don't silently degrade
104
106
  // to regex-only behavior on complex documents.
@@ -110,22 +112,43 @@ async function scanCommand(options, command) {
110
112
  process.exit(SCAN_EXIT_CODE.CONFIG_ERROR);
111
113
  }
112
114
  }
113
- for (const filePath of inputFiles) {
115
+ for (let fileIdx = 0; fileIdx < inputFiles.length; fileIdx++) {
116
+ const filePath = inputFiles[fileIdx];
114
117
  logger.info(`Parsing ${path.basename(filePath)}...`);
115
118
  try {
116
119
  const parsed = await (0, document_parser_1.parseDocument)(filePath);
117
120
  let contentForChunking = parsed.content;
118
- imageAssetsDetected += parsed.images?.length || 0;
121
+ const parsedImages = (parsed.images || []).map(image => ({
122
+ ...image,
123
+ id: scopeImageId(fileIdx, image.id),
124
+ }));
125
+ const idMapping = new Map();
126
+ for (let i = 0; i < (parsed.images || []).length; i++) {
127
+ idMapping.set(parsed.images[i].id, parsedImages[i].id);
128
+ }
129
+ contentForChunking = replaceImageIds(contentForChunking, idMapping);
130
+ imageAssetsDetected += parsedImages.length;
119
131
  let imageSummaries = {};
120
- if (parsed.images && parsed.images.length > 0) {
121
- logger.info(` 检测到 ${parsed.images.length} 张嵌入图片`);
132
+ if (parsedImages.length > 0) {
133
+ logger.info(` 检测到 ${parsedImages.length} 张嵌入图片`);
122
134
  if (llmConfig && llmConfig.apiKey) {
123
- imageSummaries = await (0, llm_1.describeEmbeddedImages)(parsed.images, llmConfig, logger);
135
+ imageSummaries = await (0, llm_1.describeEmbeddedImages)(parsedImages, llmConfig, logger);
124
136
  imageAssetsDescribed += Object.keys(imageSummaries).length;
125
137
  }
126
138
  else {
127
139
  logger.warn(' 未配置 LLM,图片仅保留占位信息,不含语义摘要');
128
140
  }
141
+ for (const image of parsedImages) {
142
+ pendingPrototypeAssets.push({
143
+ id: image.id,
144
+ sourceFile: filePath,
145
+ alt: image.alt,
146
+ mimeType: image.mimeType,
147
+ estimatedSize: image.estimatedSize,
148
+ dataUri: image.dataUri,
149
+ summary: imageSummaries[image.id],
150
+ });
151
+ }
129
152
  }
130
153
  // Log if base64 images were found and removed
131
154
  const base64Info = (0, document_parser_1.analyzeBase64Images)(contentForChunking);
@@ -207,14 +230,16 @@ async function scanCommand(options, command) {
207
230
  // Prepare chunks directory
208
231
  const outputDir = path.dirname(path.resolve(options.output));
209
232
  const chunksDir = path.join(outputDir, 'chunks');
233
+ const prototypesDir = path.join(outputDir, 'prototypes');
210
234
  await (0, file_1.ensureDir)(chunksDir);
235
+ await (0, file_1.ensureDir)(prototypesDir);
211
236
  // Write chunks to files
212
237
  const chunks = [];
213
238
  for (let i = 0; i < rawChunks.length; i++) {
214
239
  const rawChunk = rawChunks[i];
215
240
  const chunkFileName = `chunk_${i}.txt`;
216
241
  const chunkFilePath = path.join(chunksDir, chunkFileName);
217
- await require('fs-extra').writeFile(chunkFilePath, rawChunk.content, 'utf-8');
242
+ await fs.writeFile(chunkFilePath, rawChunk.content, 'utf-8');
218
243
  chunks.push({
219
244
  id: i,
220
245
  sourceFiles: rawChunk.sourceFiles,
@@ -222,6 +247,12 @@ async function scanCommand(options, command) {
222
247
  contentPath: chunkFilePath,
223
248
  });
224
249
  }
250
+ const prototypeAssets = await writePrototypeAssets({
251
+ outputDir,
252
+ prototypesDir,
253
+ rawChunks,
254
+ pendingAssets: pendingPrototypeAssets,
255
+ });
225
256
  // Create manifest
226
257
  const manifest = {
227
258
  version: '1.0.0',
@@ -230,12 +261,16 @@ async function scanCommand(options, command) {
230
261
  totalSize: totalSize,
231
262
  chunkSize: chunkSizeBytes,
232
263
  chunks: chunks,
264
+ prototypeAssets,
233
265
  };
234
266
  // Write manifest
235
267
  const outputPath = path.resolve(options.output);
236
268
  await (0, file_1.ensureDir)(path.dirname(outputPath));
237
269
  await (0, file_1.writeJson)(outputPath, manifest);
238
270
  logger.success(`Manifest created: ${outputPath}`);
271
+ if (prototypeAssets.length > 0) {
272
+ logger.info(`Prototype index: ${path.join(outputDir, 'prototype_index.json')}`);
273
+ }
239
274
  logger.json({
240
275
  status: 'success',
241
276
  totalFiles: inputFiles.length,
@@ -247,6 +282,7 @@ async function scanCommand(options, command) {
247
282
  llmChunkingFallbackFiles,
248
283
  imageAssetsDetected,
249
284
  imageAssetsDescribed,
285
+ prototypeAssets: prototypeAssets.length,
250
286
  manifestPath: outputPath,
251
287
  });
252
288
  }
@@ -452,7 +488,7 @@ function appendImageSummariesToChunk(content, imageSummaries) {
452
488
  if (!imageSummaries || Object.keys(imageSummaries).length === 0) {
453
489
  return content;
454
490
  }
455
- const idMatches = content.match(/图片引用\s+((?:IMG|PDFIMG)\d{4})/g) || [];
491
+ const idMatches = content.match(/图片引用\s+([A-Z0-9_]+)/g) || [];
456
492
  const imageIds = Array.from(new Set(idMatches.map(item => item.replace(/.*\s+/, '').trim())));
457
493
  if (imageIds.length === 0) {
458
494
  return content;
@@ -469,6 +505,96 @@ function appendImageSummariesToChunk(content, imageSummaries) {
469
505
  }
470
506
  return `${content}\n\n### 图片语义补充\n${summaryLines.join('\n')}`;
471
507
  }
508
+ async function writePrototypeAssets(input) {
509
+ const { outputDir, prototypesDir, rawChunks, pendingAssets } = input;
510
+ if (pendingAssets.length === 0) {
511
+ return [];
512
+ }
513
+ const prototypeAssets = [];
514
+ for (const asset of pendingAssets) {
515
+ const ext = extFromMimeType(asset.mimeType);
516
+ const fileName = `${asset.id}.${ext}`;
517
+ const absolutePath = path.join(prototypesDir, fileName);
518
+ const written = await writeDataUriToFile(asset.dataUri, absolutePath);
519
+ if (!written) {
520
+ continue;
521
+ }
522
+ const sourceChunks = collectSourceChunks(rawChunks, asset.id);
523
+ prototypeAssets.push({
524
+ id: asset.id,
525
+ sourceFile: asset.sourceFile,
526
+ alt: asset.alt,
527
+ mimeType: asset.mimeType,
528
+ estimatedSize: asset.estimatedSize,
529
+ path: path.join('prototypes', fileName).replace(/\\/g, '/'),
530
+ summary: asset.summary,
531
+ sourceChunks,
532
+ });
533
+ }
534
+ const indexJsonPath = path.join(outputDir, 'prototype_index.json');
535
+ await (0, file_1.writeJson)(indexJsonPath, {
536
+ version: '1.0.0',
537
+ createdAt: new Date().toISOString(),
538
+ total: prototypeAssets.length,
539
+ assets: prototypeAssets,
540
+ });
541
+ const indexMarkdownPath = path.join(outputDir, 'prototype_index.md');
542
+ const lines = [
543
+ '# Prototype Index',
544
+ '',
545
+ `- Total: ${prototypeAssets.length}`,
546
+ '',
547
+ '| ID | Path | Source File | Chunks | Summary |',
548
+ '| --- | --- | --- | --- | --- |',
549
+ ];
550
+ for (const asset of prototypeAssets) {
551
+ lines.push(`| ${asset.id} | \`${asset.path}\` | \`${path.basename(asset.sourceFile)}\` | ${asset.sourceChunks.join(', ') || '-'} | ${(asset.summary || '').replace(/\|/g, '\\|')} |`);
552
+ }
553
+ await fs.writeFile(indexMarkdownPath, `${lines.join('\n')}\n`, 'utf-8');
554
+ return prototypeAssets;
555
+ }
556
+ function collectSourceChunks(rawChunks, imageId) {
557
+ const results = [];
558
+ for (let i = 0; i < rawChunks.length; i++) {
559
+ if (rawChunks[i].content.includes(imageId)) {
560
+ results.push(i);
561
+ }
562
+ }
563
+ return results;
564
+ }
565
+ function scopeImageId(fileIdx, imageId) {
566
+ return `F${String(fileIdx + 1).padStart(3, '0')}_${imageId}`;
567
+ }
568
+ function replaceImageIds(content, idMapping) {
569
+ let next = content;
570
+ for (const [fromId, toId] of idMapping.entries()) {
571
+ next = next.replace(new RegExp(`\\b${escapeRegExp(fromId)}\\b`, 'g'), toId);
572
+ }
573
+ return next;
574
+ }
575
+ function escapeRegExp(input) {
576
+ return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
577
+ }
578
+ function extFromMimeType(mimeType) {
579
+ if (mimeType.includes('png'))
580
+ return 'png';
581
+ if (mimeType.includes('jpeg') || mimeType.includes('jpg'))
582
+ return 'jpg';
583
+ if (mimeType.includes('webp'))
584
+ return 'webp';
585
+ if (mimeType.includes('gif'))
586
+ return 'gif';
587
+ return 'img';
588
+ }
589
+ async function writeDataUriToFile(dataUri, filePath) {
590
+ const match = dataUri.match(/^data:image\/[a-zA-Z0-9.+-]+;base64,([A-Za-z0-9+/=]+)$/);
591
+ if (!match) {
592
+ return false;
593
+ }
594
+ const buffer = Buffer.from(match[1], 'base64');
595
+ await fs.writeFile(filePath, buffer);
596
+ return true;
597
+ }
472
598
  function readStdin() {
473
599
  return new Promise((resolve) => {
474
600
  let data = '';