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.
- package/README.md +256 -0
- package/bin/spec-agent.js +14 -0
- package/dist/commands/analyze.d.ts +16 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +283 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/clean.d.ts +9 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +109 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/dispatch.d.ts +12 -0
- package/dist/commands/dispatch.d.ts.map +1 -0
- package/dist/commands/dispatch.js +232 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +153 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/learn.d.ts +13 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +234 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/merge.d.ts +11 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +335 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/pipeline.d.ts +19 -0
- package/dist/commands/pipeline.d.ts.map +1 -0
- package/dist/commands/pipeline.js +266 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/plan.d.ts +13 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +314 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/scan.d.ts +28 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +488 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +146 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/services/document-parser.d.ts +49 -0
- package/dist/services/document-parser.d.ts.map +1 -0
- package/dist/services/document-parser.js +499 -0
- package/dist/services/document-parser.js.map +1 -0
- package/dist/services/llm.d.ts +61 -0
- package/dist/services/llm.d.ts.map +1 -0
- package/dist/services/llm.js +716 -0
- package/dist/services/llm.js.map +1 -0
- package/dist/types.d.ts +159 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/file.d.ts +10 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +96 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +55 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +48 -0
- package/scripts/publish-npm.js +174 -0
- package/spec-agent-implementation.md +750 -0
- package/src/commands/analyze.ts +322 -0
- package/src/commands/clean.ts +88 -0
- package/src/commands/dispatch.ts +250 -0
- package/src/commands/doctor.ts +136 -0
- package/src/commands/learn.ts +261 -0
- package/src/commands/merge.ts +377 -0
- package/src/commands/pipeline.ts +306 -0
- package/src/commands/plan.ts +331 -0
- package/src/commands/scan.ts +568 -0
- package/src/commands/status.ts +129 -0
- package/src/index.ts +137 -0
- package/src/services/document-parser.ts +548 -0
- package/src/services/llm.ts +857 -0
- package/src/types.ts +161 -0
- package/src/utils/file.ts +60 -0
- package/src/utils/logger.ts +58 -0
- 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 @@
|
|
|
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"}
|