spec-agent 1.0.3

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 (86) hide show
  1. package/README.md +256 -0
  2. package/bin/spec-agent.js +14 -0
  3. package/dist/commands/analyze.d.ts +16 -0
  4. package/dist/commands/analyze.d.ts.map +1 -0
  5. package/dist/commands/analyze.js +283 -0
  6. package/dist/commands/analyze.js.map +1 -0
  7. package/dist/commands/clean.d.ts +9 -0
  8. package/dist/commands/clean.d.ts.map +1 -0
  9. package/dist/commands/clean.js +109 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/dispatch.d.ts +12 -0
  12. package/dist/commands/dispatch.d.ts.map +1 -0
  13. package/dist/commands/dispatch.js +232 -0
  14. package/dist/commands/dispatch.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +9 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +153 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/learn.d.ts +13 -0
  20. package/dist/commands/learn.d.ts.map +1 -0
  21. package/dist/commands/learn.js +234 -0
  22. package/dist/commands/learn.js.map +1 -0
  23. package/dist/commands/merge.d.ts +11 -0
  24. package/dist/commands/merge.d.ts.map +1 -0
  25. package/dist/commands/merge.js +335 -0
  26. package/dist/commands/merge.js.map +1 -0
  27. package/dist/commands/pipeline.d.ts +19 -0
  28. package/dist/commands/pipeline.d.ts.map +1 -0
  29. package/dist/commands/pipeline.js +266 -0
  30. package/dist/commands/pipeline.js.map +1 -0
  31. package/dist/commands/plan.d.ts +13 -0
  32. package/dist/commands/plan.d.ts.map +1 -0
  33. package/dist/commands/plan.js +314 -0
  34. package/dist/commands/plan.js.map +1 -0
  35. package/dist/commands/scan.d.ts +28 -0
  36. package/dist/commands/scan.d.ts.map +1 -0
  37. package/dist/commands/scan.js +488 -0
  38. package/dist/commands/scan.js.map +1 -0
  39. package/dist/commands/status.d.ts +8 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +146 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/index.d.ts +2 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +126 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/services/document-parser.d.ts +49 -0
  48. package/dist/services/document-parser.d.ts.map +1 -0
  49. package/dist/services/document-parser.js +499 -0
  50. package/dist/services/document-parser.js.map +1 -0
  51. package/dist/services/llm.d.ts +61 -0
  52. package/dist/services/llm.d.ts.map +1 -0
  53. package/dist/services/llm.js +716 -0
  54. package/dist/services/llm.js.map +1 -0
  55. package/dist/types.d.ts +159 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +4 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils/file.d.ts +10 -0
  60. package/dist/utils/file.d.ts.map +1 -0
  61. package/dist/utils/file.js +96 -0
  62. package/dist/utils/file.js.map +1 -0
  63. package/dist/utils/logger.d.ts +13 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +55 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/package.json +48 -0
  68. package/scripts/publish-npm.js +174 -0
  69. package/spec-agent-implementation.md +750 -0
  70. package/src/commands/analyze.ts +322 -0
  71. package/src/commands/clean.ts +88 -0
  72. package/src/commands/dispatch.ts +250 -0
  73. package/src/commands/doctor.ts +136 -0
  74. package/src/commands/learn.ts +261 -0
  75. package/src/commands/merge.ts +377 -0
  76. package/src/commands/pipeline.ts +306 -0
  77. package/src/commands/plan.ts +331 -0
  78. package/src/commands/scan.ts +568 -0
  79. package/src/commands/status.ts +129 -0
  80. package/src/index.ts +137 -0
  81. package/src/services/document-parser.ts +548 -0
  82. package/src/services/llm.ts +857 -0
  83. package/src/types.ts +161 -0
  84. package/src/utils/file.ts +60 -0
  85. package/src/utils/logger.ts +58 -0
  86. package/tsconfig.json +19 -0
