speccore 6.74.0 → 6.76.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,505 @@
1
+ "use strict";
2
+ /**
3
+ * analyze-context-guard — 分析上下文爆炸防护引擎(v6.75.0)
4
+ *
5
+ * 核心能力:
6
+ * 1. 预估分析上下文大小(基于文件数、端数、模块数、代码量)
7
+ * 2. 智能分段策略推荐(一次性 / 按端 / 按模块 / 按功能单元)
8
+ * 3. 交互式确认:提示用户当前预估大小,建议分段策略
9
+ * 4. 自动降级:非交互模式下自动选择最优策略
10
+ *
11
+ * 预估模型:
12
+ * - 基础 overhead:每个 prompt 模板约 2K tokens
13
+ * - 每端 overhead:读取索引 + 分析指令约 3K tokens
14
+ * - 每模块 overhead:需求文档 + 关联代码约 5K tokens
15
+ * - 每功能单元 overhead:详细设计约 8K tokens
16
+ * - 全局文档 overhead:FUNCTION_MAP + API_CONTRACT 约 4K tokens
17
+ */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.estimateContextSize = estimateContextSize;
53
+ exports.buildSegmentationPlan = buildSegmentationPlan;
54
+ exports.promptSegmentationStrategy = promptSegmentationStrategy;
55
+ exports.buildContextGuardPrompt = buildContextGuardPrompt;
56
+ const path_1 = require("path");
57
+ const fs_extra_1 = require("fs-extra");
58
+ const logger_1 = require("../utils/logger");
59
+ const spec_paths_1 = require("./spec-paths");
60
+ // ── 常量配置 ──
61
+ /** Token 预估系数(中文约 1.5 tokens/字,英文约 0.75 tokens/字,取保守值 1.0) */
62
+ const TOKENS_PER_CHAR = 1.0;
63
+ /** 上下文大小阈值(tokens) */
64
+ const LEVEL_THRESHOLDS = {
65
+ small: 8000,
66
+ medium: 16000,
67
+ large: 32000,
68
+ xlarge: 64000,
69
+ };
70
+ /** 各等级推荐策略 */
71
+ const STRATEGY_BY_LEVEL = {
72
+ small: 'all-at-once',
73
+ medium: 'by-platform',
74
+ large: 'by-module',
75
+ xlarge: 'by-feature-unit',
76
+ };
77
+ /** 策略说明 */
78
+ const STRATEGY_DESCRIPTIONS = {
79
+ 'all-at-once': '一次性分析所有端,适合小型项目(< 8K tokens)',
80
+ 'by-platform': '按端逐个分析,每端独立生成 prompt,适合中型项目(8K-16K tokens)',
81
+ 'by-module': '按功能模块逐个分析,跨端关联在同一模块内处理,适合大型项目(16K-32K tokens)',
82
+ 'by-feature-unit': '按功能单元细粒度分析,每个单元一个独立任务,适合超大型项目(> 32K tokens)',
83
+ };
84
+ // ── 核心函数 ──
85
+ /**
86
+ * 预估分析上下文大小
87
+ * @param iterDir 迭代目录
88
+ * @param options 分析选项
89
+ */
90
+ async function estimateContextSize(iterDir, options) {
91
+ const reasons = [];
92
+ const details = {
93
+ platformCount: 0,
94
+ moduleCount: 0,
95
+ featureUnitCount: 0,
96
+ totalFileSize: 0,
97
+ codeFileCount: 0,
98
+ docFileCount: 0,
99
+ };
100
+ // 1. 统计端数量
101
+ const platforms = await (0, spec_paths_1.parsePlatformList)();
102
+ details.platformCount = platforms.length;
103
+ if (platforms.length >= 4) {
104
+ reasons.push(`端数量较多(${platforms.length} 个),上下文较大`);
105
+ }
106
+ // 2. 统计需求文档大小
107
+ const reqDir = (0, path_1.join)(iterDir, '010-requirements');
108
+ let docSize = 0;
109
+ let docCount = 0;
110
+ if (await (0, fs_extra_1.pathExists)(reqDir)) {
111
+ const docFiles = await findAllFiles(reqDir, ['.md', '.txt']);
112
+ for (const f of docFiles) {
113
+ const s = await (0, fs_extra_1.stat)(f);
114
+ docSize += s.size;
115
+ docCount++;
116
+ }
117
+ }
118
+ details.docFileCount = docCount;
119
+ details.totalFileSize += docSize;
120
+ if (docSize > 100000) {
121
+ reasons.push(`需求文档较大(${(docSize / 1024).toFixed(0)} KB),建议分段`);
122
+ }
123
+ // 3. 统计功能模块数量
124
+ const featuresDir = (0, path_1.join)(reqDir, 'features');
125
+ let moduleCount = 0;
126
+ if (await (0, fs_extra_1.pathExists)(featuresDir)) {
127
+ const entries = await (0, fs_extra_1.readdir)(featuresDir, { withFileTypes: true });
128
+ moduleCount = entries.filter(e => e.isDirectory()).length;
129
+ }
130
+ details.moduleCount = moduleCount;
131
+ if (moduleCount >= 10) {
132
+ reasons.push(`功能模块较多(${moduleCount} 个),建议按模块分段`);
133
+ }
134
+ // 4. 统计源码量(如果 --with-code)
135
+ let codeSize = 0;
136
+ let codeCount = 0;
137
+ if (options?.withCode) {
138
+ const constitutionPath = (0, path_1.join)(iterDir, '..', '.speccore', 'CONSTITUTION.md');
139
+ if (await (0, fs_extra_1.pathExists)(constitutionPath)) {
140
+ const constitutionContent = await (0, fs_extra_1.readFile)(constitutionPath, 'utf-8');
141
+ // 提取源码路径
142
+ const sourcePaths = extractSourcePaths(constitutionContent);
143
+ for (const sp of sourcePaths) {
144
+ const fullPath = (0, path_1.join)(iterDir, '..', sp);
145
+ if (await (0, fs_extra_1.pathExists)(fullPath)) {
146
+ const files = await findAllFiles(fullPath, ['.ts', '.tsx', '.js', '.jsx', '.java', '.go', '.py', '.vue']);
147
+ for (const f of files) {
148
+ const s = await (0, fs_extra_1.stat)(f);
149
+ codeSize += s.size;
150
+ codeCount++;
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ details.codeFileCount = codeCount;
157
+ details.totalFileSize += codeSize;
158
+ if (codeSize > 500000) {
159
+ reasons.push(`源码量较大(${(codeSize / 1024).toFixed(0)} KB),建议按模块或功能单元分段`);
160
+ }
161
+ // 5. 预估功能单元数量(从 FUNCTION_MAP 或需求文档估算)
162
+ const functionMapPath = (0, path_1.join)(iterDir, '..', '.speccore', 'GLOBAL', 'FUNCTION_MAP.md');
163
+ let featureUnitCount = moduleCount * 2; // 默认估算
164
+ if (await (0, fs_extra_1.pathExists)(functionMapPath)) {
165
+ const fmContent = await (0, fs_extra_1.readFile)(functionMapPath, 'utf-8');
166
+ // 简单统计表格行数
167
+ const rows = fmContent.split('\n').filter(l => l.startsWith('|') && !l.includes('---'));
168
+ if (rows.length > 1) {
169
+ featureUnitCount = rows.length - 1; // 减去表头
170
+ }
171
+ }
172
+ details.featureUnitCount = featureUnitCount;
173
+ // 6. 计算预估 tokens
174
+ // 基础 overhead
175
+ let estimatedTokens = 2000;
176
+ // 每端 overhead
177
+ estimatedTokens += platforms.length * 3000;
178
+ // 文档内容
179
+ estimatedTokens += docSize * TOKENS_PER_CHAR;
180
+ // 源码内容(如果 withCode,只算 20% 代码会被读取)
181
+ if (options?.withCode) {
182
+ estimatedTokens += codeSize * TOKENS_PER_CHAR * 0.2;
183
+ }
184
+ // 全局文档 overhead
185
+ estimatedTokens += 4000;
186
+ // 7. 确定大小等级
187
+ let level = 'small';
188
+ if (estimatedTokens > LEVEL_THRESHOLDS.xlarge) {
189
+ level = 'xlarge';
190
+ }
191
+ else if (estimatedTokens > LEVEL_THRESHOLDS.large) {
192
+ level = 'large';
193
+ }
194
+ else if (estimatedTokens > LEVEL_THRESHOLDS.medium) {
195
+ level = 'medium';
196
+ }
197
+ const recommendedStrategy = STRATEGY_BY_LEVEL[level];
198
+ return {
199
+ estimatedTokens: Math.round(estimatedTokens),
200
+ level,
201
+ recommendedStrategy,
202
+ reasons: reasons.length > 0 ? reasons : ['上下文大小适中,可以一次性分析'],
203
+ details,
204
+ };
205
+ }
206
+ /**
207
+ * 生成分段计划
208
+ */
209
+ async function buildSegmentationPlan(estimate, iterDir, options) {
210
+ const strategy = estimate.recommendedStrategy;
211
+ const segments = [];
212
+ switch (strategy) {
213
+ case 'all-at-once': {
214
+ segments.push({
215
+ id: 'all',
216
+ name: '全局一次性分析',
217
+ type: 'global',
218
+ target: 'all',
219
+ estimatedTokens: estimate.estimatedTokens,
220
+ dependencies: [],
221
+ inputs: ['CONSTITUTION.md', '010-requirements/'],
222
+ outputs: ['020-specs/global/', '020-specs/{端}/'],
223
+ });
224
+ break;
225
+ }
226
+ case 'by-platform': {
227
+ const platforms = await (0, spec_paths_1.parsePlatformList)();
228
+ // 先全局扫描
229
+ segments.push({
230
+ id: 'global-scan',
231
+ name: '全局快速扫描',
232
+ type: 'global',
233
+ target: 'global',
234
+ estimatedTokens: 4000,
235
+ dependencies: [],
236
+ inputs: ['CONSTITUTION.md', '010-requirements/INDEX.md'],
237
+ outputs: ['.speccore/GLOBAL/platforms/_shared/_INDEX.md'],
238
+ });
239
+ // 后端端先分析
240
+ const backendPlatforms = platforms.filter(async (p) => {
241
+ const types = await Promise.resolve().then(() => __importStar(require('./spec-paths'))).then(m => m.parsePlatformTypes());
242
+ const t = types.get(p) || '';
243
+ return t.includes('service') || t.includes('后端');
244
+ });
245
+ for (const p of backendPlatforms) {
246
+ segments.push({
247
+ id: `backend-${p}`,
248
+ name: `后端端分析: ${p}`,
249
+ type: 'platform',
250
+ target: p,
251
+ estimatedTokens: Math.round(estimate.estimatedTokens / platforms.length),
252
+ dependencies: ['global-scan'],
253
+ inputs: [`platforms/${p}/_INDEX.md`, 'global/ARCHITECTURE.md'],
254
+ outputs: [`platforms/${p}/API_INVENTORY.md`, `platforms/${p}/DATA_MODEL.md`],
255
+ });
256
+ }
257
+ // 前端端后分析
258
+ const frontendPlatforms = platforms.filter(p => !backendPlatforms.includes(p));
259
+ for (const p of frontendPlatforms) {
260
+ segments.push({
261
+ id: `frontend-${p}`,
262
+ name: `前端端分析: ${p}`,
263
+ type: 'platform',
264
+ target: p,
265
+ estimatedTokens: Math.round(estimate.estimatedTokens / platforms.length),
266
+ dependencies: backendPlatforms.map(bp => `backend-${bp}`),
267
+ inputs: [`platforms/${p}/_INDEX.md`, 'global/API_CONTRACT.yaml'],
268
+ outputs: [`platforms/${p}/FEATURES.md`, `platforms/${p}/UI_SPEC.md`],
269
+ });
270
+ }
271
+ break;
272
+ }
273
+ case 'by-module': {
274
+ // 按功能模块分段,每个模块跨端分析
275
+ const featuresDir = (0, path_1.join)(iterDir, '010-requirements', 'features');
276
+ let modules = [];
277
+ if (await (0, fs_extra_1.pathExists)(featuresDir)) {
278
+ const entries = await (0, fs_extra_1.readdir)(featuresDir, { withFileTypes: true });
279
+ modules = entries.filter(e => e.isDirectory()).map(e => e.name);
280
+ }
281
+ if (modules.length === 0) {
282
+ // 回退到按端分段
283
+ return buildSegmentationPlan({ ...estimate, recommendedStrategy: 'by-platform' }, iterDir, options);
284
+ }
285
+ // 全局扫描
286
+ segments.push({
287
+ id: 'global-scan',
288
+ name: '全局快速扫描',
289
+ type: 'global',
290
+ target: 'global',
291
+ estimatedTokens: 4000,
292
+ dependencies: [],
293
+ inputs: ['CONSTITUTION.md'],
294
+ outputs: ['.speccore/GLOBAL/platforms/_shared/_INDEX.md'],
295
+ });
296
+ for (const mod of modules) {
297
+ segments.push({
298
+ id: `module-${mod}`,
299
+ name: `功能模块分析: ${mod}`,
300
+ type: 'module',
301
+ target: mod,
302
+ estimatedTokens: Math.round(estimate.estimatedTokens / modules.length),
303
+ dependencies: ['global-scan'],
304
+ inputs: [`010-requirements/features/${mod}/README.md`, 'global/API_CONTRACT.yaml'],
305
+ outputs: [`020-specs/features/${mod}.md`],
306
+ });
307
+ }
308
+ break;
309
+ }
310
+ case 'by-feature-unit': {
311
+ // 按功能单元分段,最细粒度
312
+ // 先读取 FUNCTION_MAP 获取功能单元列表
313
+ const functionMapPath = (0, path_1.join)(iterDir, '..', '.speccore', 'GLOBAL', 'FUNCTION_MAP.md');
314
+ let units = [];
315
+ if (await (0, fs_extra_1.pathExists)(functionMapPath)) {
316
+ const content = await (0, fs_extra_1.readFile)(functionMapPath, 'utf-8');
317
+ // 提取功能单元名称(表格第二列)
318
+ const lines = content.split('\n');
319
+ for (const line of lines) {
320
+ const match = line.match(/^\|\s*\w+\s*\|\s*([^|]+)\s*\|/);
321
+ if (match && !line.includes('功能单元')) {
322
+ units.push(match[1].trim());
323
+ }
324
+ }
325
+ }
326
+ if (units.length === 0) {
327
+ // 回退到按模块分段
328
+ return buildSegmentationPlan({ ...estimate, recommendedStrategy: 'by-module' }, iterDir, options);
329
+ }
330
+ // 全局扫描
331
+ segments.push({
332
+ id: 'global-scan',
333
+ name: '全局快速扫描',
334
+ type: 'global',
335
+ target: 'global',
336
+ estimatedTokens: 4000,
337
+ dependencies: [],
338
+ inputs: ['CONSTITUTION.md'],
339
+ outputs: ['.speccore/GLOBAL/platforms/_shared/_INDEX.md'],
340
+ });
341
+ for (const unit of units.slice(0, 20)) { // 最多 20 个功能单元
342
+ segments.push({
343
+ id: `unit-${unit}`,
344
+ name: `功能单元分析: ${unit}`,
345
+ type: 'feature-unit',
346
+ target: unit,
347
+ estimatedTokens: Math.round(estimate.estimatedTokens / Math.min(units.length, 20)),
348
+ dependencies: ['global-scan'],
349
+ inputs: ['global/FUNCTION_MAP.md', 'global/API_CONTRACT.yaml'],
350
+ outputs: [`020-specs/units/${unit}.md`],
351
+ });
352
+ }
353
+ break;
354
+ }
355
+ }
356
+ return {
357
+ strategy,
358
+ segments,
359
+ totalEstimatedTokens: estimate.estimatedTokens,
360
+ explanation: STRATEGY_DESCRIPTIONS[strategy],
361
+ };
362
+ }
363
+ /**
364
+ * 显示上下文预估报告并获取用户确认(交互模式)
365
+ * @returns 用户选择的策略
366
+ */
367
+ async function promptSegmentationStrategy(estimate, plan, interactive) {
368
+ logger_1.logger.info('');
369
+ logger_1.logger.info('📊 分析上下文预估报告');
370
+ logger_1.logger.info('═══════════════════════════════════════');
371
+ logger_1.logger.info(`预估 Tokens: ~${estimate.estimatedTokens.toLocaleString()} (${estimate.level})`);
372
+ logger_1.logger.info(`端数量: ${estimate.details.platformCount}`);
373
+ logger_1.logger.info(`功能模块: ${estimate.details.moduleCount}`);
374
+ logger_1.logger.info(`功能单元: ${estimate.details.featureUnitCount}`);
375
+ logger_1.logger.info(`需求文档: ${estimate.details.docFileCount} 个, ${(estimate.details.totalFileSize / 1024).toFixed(0)} KB`);
376
+ if (estimate.details.codeFileCount > 0) {
377
+ logger_1.logger.info(`源码文件: ${estimate.details.codeFileCount} 个`);
378
+ }
379
+ logger_1.logger.info('');
380
+ if (estimate.reasons.length > 0) {
381
+ logger_1.logger.info('💡 预估原因:');
382
+ for (const r of estimate.reasons) {
383
+ logger_1.logger.info(` • ${r}`);
384
+ }
385
+ logger_1.logger.info('');
386
+ }
387
+ logger_1.logger.info(`🎯 推荐策略: ${estimate.recommendedStrategy}`);
388
+ logger_1.logger.info(` ${STRATEGY_DESCRIPTIONS[estimate.recommendedStrategy]}`);
389
+ logger_1.logger.info('');
390
+ if (plan.segments.length > 1) {
391
+ logger_1.logger.info(`📋 分段计划 (${plan.segments.length} 个阶段):`);
392
+ for (const seg of plan.segments) {
393
+ const depStr = seg.dependencies.length > 0 ? ` [依赖: ${seg.dependencies.join(', ')}]` : '';
394
+ logger_1.logger.info(` ${seg.id}: ${seg.name} (~${seg.estimatedTokens.toLocaleString()} tokens)${depStr}`);
395
+ }
396
+ logger_1.logger.info('');
397
+ }
398
+ // 非交互模式直接返回推荐策略
399
+ if (!interactive) {
400
+ logger_1.logger.info('🤖 非交互模式,自动采用推荐策略');
401
+ return estimate.recommendedStrategy;
402
+ }
403
+ // 交互模式:提示用户确认或选择其他策略
404
+ logger_1.logger.info('请选择分析策略:');
405
+ logger_1.logger.info(' [1] 接受推荐(默认)');
406
+ logger_1.logger.info(' [2] 一次性分析(可能上下文溢出)');
407
+ logger_1.logger.info(' [3] 按端分段');
408
+ logger_1.logger.info(' [4] 按模块分段');
409
+ logger_1.logger.info(' [5] 按功能单元分段(最细粒度)');
410
+ logger_1.logger.info('');
411
+ // 由于 CLI 环境无法真正交互,这里返回推荐策略
412
+ // 实际交互由宿主 AI 处理(通过 prompt 输出选项让用户选择)
413
+ return estimate.recommendedStrategy;
414
+ }
415
+ /**
416
+ * 生成上下文防护提示(用于 prompt 输出)
417
+ */
418
+ function buildContextGuardPrompt(estimate, plan) {
419
+ let prompt = `\n## 📊 上下文大小预估与分段策略\n\n`;
420
+ prompt += `### 预估结果\n\n`;
421
+ prompt += `- **预估 Tokens**: ~${estimate.estimatedTokens.toLocaleString()}\n`;
422
+ prompt += `- **大小等级**: ${estimate.level}\n`;
423
+ prompt += `- **端数量**: ${estimate.details.platformCount}\n`;
424
+ prompt += `- **功能模块**: ${estimate.details.moduleCount}\n`;
425
+ prompt += `- **需求文档**: ${estimate.details.docFileCount} 个\n\n`;
426
+ prompt += `### 推荐策略\n\n`;
427
+ prompt += `**${estimate.recommendedStrategy}** — ${STRATEGY_DESCRIPTIONS[estimate.recommendedStrategy]}\n\n`;
428
+ if (plan.segments.length > 1) {
429
+ prompt += `### 分段执行计划\n\n`;
430
+ prompt += `本次分析将分为 **${plan.segments.length}** 个阶段执行:\n\n`;
431
+ prompt += `| 阶段 | 名称 | 类型 | 预估 Tokens | 依赖 |\n`;
432
+ prompt += `| :--- | :--- | :--- | :--- | :--- |\n`;
433
+ for (const seg of plan.segments) {
434
+ const depStr = seg.dependencies.join(', ') || '无';
435
+ prompt += `| ${seg.id} | ${seg.name} | ${seg.type} | ~${seg.estimatedTokens.toLocaleString()} | ${depStr} |\n`;
436
+ }
437
+ prompt += `\n`;
438
+ prompt += `### 执行顺序\n\n`;
439
+ prompt += `请按以下顺序执行:\n\n`;
440
+ // 拓扑排序输出
441
+ const executed = new Set();
442
+ const pending = [...plan.segments];
443
+ let step = 1;
444
+ while (pending.length > 0) {
445
+ const ready = pending.filter(s => s.dependencies.every(d => executed.has(d)));
446
+ if (ready.length === 0)
447
+ break;
448
+ for (const seg of ready) {
449
+ prompt += `${step}. **${seg.name}**\n`;
450
+ prompt += ` \`\`\`bash\n`;
451
+ prompt += ` speccore analyze --prompt -I {迭代名} --global --with-code --streaming-phase ${seg.id}\n`;
452
+ prompt += ` \`\`\`\n`;
453
+ executed.add(seg.id);
454
+ step++;
455
+ }
456
+ for (const s of ready) {
457
+ const idx = pending.indexOf(s);
458
+ if (idx >= 0)
459
+ pending.splice(idx, 1);
460
+ }
461
+ }
462
+ prompt += `\n`;
463
+ }
464
+ prompt += `> ⚠️ **上下文爆炸防护**: 如果某阶段执行时感觉上下文过大,可随时中断并请求更细粒度的分段。\n`;
465
+ return prompt;
466
+ }
467
+ // ── 辅助函数 ──
468
+ /** 递归查找所有文件 */
469
+ async function findAllFiles(dir, extensions) {
470
+ const result = [];
471
+ try {
472
+ const entries = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true });
473
+ for (const entry of entries) {
474
+ const fullPath = (0, path_1.join)(dir, entry.name);
475
+ if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {
476
+ result.push(...await findAllFiles(fullPath, extensions));
477
+ }
478
+ else if (entry.isFile() && extensions.some(ext => entry.name.endsWith(ext))) {
479
+ result.push(fullPath);
480
+ }
481
+ }
482
+ }
483
+ catch { /* ignore */ }
484
+ return result;
485
+ }
486
+ /** 从 CONSTITUTION.md 提取源码路径 */
487
+ function extractSourcePaths(content) {
488
+ const paths = [];
489
+ // 匹配「源码路径」列的内容
490
+ const lines = content.split('\n');
491
+ for (const line of lines) {
492
+ // 简单匹配表格中包含 / 或 . 的单元格
493
+ const matches = line.match(/\|[\s\w]*源码路径[\s\w]*\|([^|\n]+)/g);
494
+ if (matches) {
495
+ for (const m of matches) {
496
+ const pathMatch = m.match(/[\w\-./]+/g);
497
+ if (pathMatch) {
498
+ paths.push(...pathMatch.filter(p => p.includes('/') || p.includes('.')));
499
+ }
500
+ }
501
+ }
502
+ }
503
+ return [...new Set(paths)];
504
+ }
505
+ //# sourceMappingURL=analyze-context-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-context-guard.js","sourceRoot":"","sources":["../../src/core/analyze-context-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * incremental-analyzer — 增量分析引擎(v6.75.0)
3
+ *
4
+ * 核心能力:
5
+ * 1. 检测上次分析后的变更(需求文档变更、源码变更、新增端)
6
+ * 2. 对比已有分析产出,识别需要重新分析的部分
7
+ * 3. 复用未变更的内容(在 prompt 中标注"已有内容,请复用/校验")
8
+ * 4. 检查遗漏:用 checklist 检查上次分析是否有遗漏
9
+ *
10
+ * 增量分析触发条件:
11
+ * - 需求文档 mtime 更新
12
+ * - 需求文档内容 hash 变化
13
+ * - 源码文件变更(如果 --with-code)
14
+ * - 新增端(检测端列表变化)
15
+ */
16
+ /** 变更类型 */
17
+ export type ChangeType = 'added' | 'modified' | 'deleted' | 'unchanged';
18
+ /** 文档变更信息 */
19
+ export interface DocumentChange {
20
+ filePath: string;
21
+ changeType: ChangeType;
22
+ lastModified: string;
23
+ contentHash: string;
24
+ previousHash?: string;
25
+ }
26
+ /** 增量分析结果 */
27
+ export interface IncrementalAnalysis {
28
+ /** 是否有变更 */
29
+ hasChanges: boolean;
30
+ /** 变更的需求文档 */
31
+ requirementChanges: DocumentChange[];
32
+ /** 变更的源码文件 */
33
+ codeChanges: DocumentChange[];
34
+ /** 新增的端 */
35
+ addedPlatforms: string[];
36
+ /** 删除的端 */
37
+ removedPlatforms: string[];
38
+ /** 需要重新分析的已有产出 */
39
+ staleOutputs: string[];
40
+ /** 上次分析的遗漏检查项 */
41
+ potentialGaps: string[];
42
+ /** 建议的增量分析策略 */
43
+ recommendation: string;
44
+ }
45
+ /**
46
+ * 执行增量分析
47
+ * @param iterDir 迭代目录
48
+ * @param options 分析选项
49
+ */
50
+ export declare function runIncrementalAnalysis(iterDir: string, options?: {
51
+ withCode?: boolean;
52
+ platform?: string;
53
+ }): Promise<IncrementalAnalysis>;
54
+ /**
55
+ * 生成增量分析 Prompt
56
+ */
57
+ export declare function buildIncrementalPrompt(iterDir: string, analysis: IncrementalAnalysis, iteration: string): string;
58
+ //# sourceMappingURL=incremental-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental-analyzer.d.ts","sourceRoot":"","sources":["../../src/core/incremental-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,WAAW;AACX,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAExE,aAAa;AACb,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,aAAa;AACb,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc;IACd,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,cAAc;IACd,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,WAAW;IACX,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW;IACX,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAiBD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,mBAAmB,CAAC,CA8D9B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,MAAM,GAChB,MAAM,CA0GR"}