speccore 6.3.1 → 6.5.0

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.
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ /**
3
+ * reindex-engine — 全量索引重建与一致性检查引擎
4
+ *
5
+ * 扫描三层结构(全局/迭代/代码),检测死链,发现新文件,重建索引
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.runReindex = runReindex;
9
+ const fs_extra_1 = require("fs-extra");
10
+ const path_1 = require("path");
11
+ const crypto_1 = require("crypto");
12
+ const context_1 = require("./context");
13
+ const task_paths_1 = require("./task-paths");
14
+ const knowledge_graph_1 = require("./knowledge-graph");
15
+ const decay_detector_1 = require("./decay-detector");
16
+ const context_builder_1 = require("./context-builder");
17
+ // ═══════════════════════════════════════════════
18
+ // 核心扫描
19
+ // ═══════════════════════════════════════════════
20
+ /** 递归扫描目录下所有 .md 文件 */
21
+ async function scanMarkdownFiles(dir, baseDir = dir) {
22
+ if (!(await (0, fs_extra_1.pathExists)(dir)))
23
+ return [];
24
+ const entries = [];
25
+ const items = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true });
26
+ for (const item of items) {
27
+ const fullPath = (0, path_1.join)(dir, item.name);
28
+ if (item.isDirectory()) {
29
+ if (item.name.startsWith('.') || item.name === 'node_modules' || item.name === 'cache')
30
+ continue;
31
+ entries.push(...await scanMarkdownFiles(fullPath, baseDir));
32
+ }
33
+ else if ((0, path_1.extname)(item.name) === '.md') {
34
+ const st = await (0, fs_extra_1.stat)(fullPath);
35
+ const content = await (0, fs_extra_1.readFile)(fullPath, 'utf-8');
36
+ entries.push({
37
+ path: (0, path_1.relative)(baseDir, fullPath),
38
+ hash: (0, crypto_1.createHash)('md5').update(content).digest('hex').slice(0, 8),
39
+ size: st.size,
40
+ mtime: st.mtime.toISOString(),
41
+ indexed: false,
42
+ });
43
+ }
44
+ }
45
+ return entries;
46
+ }
47
+ /** 从 Markdown 文件中提取所有内部引用路径 */
48
+ function extractReferences(content, filePath) {
49
+ const refs = [];
50
+ const lines = content.split('\n');
51
+ for (let i = 0; i < lines.length; i++) {
52
+ const line = lines[i];
53
+ // Markdown 链接: [text](path)
54
+ const linkMatches = line.matchAll(/\[([^\]]*)\]\(([^)]+)\)/g);
55
+ for (const m of linkMatches) {
56
+ const target = m[2];
57
+ if (target.startsWith('http') || target.startsWith('#'))
58
+ continue;
59
+ refs.push({ ref: target, line: i + 1 });
60
+ }
61
+ // 反引号路径引用: `path/to/file.md`
62
+ const codeMatches = line.matchAll(/`([a-zA-Z0-9_\-\/]+\.(?:md|yaml|json))`/g);
63
+ for (const m of codeMatches) {
64
+ refs.push({ ref: m[1], line: i + 1 });
65
+ }
66
+ }
67
+ return refs;
68
+ }
69
+ // ═══════════════════════════════════════════════
70
+ // 全局层扫描
71
+ // ═══════════════════════════════════════════════
72
+ async function scanGlobalLayer(cwd) {
73
+ const globalDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL');
74
+ const result = {
75
+ name: '全局层 (.speccore/GLOBAL/)',
76
+ files: [],
77
+ staleLinks: [],
78
+ newFiles: [],
79
+ rebuiltIndexes: [],
80
+ };
81
+ if (!(await (0, fs_extra_1.pathExists)(globalDir))) {
82
+ return result;
83
+ }
84
+ // 1. 扫描所有 .md 文件
85
+ result.files = await scanMarkdownFiles(globalDir, globalDir);
86
+ // 2. 检查 INDEX.md 中的引用是否有效
87
+ const indexPath = (0, path_1.join)(globalDir, 'INDEX.md');
88
+ if (await (0, fs_extra_1.pathExists)(indexPath)) {
89
+ const indexContent = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
90
+ const refs = extractReferences(indexContent, indexPath);
91
+ for (const { ref, line } of refs) {
92
+ const refPath = (0, path_1.join)(globalDir, ref);
93
+ if (!(await (0, fs_extra_1.pathExists)(refPath))) {
94
+ result.staleLinks.push({ file: 'GLOBAL/INDEX.md', reference: ref, line });
95
+ }
96
+ }
97
+ // 检查哪些文件未被 INDEX.md 引用
98
+ const indexedPaths = new Set(refs.map(r => r.ref));
99
+ for (const f of result.files) {
100
+ if (f.path === 'INDEX.md')
101
+ continue;
102
+ if (!indexedPaths.has(f.path) && !indexedPaths.has(`./${f.path}`)) {
103
+ result.newFiles.push(f.path);
104
+ }
105
+ }
106
+ }
107
+ else {
108
+ // INDEX.md 不存在,所有文件都是"新增"
109
+ result.newFiles = result.files.filter(f => f.path !== 'INDEX.md').map(f => f.path);
110
+ }
111
+ return result;
112
+ }
113
+ // ═══════════════════════════════════════════════
114
+ // 迭代层扫描
115
+ // ═══════════════════════════════════════════════
116
+ async function scanIterationLayer(cwd, iteration) {
117
+ const iterDir = await (0, context_1.getIterationDir)(iteration);
118
+ const result = {
119
+ name: `迭代层 (${iteration})`,
120
+ files: [],
121
+ staleLinks: [],
122
+ newFiles: [],
123
+ rebuiltIndexes: [],
124
+ };
125
+ if (!iterDir || !(await (0, fs_extra_1.pathExists)(iterDir)))
126
+ return result;
127
+ // 1. 扫描 010-requirements/
128
+ const reqDir = (0, path_1.join)(iterDir, '010-requirements');
129
+ if (await (0, fs_extra_1.pathExists)(reqDir)) {
130
+ const reqFiles = await scanMarkdownFiles(reqDir, reqDir);
131
+ result.files.push(...reqFiles.map(f => ({ ...f, path: `010-requirements/${f.path}` })));
132
+ // 检查 INDEX.md
133
+ const reqIndexPath = (0, path_1.join)(reqDir, 'INDEX.md');
134
+ if (await (0, fs_extra_1.pathExists)(reqIndexPath)) {
135
+ const indexContent = await (0, fs_extra_1.readFile)(reqIndexPath, 'utf-8');
136
+ const refs = extractReferences(indexContent, reqIndexPath);
137
+ const indexedPaths = new Set(refs.map(r => r.ref));
138
+ for (const f of reqFiles) {
139
+ if (f.path === 'INDEX.md')
140
+ continue;
141
+ if (!indexedPaths.has(f.path) && !indexedPaths.has(`./${f.path}`)) {
142
+ result.newFiles.push(`010-requirements/${f.path}`);
143
+ }
144
+ }
145
+ }
146
+ }
147
+ // 2. 扫描 020-specs/
148
+ const specsDir = (0, path_1.join)(iterDir, '020-specs');
149
+ if (await (0, fs_extra_1.pathExists)(specsDir)) {
150
+ const specFiles = await scanMarkdownFiles(specsDir, specsDir);
151
+ result.files.push(...specFiles.map(f => ({ ...f, path: `020-specs/${f.path}` })));
152
+ // 检查是否有 INDEX.md
153
+ const specsIndexPath = (0, path_1.join)(specsDir, 'INDEX.md');
154
+ if (!(await (0, fs_extra_1.pathExists)(specsIndexPath)) && specFiles.length > 0) {
155
+ result.newFiles.push('020-specs/ (缺少 INDEX.md)');
156
+ }
157
+ }
158
+ // 3. 扫描 030-tasks/ — 检查任务有效性
159
+ const tasksDir = (0, path_1.join)(iterDir, '030-tasks');
160
+ if (await (0, fs_extra_1.pathExists)(tasksDir)) {
161
+ // 扫描类型子目录
162
+ for (const type of task_paths_1.TASK_TYPES) {
163
+ const typeDir = (0, path_1.join)(tasksDir, type);
164
+ if (!(await (0, fs_extra_1.pathExists)(typeDir)))
165
+ continue;
166
+ const entries = await (0, fs_extra_1.readdir)(typeDir, { withFileTypes: true });
167
+ for (const entry of entries) {
168
+ if (!entry.isDirectory() || !entry.name.startsWith('Task-'))
169
+ continue;
170
+ const taskPath = (0, path_1.join)(typeDir, entry.name);
171
+ result.files.push({
172
+ path: `030-tasks/${type}/${entry.name}`,
173
+ hash: '',
174
+ size: 0,
175
+ mtime: '',
176
+ indexed: true,
177
+ });
178
+ // 检查 _shared/PLATFORMS.md 状态一致性
179
+ await checkPlatformsConsistency(taskPath, entry.name, result);
180
+ }
181
+ }
182
+ // 兼容旧布局
183
+ const rootEntries = await (0, fs_extra_1.readdir)(tasksDir, { withFileTypes: true });
184
+ for (const entry of rootEntries) {
185
+ if (!entry.isDirectory() || !entry.name.startsWith('Task-'))
186
+ continue;
187
+ result.files.push({
188
+ path: `030-tasks/${entry.name}`,
189
+ hash: '',
190
+ size: 0,
191
+ mtime: '',
192
+ indexed: true,
193
+ });
194
+ }
195
+ }
196
+ // 4. 检查 PROJECT_GRAPH.md 中的任务引用
197
+ const graphPath = (0, path_1.join)(iterDir, '000-overview', 'PROJECT_GRAPH.md');
198
+ if (await (0, fs_extra_1.pathExists)(graphPath)) {
199
+ const graphContent = await (0, fs_extra_1.readFile)(graphPath, 'utf-8');
200
+ const taskRefs = graphContent.matchAll(/Task-\d+[-\w]*/g);
201
+ for (const ref of taskRefs) {
202
+ const taskId = ref[0];
203
+ const found = await (0, task_paths_1.findTaskDir)(tasksDir, taskId);
204
+ if (!found) {
205
+ result.staleLinks.push({
206
+ file: '000-overview/PROJECT_GRAPH.md',
207
+ reference: taskId,
208
+ line: 0,
209
+ });
210
+ }
211
+ }
212
+ }
213
+ return result;
214
+ }
215
+ /** 检查 PLATFORMS.md 中子任务状态是否与实际 TASK.md 一致 */
216
+ async function checkPlatformsConsistency(taskDir, taskId, result) {
217
+ const platformsMd = (0, path_1.join)(taskDir, '_shared', 'PLATFORMS.md');
218
+ if (!(await (0, fs_extra_1.pathExists)(platformsMd)))
219
+ return;
220
+ const content = await (0, fs_extra_1.readFile)(platformsMd, 'utf-8');
221
+ // 提取表格中的端名
222
+ const lines = content.split('\n');
223
+ for (const line of lines) {
224
+ if (!line.startsWith('|') || line.includes('端名') || line.match(/^\|\s*[-:]/))
225
+ continue;
226
+ const cells = line.split('|').map(c => c.trim()).filter(Boolean);
227
+ if (cells.length < 4)
228
+ continue;
229
+ const platformName = cells[0];
230
+ const platformStatus = cells[3];
231
+ // 读取实际 TASK.md 状态
232
+ const taskMdPath = (0, path_1.join)(taskDir, platformName, 'TASK.md');
233
+ if (await (0, fs_extra_1.pathExists)(taskMdPath)) {
234
+ const taskMdContent = await (0, fs_extra_1.readFile)(taskMdPath, 'utf-8');
235
+ const statusMatch = taskMdContent.match(/\*\*状态\*\*[:\s]*(.+)/);
236
+ if (statusMatch) {
237
+ const actualStatus = statusMatch[1].trim();
238
+ if (!platformStatus.includes(actualStatus.replace('🔲', '').replace('✅', '').trim())) {
239
+ result.staleLinks.push({
240
+ file: `_shared/PLATFORMS.md (${taskId}/${platformName})`,
241
+ reference: `状态不一致: 索引="${platformStatus}" vs 实际="${actualStatus}"`,
242
+ line: 0,
243
+ });
244
+ }
245
+ }
246
+ }
247
+ }
248
+ }
249
+ // ═══════════════════════════════════════════════
250
+ // 索引重建
251
+ // ═══════════════════════════════════════════════
252
+ /** 重建全局层 INDEX.md */
253
+ async function rebuildGlobalIndex(cwd, files) {
254
+ const globalDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL');
255
+ const indexPath = (0, path_1.join)(globalDir, 'INDEX.md');
256
+ const now = new Date().toISOString().split('T')[0];
257
+ // 按目录分组
258
+ const groups = {};
259
+ for (const f of files) {
260
+ if (f.path === 'INDEX.md')
261
+ continue;
262
+ const dir = f.path.includes('/') ? f.path.split('/')[0] : '(root)';
263
+ if (!groups[dir])
264
+ groups[dir] = [];
265
+ groups[dir].push(f);
266
+ }
267
+ const lines = [
268
+ `# 全局知识库索引`,
269
+ '',
270
+ `> 自动生成于 ${now} · speccore reindex`,
271
+ `> 文件总数: ${files.length - (groups['(root)']?.length ? 0 : 0)}`,
272
+ '',
273
+ ];
274
+ for (const [dir, dirFiles] of Object.entries(groups)) {
275
+ const dirLabel = dir === '(root)' ? '根目录' :
276
+ dir === 'synthesis' ? '综合文档' :
277
+ dir === 'platforms' ? '各端文档' :
278
+ dir === 'PROJECTS' ? '各工程文档' : dir;
279
+ lines.push(`## 📂 ${dirLabel}`);
280
+ lines.push('');
281
+ for (const f of dirFiles) {
282
+ const name = f.path.split('/').pop().replace('.md', '');
283
+ const desc = getFileDescription((0, path_1.join)(globalDir, f.path));
284
+ lines.push(`- \`${f.path}\` — ${desc || name}`);
285
+ }
286
+ lines.push('');
287
+ }
288
+ const content = lines.join('\n');
289
+ await (0, fs_extra_1.writeFile)(indexPath, content, 'utf-8');
290
+ return indexPath;
291
+ }
292
+ /** 重建迭代层 020-specs/INDEX.md */
293
+ async function rebuildSpecsIndex(iterDir, files) {
294
+ const specsDir = (0, path_1.join)(iterDir, '020-specs');
295
+ const indexPath = (0, path_1.join)(specsDir, 'INDEX.md');
296
+ const now = new Date().toISOString().split('T')[0];
297
+ const lines = [
298
+ `# 迭代规格文档索引`,
299
+ '',
300
+ `> 自动生成于 ${now} · speccore reindex`,
301
+ '',
302
+ `## 文档清单`,
303
+ '',
304
+ `| 文件 | 说明 | 大小 |`,
305
+ `| :--- | :--- | :--- |`,
306
+ ];
307
+ for (const f of files) {
308
+ if (f.path === 'INDEX.md')
309
+ continue;
310
+ // 跳过 platforms/ 子目录(它们有自己的索引)
311
+ const name = f.path.split('/').pop().replace('.md', '');
312
+ const desc = getFileDescription((0, path_1.join)(specsDir, f.path));
313
+ const sizeStr = f.size > 1024 ? `${(f.size / 1024).toFixed(1)}KB` : `${f.size}B`;
314
+ lines.push(`| \`${f.path}\` | ${desc || name} | ${sizeStr} |`);
315
+ }
316
+ lines.push('');
317
+ const content = lines.join('\n');
318
+ await (0, fs_extra_1.writeFile)(indexPath, content, 'utf-8');
319
+ return indexPath;
320
+ }
321
+ /** 从文件内容提取简要描述(取第一个 # 标题或前 60 字符) */
322
+ function getFileDescription(filePath) {
323
+ // 这个函数是同步的简化版,实际从文件内容提取
324
+ // 在重建索引时,用文件名作为 fallback
325
+ return '';
326
+ }
327
+ /** 从文件内容异步提取描述 */
328
+ async function extractFileDescription(filePath) {
329
+ if (!(await (0, fs_extra_1.pathExists)(filePath)))
330
+ return '';
331
+ try {
332
+ const content = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
333
+ // 取第一个 # 标题
334
+ const titleMatch = content.match(/^#\s+(.+)/m);
335
+ if (titleMatch)
336
+ return titleMatch[1].trim().slice(0, 60);
337
+ // 取前 60 个非空字符
338
+ const firstLine = content.split('\n').find(l => l.trim().length > 10);
339
+ if (firstLine)
340
+ return firstLine.trim().replace(/^#+\s*/, '').slice(0, 60);
341
+ }
342
+ catch { /* ignore */ }
343
+ return '';
344
+ }
345
+ // ═══════════════════════════════════════════════
346
+ // 完整性快照
347
+ // ═══════════════════════════════════════════════
348
+ async function saveIntegritySnapshot(cwd, result) {
349
+ const cacheDir = (0, path_1.join)(cwd, '.speccore', 'cache');
350
+ await (0, fs_extra_1.ensureDir)(cacheDir);
351
+ const snapshot = {
352
+ lastScan: new Date().toISOString(),
353
+ version: '1.0',
354
+ files: {},
355
+ };
356
+ const allFiles = [
357
+ ...(result.global?.files || []),
358
+ ...(result.iteration?.files || []),
359
+ ];
360
+ for (const f of allFiles) {
361
+ if (f.hash) {
362
+ snapshot.files[f.path] = { hash: f.hash, size: f.size, mtime: f.mtime };
363
+ }
364
+ }
365
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(cacheDir, 'integrity.json'), JSON.stringify(snapshot, null, 2), 'utf-8');
366
+ }
367
+ // ═══════════════════════════════════════════════
368
+ // 主入口
369
+ // ═══════════════════════════════════════════════
370
+ async function runReindex(cwd, options = {}) {
371
+ const result = {
372
+ global: { name: '', files: [], staleLinks: [], newFiles: [], rebuiltIndexes: [] },
373
+ iteration: null,
374
+ summary: { totalFiles: 0, valid: 0, stale: 0, added: 0, fixed: 0 },
375
+ };
376
+ // 1. 全局层扫描
377
+ result.global = await scanGlobalLayer(cwd);
378
+ // 2. 迭代层扫描
379
+ const iteration = options.iteration || await (0, context_1.getDefaultIteration)();
380
+ if (iteration) {
381
+ result.iteration = await scanIterationLayer(cwd, iteration);
382
+ }
383
+ // 3. 统计
384
+ const allFiles = [...result.global.files, ...(result.iteration?.files || [])];
385
+ const allStale = [...result.global.staleLinks, ...(result.iteration?.staleLinks || [])];
386
+ const allNew = [...result.global.newFiles, ...(result.iteration?.newFiles || [])];
387
+ result.summary = {
388
+ totalFiles: allFiles.length,
389
+ valid: allFiles.filter(f => f.indexed || f.hash).length,
390
+ stale: allStale.length,
391
+ added: allNew.length,
392
+ fixed: 0,
393
+ };
394
+ // 4. 修复模式:重建索引
395
+ if (!options.check) {
396
+ // 重建全局 INDEX.md
397
+ if (result.global.newFiles.length > 0 || result.global.staleLinks.length > 0) {
398
+ const rebuilt = await rebuildGlobalIndex(cwd, result.global.files);
399
+ result.global.rebuiltIndexes.push(rebuilt);
400
+ result.summary.fixed += result.global.staleLinks.length;
401
+ }
402
+ // 重建迭代 020-specs/INDEX.md
403
+ if (result.iteration) {
404
+ const specsDir = (0, path_1.join)((await (0, context_1.getIterationDir)(iteration)), '020-specs');
405
+ if (await (0, fs_extra_1.pathExists)(specsDir)) {
406
+ const specFiles = result.iteration.files.filter(f => f.path.startsWith('020-specs/'));
407
+ if (specFiles.length > 0) {
408
+ const rebuilt = await rebuildSpecsIndex((await (0, context_1.getIterationDir)(iteration)), specFiles);
409
+ result.iteration.rebuiltIndexes.push(rebuilt);
410
+ }
411
+ }
412
+ }
413
+ // 保存完整性快照
414
+ await saveIntegritySnapshot(cwd, result);
415
+ // ── Phase 2: 知识图谱 + 衰减检测 + CONTEXT.md ──
416
+ const graph = await (0, knowledge_graph_1.buildKnowledgeGraph)(cwd, iteration);
417
+ const graphFile = await (0, knowledge_graph_1.saveKnowledgeGraph)(cwd, graph);
418
+ // 衰减检测(对比上次快照)
419
+ const decay = await (0, decay_detector_1.detectDecay)(cwd, graph);
420
+ result.decayReport = decay;
421
+ // 生成 CONTEXT.md
422
+ const contextMd = (0, context_builder_1.buildContextMarkdown)(graph, decay);
423
+ const contextFile = await (0, context_builder_1.saveContextMarkdown)(cwd, contextMd, iteration);
424
+ result.knowledgeGraph = {
425
+ entities: Object.keys(graph.entities).length,
426
+ relations: graph.relations.length,
427
+ graphFile,
428
+ contextFile,
429
+ };
430
+ }
431
+ return result;
432
+ }
433
+ //# sourceMappingURL=reindex-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reindex-engine.js","sourceRoot":"","sources":["../../src/core/reindex-engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccore",
3
- "version": "6.3.1",
3
+ "version": "6.5.0",
4
4
  "description": "SpecCore - Code by Spec, Not by Vibe.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",