@@ -0,0 +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"}
@@ -0,0 +1,488 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.scanCommand = scanCommand;
37
+ const path = __importStar(require("path"));
38
+ const logger_1 = require("../utils/logger");
39
+ const file_1 = require("../utils/file");
40
+ const document_parser_1 = require("../services/document-parser");
41
+ const llm_1 = require("../services/llm");
42
+ const SCAN_EXIT_CODE = {
43
+ INPUT_ERROR: 1,
44
+ CONFIG_ERROR: 2,
45
+ LLM_STRICT_ERROR: 3,
46
+ RUNTIME_ERROR: 10,
47
+ };
48
+ async function scanCommand(options, command) {
49
+ const logger = new logger_1.Logger();
50
+ try {
51
+ // Validate input
52
+ if (!options.input && !options.stdin) {
53
+ logger.error('[E_SCAN_INPUT] --input is required (or use --stdin)');
54
+ logger.info(' spec-agent scan --input <path> --output <path>');
55
+ logger.info(" Run 'spec-agent scan --help' for details.");
56
+ process.exit(SCAN_EXIT_CODE.INPUT_ERROR);
57
+ }
58
+ let inputFiles = [];
59
+ if (options.stdin) {
60
+ // Read from stdin
61
+ const stdinContent = await readStdin();
62
+ inputFiles = stdinContent.split('\n').filter(f => f.trim());
63
+ }
64
+ else if (options.input) {
65
+ const inputPath = path.resolve(options.input);
66
+ if (!(await (0, file_1.fileExists)(inputPath))) {
67
+ logger.error(`[E_SCAN_INPUT] Input path not found: ${options.input}`);
68
+ process.exit(SCAN_EXIT_CODE.INPUT_ERROR);
69
+ }
70
+ const stats = await (0, file_1.ensureDir)(inputPath).then(() => require('fs').promises.stat(inputPath)).catch(() => null);
71
+ if (!stats) {
72
+ logger.error(`[E_SCAN_INPUT] Cannot access path: ${options.input}`);
73
+ process.exit(SCAN_EXIT_CODE.INPUT_ERROR);
74
+ }
75
+ if (stats.isDirectory()) {
76
+ // Find all supported files in directory
77
+ const patterns = ['**/*.md', '**/*.pdf', '**/*.docx', '**/*.html', '**/*.txt'];
78
+ for (const pattern of patterns) {
79
+ const files = await (0, file_1.findFiles)(pattern, inputPath);
80
+ inputFiles.push(...files);
81
+ }
82
+ }
83
+ else {
84
+ inputFiles = [inputPath];
85
+ }
86
+ }
87
+ if (inputFiles.length === 0) {
88
+ logger.error('[E_SCAN_INPUT] No input files found');
89
+ process.exit(SCAN_EXIT_CODE.INPUT_ERROR);
90
+ }
91
+ const chunkSizeBytes = (0, file_1.parseSize)(options.chunkSize);
92
+ const totalSize = (await Promise.all(inputFiles.map(f => (0, file_1.getFileSize)(f)))).reduce((sum, s) => sum + s, 0);
93
+ logger.info(`Found ${inputFiles.length} files, total size: ${(0, file_1.formatSize)(totalSize)}`);
94
+ // Parse documents and create content-based chunks
95
+ let rawChunks = [];
96
+ const useLLMChunking = options.llmChunking !== false; // Default true
97
+ const llmConfig = useLLMChunking ? (0, llm_1.getLLMConfigForPurpose)('scan') : null;
98
+ let llmChunkingSuccessFiles = 0;
99
+ let llmChunkingFallbackFiles = 0;
100
+ let imageAssetsDetected = 0;
101
+ let imageAssetsDescribed = 0;
102
+ if (useLLMChunking && llmConfig) {
103
+ // LLM chunking is enabled by default; fail fast so we don't silently degrade
104
+ // to regex-only behavior on complex documents.
105
+ try {
106
+ (0, llm_1.validateLLMConfig)(llmConfig);
107
+ }
108
+ catch (error) {
109
+ logger.error(`[E_SCAN_CONFIG] ${error instanceof Error ? error.message : String(error)}`);
110
+ process.exit(SCAN_EXIT_CODE.CONFIG_ERROR);
111
+ }
112
+ }
113
+ for (const filePath of inputFiles) {
114
+ logger.info(`Parsing ${path.basename(filePath)}...`);
115
+ try {
116
+ const parsed = await (0, document_parser_1.parseDocument)(filePath);
117
+ let contentForChunking = parsed.content;
118
+ imageAssetsDetected += parsed.images?.length || 0;
119
+ let imageSummaries = {};
120
+ if (parsed.images && parsed.images.length > 0) {
121
+ logger.info(` 检测到 ${parsed.images.length} 张嵌入图片`);
122
+ if (llmConfig && llmConfig.apiKey) {
123
+ imageSummaries = await (0, llm_1.describeEmbeddedImages)(parsed.images, llmConfig, logger);
124
+ imageAssetsDescribed += Object.keys(imageSummaries).length;
125
+ }
126
+ else {
127
+ logger.warn(' 未配置 LLM,图片仅保留占位信息,不含语义摘要');
128
+ }
129
+ }
130
+ // Log if base64 images were found and removed
131
+ const base64Info = (0, document_parser_1.analyzeBase64Images)(contentForChunking);
132
+ if (base64Info.count > 0) {
133
+ logger.info(` Remaining base64 refs: ${base64Info.count} (~${(0, file_1.formatSize)(base64Info.estimatedSize)})`);
134
+ }
135
+ // Try LLM-driven chunking first
136
+ let contentChunks = [];
137
+ if (useLLMChunking && llmConfig) {
138
+ try {
139
+ logger.info(` 使用 LLM 分析文档结构...`);
140
+ const structure = await (0, llm_1.analyzeDocumentStructure)(contentForChunking, llmConfig, logger);
141
+ logger.info(` 识别到 ${structure.sections.length} 个章节,建议分组: ${structure.suggestedGroups.map(g => g.name).join(', ')}`);
142
+ const llmChunks = (0, llm_1.splitByLLMStructure)(contentForChunking, structure, chunkSizeBytes);
143
+ contentChunks = llmChunks.map(c => ({ content: c.content, title: c.title }));
144
+ llmChunkingSuccessFiles++;
145
+ logger.info(` LLM 智能切分: ${contentChunks.length} 个 chunks`);
146
+ }
147
+ catch (llmError) {
148
+ if (options.strictLlm) {
149
+ throw new Error(`[E_SCAN_LLM_STRICT] LLM 严格模式下切分失败: ${llmError instanceof Error ? llmError.message : String(llmError)}`);
150
+ }
151
+ logger.warn(` LLM 分析失败,回退到大小切分: ${llmError instanceof Error ? llmError.message : String(llmError)}`);
152
+ // Keep a safe fallback when LLM transiently fails. We avoid heading-regex
153
+ // fallback here because it is brittle on complex mixed-format documents.
154
+ const sizeChunks = forceSplitBySize(contentForChunking, chunkSizeBytes);
155
+ contentChunks = sizeChunks.map(c => ({ content: c }));
156
+ llmChunkingFallbackFiles++;
157
+ }
158
+ }
159
+ else {
160
+ // Rule-based chunking
161
+ const ruleChunks = splitByStructure(contentForChunking, chunkSizeBytes);
162
+ contentChunks = ruleChunks.map(c => ({ content: c }));
163
+ }
164
+ for (const chunk of contentChunks) {
165
+ const enrichedContent = appendImageSummariesToChunk(chunk.content, imageSummaries);
166
+ rawChunks.push({
167
+ content: enrichedContent,
168
+ sourceFiles: [filePath],
169
+ title: chunk.title,
170
+ });
171
+ }
172
+ }
173
+ catch (error) {
174
+ logger.warn(`Failed to parse ${path.basename(filePath)}, using fallback`);
175
+ rawChunks.push({
176
+ content: `[Error parsing file: ${path.basename(filePath)}]`,
177
+ sourceFiles: [filePath],
178
+ });
179
+ }
180
+ }
181
+ // Merge small chunks to reduce total count
182
+ const minChunkSizeBytes = options.minChunkSize ? (0, file_1.parseSize)(options.minChunkSize) : 10 * 1024; // Default 10KB
183
+ rawChunks = mergeSmallChunks(rawChunks, chunkSizeBytes, minChunkSizeBytes);
184
+ logger.info(`最终: ${rawChunks.length} 个 chunks (最大: ${options.chunkSize}, 最小合并: ${(0, file_1.formatSize)(minChunkSizeBytes)})`);
185
+ if (useLLMChunking) {
186
+ logger.info(`LLM 切分统计: 成功 ${llmChunkingSuccessFiles} 文件, 回退 ${llmChunkingFallbackFiles} 文件`);
187
+ }
188
+ if (imageAssetsDetected > 0) {
189
+ logger.info(`图片语义统计: 检测 ${imageAssetsDetected} 张, 已摘要 ${imageAssetsDescribed} 张`);
190
+ }
191
+ // Prepare chunks directory
192
+ const outputDir = path.dirname(path.resolve(options.output));
193
+ const chunksDir = path.join(outputDir, 'chunks');
194
+ await (0, file_1.ensureDir)(chunksDir);
195
+ // Write chunks to files
196
+ const chunks = [];
197
+ for (let i = 0; i < rawChunks.length; i++) {
198
+ const rawChunk = rawChunks[i];
199
+ const chunkFileName = `chunk_${i}.txt`;
200
+ const chunkFilePath = path.join(chunksDir, chunkFileName);
201
+ await require('fs-extra').writeFile(chunkFilePath, rawChunk.content, 'utf-8');
202
+ chunks.push({
203
+ id: i,
204
+ sourceFiles: rawChunk.sourceFiles,
205
+ size: Buffer.byteLength(rawChunk.content, 'utf-8'),
206
+ contentPath: chunkFilePath,
207
+ });
208
+ }
209
+ // Preview mode
210
+ if (options.dryRun) {
211
+ logger.info('Dry run mode - manifest preview:');
212
+ for (const chunk of chunks.slice(0, 20)) {
213
+ const preview = chunk.content
214
+ ? `${path.basename(chunk.sourceFiles[0])} (${(0, file_1.formatSize)(chunk.size)})`
215
+ : `${chunk.sourceFiles.length} files, ${(0, file_1.formatSize)(chunk.size)}`;
216
+ logger.info(` Chunk ${chunk.id}: ${preview}`);
217
+ }
218
+ if (chunks.length > 20) {
219
+ logger.info(` ... and ${chunks.length - 20} more chunks`);
220
+ }
221
+ return;
222
+ }
223
+ // Create manifest
224
+ const manifest = {
225
+ version: '1.0.0',
226
+ createdAt: new Date().toISOString(),
227
+ totalFiles: inputFiles.length,
228
+ totalSize: totalSize,
229
+ chunkSize: chunkSizeBytes,
230
+ chunks: chunks,
231
+ };
232
+ // Write manifest
233
+ const outputPath = path.resolve(options.output);
234
+ await (0, file_1.ensureDir)(path.dirname(outputPath));
235
+ await (0, file_1.writeJson)(outputPath, manifest);
236
+ logger.success(`Manifest created: ${outputPath}`);
237
+ logger.json({
238
+ status: 'success',
239
+ totalFiles: inputFiles.length,
240
+ totalSize: (0, file_1.formatSize)(totalSize),
241
+ chunks: chunks.length,
242
+ chunkSize: options.chunkSize,
243
+ llmChunkingEnabled: useLLMChunking,
244
+ llmChunkingSuccessFiles,
245
+ llmChunkingFallbackFiles,
246
+ imageAssetsDetected,
247
+ imageAssetsDescribed,
248
+ manifestPath: outputPath,
249
+ });
250
+ }
251
+ catch (error) {
252
+ const message = error instanceof Error ? error.message : String(error);
253
+ logger.error(`Scan failed: ${message}`);
254
+ if (message.includes('[E_SCAN_LLM_STRICT]')) {
255
+ process.exit(SCAN_EXIT_CODE.LLM_STRICT_ERROR);
256
+ }
257
+ process.exit(SCAN_EXIT_CODE.RUNTIME_ERROR);
258
+ }
259
+ }
260
+ /**
261
+ * Split Markdown content by document structure (headers, sections)
262
+ * Optimized for Markdown format with hierarchical heading structure
263
+ */
264
+ function splitByStructure(content, maxSize) {
265
+ // Parse document structure to identify sections
266
+ const sections = parseMarkdownStructure(content);
267
+ const chunks = [];
268
+ let currentChunk = [];
269
+ let currentSize = 0;
270
+ for (const section of sections) {
271
+ const sectionSize = Buffer.byteLength(section.content, 'utf-8');
272
+ // If a single section is larger than maxSize, we need to split it
273
+ if (sectionSize > maxSize) {
274
+ // First, flush current chunk if any
275
+ if (currentChunk.length > 0) {
276
+ chunks.push(currentChunk.join('\n\n'));
277
+ currentChunk = [];
278
+ currentSize = 0;
279
+ }
280
+ // Split the large section by paragraphs
281
+ const subChunks = splitLargeSection(section, maxSize);
282
+ chunks.push(...subChunks);
283
+ continue;
284
+ }
285
+ // Check if adding this section would exceed maxSize
286
+ if (currentSize + sectionSize > maxSize && currentChunk.length > 0) {
287
+ // Start a new chunk
288
+ chunks.push(currentChunk.join('\n\n'));
289
+ currentChunk = [section.content];
290
+ currentSize = sectionSize;
291
+ }
292
+ else {
293
+ currentChunk.push(section.content);
294
+ currentSize += sectionSize;
295
+ }
296
+ }
297
+ // Don't forget the last chunk
298
+ if (currentChunk.length > 0) {
299
+ chunks.push(currentChunk.join('\n\n'));
300
+ }
301
+ return chunks.length > 0 ? chunks : [content];
302
+ }
303
+ function parseMarkdownStructure(content) {
304
+ const lines = content.split('\n');
305
+ const sections = [];
306
+ let currentSection = null;
307
+ let currentContent = [];
308
+ for (const line of lines) {
309
+ // Check if this line is a heading
310
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
311
+ if (headingMatch) {
312
+ // Save previous section
313
+ if (currentSection) {
314
+ currentSection.content = currentContent.join('\n').trim();
315
+ sections.push(currentSection);
316
+ }
317
+ else if (currentContent.length > 0) {
318
+ // Content before first heading - treat as intro section
319
+ sections.push({
320
+ level: 0,
321
+ title: '',
322
+ content: currentContent.join('\n').trim(),
323
+ });
324
+ }
325
+ // Start new section
326
+ const level = headingMatch[1].length;
327
+ const title = headingMatch[2].trim();
328
+ currentSection = {
329
+ level,
330
+ title,
331
+ content: '',
332
+ };
333
+ currentContent = [line];
334
+ }
335
+ else {
336
+ currentContent.push(line);
337
+ }
338
+ }
339
+ // Don't forget the last section
340
+ if (currentSection) {
341
+ currentSection.content = currentContent.join('\n').trim();
342
+ sections.push(currentSection);
343
+ }
344
+ else if (currentContent.length > 0) {
345
+ sections.push({
346
+ level: 0,
347
+ title: '',
348
+ content: currentContent.join('\n').trim(),
349
+ });
350
+ }
351
+ return sections;
352
+ }
353
+ /**
354
+ * Split a large section by paragraphs while trying to preserve context
355
+ */
356
+ function splitLargeSection(section, maxSize) {
357
+ const chunks = [];
358
+ const paragraphs = section.content.split(/\n\n+/);
359
+ let currentChunk = [];
360
+ let currentSize = 0;
361
+ // Include the heading in each chunk for context
362
+ const headingPrefix = section.level > 0 ? `${'#'.repeat(section.level)} ${section.title}\n\n` : '';
363
+ const prefixSize = Buffer.byteLength(headingPrefix, 'utf-8');
364
+ for (const paragraph of paragraphs) {
365
+ const paraSize = Buffer.byteLength(paragraph, 'utf-8');
366
+ if (currentSize + paraSize + prefixSize > maxSize && currentChunk.length > 0) {
367
+ // Start new chunk with heading prefix
368
+ chunks.push(headingPrefix + currentChunk.join('\n\n'));
369
+ currentChunk = [paragraph];
370
+ currentSize = paraSize;
371
+ }
372
+ else {
373
+ currentChunk.push(paragraph);
374
+ currentSize += paraSize;
375
+ }
376
+ }
377
+ if (currentChunk.length > 0) {
378
+ chunks.push(headingPrefix + currentChunk.join('\n\n'));
379
+ }
380
+ return chunks;
381
+ }
382
+ /**
383
+ * Force split content by size only (no structure awareness)
384
+ */
385
+ function forceSplitBySize(content, maxSize) {
386
+ const chunks = [];
387
+ let position = 0;
388
+ while (position < content.length) {
389
+ let end = Math.min(position + maxSize, content.length);
390
+ // Try to find a newline to split at
391
+ if (end < content.length) {
392
+ const nextNewline = content.indexOf('\n', end - 100);
393
+ if (nextNewline !== -1 && nextNewline < end + 100) {
394
+ end = nextNewline + 1;
395
+ }
396
+ }
397
+ chunks.push(content.slice(position, end));
398
+ position = end;
399
+ }
400
+ return chunks;
401
+ }
402
+ /**
403
+ * Merge small chunks with their neighbors to reduce total chunk count
404
+ * - Chunks smaller than minSize are candidates for merging
405
+ * - They will be merged with the next chunk if possible
406
+ * - If the next chunk would exceed maxSize, merge with previous instead
407
+ */
408
+ function mergeSmallChunks(chunks, maxSize, minSize) {
409
+ if (chunks.length <= 1)
410
+ return chunks;
411
+ const merged = [];
412
+ let current = chunks[0];
413
+ for (let i = 1; i < chunks.length; i++) {
414
+ const next = chunks[i];
415
+ const currentSize = Buffer.byteLength(current.content, 'utf-8');
416
+ const nextSize = Buffer.byteLength(next.content, 'utf-8');
417
+ // If current chunk is small, try to merge with next
418
+ if (currentSize < minSize) {
419
+ const combinedSize = currentSize + nextSize + 2; // +2 for separator
420
+ if (combinedSize <= maxSize) {
421
+ // Merge with next chunk
422
+ current.content = current.content + '\n\n' + next.content;
423
+ current.sourceFiles = [...new Set([...current.sourceFiles, ...next.sourceFiles])];
424
+ // Combine titles if both have them
425
+ if (current.title && next.title && current.title !== next.title) {
426
+ current.title = `${current.title} + ${next.title}`;
427
+ }
428
+ else if (next.title && !current.title) {
429
+ current.title = next.title;
430
+ }
431
+ // Continue to next iteration - might merge more
432
+ }
433
+ else {
434
+ // Can't merge with next, keep current as-is and move to next
435
+ merged.push(current);
436
+ current = next;
437
+ }
438
+ }
439
+ else {
440
+ // Current chunk is big enough, keep it
441
+ merged.push(current);
442
+ current = next;
443
+ }
444
+ }
445
+ // Don't forget the last chunk
446
+ merged.push(current);
447
+ return merged;
448
+ }
449
+ function appendImageSummariesToChunk(content, imageSummaries) {
450
+ if (!imageSummaries || Object.keys(imageSummaries).length === 0) {
451
+ return content;
452
+ }
453
+ const idMatches = content.match(/图片引用\s+((?:IMG|PDFIMG)\d{4})/g) || [];
454
+ const imageIds = Array.from(new Set(idMatches.map(item => item.replace(/.*\s+/, '').trim())));
455
+ if (imageIds.length === 0) {
456
+ return content;
457
+ }
458
+ const summaryLines = [];
459
+ for (const imageId of imageIds) {
460
+ const summary = imageSummaries[imageId];
461
+ if (summary) {
462
+ summaryLines.push(`- ${imageId}: ${summary}`);
463
+ }
464
+ }
465
+ if (summaryLines.length === 0) {
466
+ return content;
467
+ }
468
+ return `${content}\n\n### 图片语义补充\n${summaryLines.join('\n')}`;
469
+ }
470
+ function readStdin() {
471
+ return new Promise((resolve) => {
472
+ let data = '';
473
+ process.stdin.setEncoding('utf8');
474
+ process.stdin.on('data', (chunk) => {
475
+ data += chunk;
476
+ });
477
+ process.stdin.on('end', () => {
478
+ resolve(data);
479
+ });
480
+ // If stdin is empty (not piped), resolve with empty string after short delay
481
+ setTimeout(() => {
482
+ if (data === '') {
483
+ resolve('');
484
+ }
485
+ }, 100);
486
+ });
487
+ }
488
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ interface StatusOptions {
3
+ workspace: string;
4
+ format: string;
5
+ }
6
+ export declare function statusCommand(options: StatusOptions, command: Command): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC3F"}