speccore 8.3.263 → 8.3.264
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AA2FA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiPD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuyE3E;AA+zBD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsuEzU;AAopBD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAE/D,oBAAoB;AACpB,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqFrF;AAED,kBAAkB;AAClB,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/F;AAED,iBAAiB;AACjB,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBjF;AAED,iBAAiB;AACjB,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAe/G;AAcD,oCAAoC;AACpC,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,EAAE,EACtB,QAAQ,EAAE,YAAY,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CAmFjB;AAkBD,2BAA2B;AAC3B,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CAAC,MAAM,CAAC,CA0EjB;AAiRD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8D7H"}
|
package/dist/commands/analyze.js
CHANGED
|
@@ -83,6 +83,13 @@ const dispatch_loop_1 = require("../core/dispatch-loop");
|
|
|
83
83
|
const pipeline_engine_1 = require("../core/pipeline-engine");
|
|
84
84
|
const change_detection_1 = require("../core/change-detection");
|
|
85
85
|
const ai_trace_1 = require("../utils/ai-trace");
|
|
86
|
+
// v8.3.264: AI 交棒统一出口——所有 [SPECCORE_PROMPT] 输出必留 prompt-out 轨迹,
|
|
87
|
+
// 与 ai-trace 飞行记录仪的 apply-in/apply-done/apply-fail 配对,形成「发起→回传→落盘」闭环证据链。
|
|
88
|
+
// 此前 14 处输出点仅 2 处埋点,澄清链等 12 处交棒全程无痕(ai-trace/ 目录空白即因此)。
|
|
89
|
+
async function emitAiPrompt(iter, prompt, meta = {}) {
|
|
90
|
+
await (0, ai_trace_1.recordAiTrace)(iter, 'prompt-out', { promptLength: prompt.length, ...meta, prompt });
|
|
91
|
+
process.stdout.write(`[SPECCORE_PROMPT]\n${prompt}`);
|
|
92
|
+
}
|
|
86
93
|
const streaming_analyzer_1 = require("../core/streaming-analyzer");
|
|
87
94
|
const requirement_clarifier_1 = require("../core/requirement-clarifier");
|
|
88
95
|
const agents_1 = require("../core/agents");
|
|
@@ -405,7 +412,7 @@ async function analyzeCommand(options) {
|
|
|
405
412
|
prompt += `3. 修复后重新运行 \`speccore analyze -I ${iter}\` 重新审计\n`;
|
|
406
413
|
prompt += `4. 最多修复 2 轮,超过 2 轮仍有问题则标记为“需人工确认”\n`;
|
|
407
414
|
prompt += `5. 写入: speccore analyze --apply '{...}' -I ${iter}\n`;
|
|
408
|
-
|
|
415
|
+
await emitAiPrompt(iter, prompt, { mode: 'audit-fix' });
|
|
409
416
|
process.exitCode = 10;
|
|
410
417
|
return;
|
|
411
418
|
}
|
|
@@ -428,7 +435,7 @@ async function analyzeCommand(options) {
|
|
|
428
435
|
if (options.estimateOnly) {
|
|
429
436
|
// 只输出预估报告到 prompt
|
|
430
437
|
const prompt = buildContextGuardPrompt(estimate, plan);
|
|
431
|
-
|
|
438
|
+
await emitAiPrompt(iter, prompt, { mode: 'context-guard' });
|
|
432
439
|
process.exitCode = 10;
|
|
433
440
|
return;
|
|
434
441
|
}
|
|
@@ -458,7 +465,7 @@ async function analyzeCommand(options) {
|
|
|
458
465
|
logger_1.logger.info('');
|
|
459
466
|
if (options.prompt) {
|
|
460
467
|
const prompt = buildIncrementalPrompt(iterDir, analysis, iter);
|
|
461
|
-
|
|
468
|
+
await emitAiPrompt(iter, prompt, { mode: 'incremental' });
|
|
462
469
|
process.exitCode = 10;
|
|
463
470
|
return;
|
|
464
471
|
}
|
|
@@ -505,7 +512,7 @@ async function analyzeCommand(options) {
|
|
|
505
512
|
logger_1.logger.info('');
|
|
506
513
|
if (options.prompt) {
|
|
507
514
|
const prompt = buildNewPlatformPrompt(iterDir, analysis, iter);
|
|
508
|
-
|
|
515
|
+
await emitAiPrompt(iter, prompt, { mode: 'new-platform' });
|
|
509
516
|
process.exitCode = 10;
|
|
510
517
|
return;
|
|
511
518
|
}
|
|
@@ -556,7 +563,7 @@ async function analyzeCommand(options) {
|
|
|
556
563
|
logger_1.logger.info('');
|
|
557
564
|
if (options.prompt) {
|
|
558
565
|
const prompt = buildModuleAnalysisPrompt(iterDir, result, iter);
|
|
559
|
-
|
|
566
|
+
await emitAiPrompt(iter, prompt, { mode: 'module-analysis' });
|
|
560
567
|
process.exitCode = 10;
|
|
561
568
|
return;
|
|
562
569
|
}
|
|
@@ -670,7 +677,7 @@ async function analyzeCommand(options) {
|
|
|
670
677
|
}
|
|
671
678
|
// ── prompt 模式:生成 AI Prompt ──
|
|
672
679
|
const prompt = buildOverviewPrompt(overviewInput, coverage, crossApis, phase);
|
|
673
|
-
|
|
680
|
+
await emitAiPrompt(iter, prompt, { mode: 'overview' });
|
|
674
681
|
process.exitCode = 10;
|
|
675
682
|
return;
|
|
676
683
|
}
|
|
@@ -717,7 +724,7 @@ async function analyzeCommand(options) {
|
|
|
717
724
|
}
|
|
718
725
|
const report = await consolidateUnitAnalyses(iter, units, analyses);
|
|
719
726
|
if (options.prompt) {
|
|
720
|
-
|
|
727
|
+
await emitAiPrompt(iter, `${report}\n\n## 操作选项\n\n**选项 A:确认通过,写入所有文档**\n\`\`\`bash\nspeccore analyze --apply '[DOC:...]' -I ${iter}\n\`\`\`\n`, { mode: 'consolidate-report' });
|
|
721
728
|
process.exitCode = 10;
|
|
722
729
|
return;
|
|
723
730
|
}
|
|
@@ -769,7 +776,7 @@ async function analyzeCommand(options) {
|
|
|
769
776
|
await printUnitLoopSummary(iter, iterDir, units, loopResult);
|
|
770
777
|
return;
|
|
771
778
|
}
|
|
772
|
-
|
|
779
|
+
await emitAiPrompt(iter, `${loopResult.prompt}\n\n## 完成后继续\n\n落盘后运行以下命令,CLI 将校验产出并自动推进到下一个单元:\n\n\`\`\`bash\nspeccore analyze --resume-units -I ${iter}\n\`\`\`\n`, { mode: 'resume-units-loop' });
|
|
773
780
|
process.exitCode = 10;
|
|
774
781
|
return;
|
|
775
782
|
}
|
|
@@ -806,8 +813,7 @@ async function analyzeCommand(options) {
|
|
|
806
813
|
const targetUnit = targetUnits[0];
|
|
807
814
|
if (options.prompt) {
|
|
808
815
|
const prompt = await buildUnitAnalysisPrompt(iterDir, iter, targetUnit, units);
|
|
809
|
-
await (
|
|
810
|
-
process.stdout.write(`[SPECCORE_PROMPT]\n${prompt}`);
|
|
816
|
+
await emitAiPrompt(iter, prompt, { mode: 'unit', unit: targetUnit.id });
|
|
811
817
|
process.exitCode = 10;
|
|
812
818
|
return;
|
|
813
819
|
}
|
|
@@ -1464,7 +1470,7 @@ async function analyzeCommand(options) {
|
|
|
1464
1470
|
process.stdout.write(`[SPECCORE_CONTEXT_BUDGET: 8000]\n`);
|
|
1465
1471
|
process.stdout.write(`[SPECCORE_CONTEXT_TYPE: platform-only]\n\n`);
|
|
1466
1472
|
}
|
|
1467
|
-
|
|
1473
|
+
await emitAiPrompt(iter, finalPrompt, { mode: 'subagent-final' });
|
|
1468
1474
|
process.exitCode = 10;
|
|
1469
1475
|
return;
|
|
1470
1476
|
}
|
|
@@ -1494,7 +1500,7 @@ async function analyzeCommand(options) {
|
|
|
1494
1500
|
if (shouldClarify) {
|
|
1495
1501
|
// 需要澄清,先执行 clarify(内部已生成质量报告)
|
|
1496
1502
|
const clarifyPrompt = await buildClarifyPhasePrompt(iter);
|
|
1497
|
-
|
|
1503
|
+
await emitAiPrompt(iter, clarifyPrompt, { mode: 'clarify-phase' });
|
|
1498
1504
|
process.exitCode = 10;
|
|
1499
1505
|
return;
|
|
1500
1506
|
}
|
|
@@ -1508,7 +1514,7 @@ async function analyzeCommand(options) {
|
|
|
1508
1514
|
analyzeOptions: options,
|
|
1509
1515
|
});
|
|
1510
1516
|
const prompt = (0, prompt_builder_1.buildPromptText)(promptObj);
|
|
1511
|
-
|
|
1517
|
+
await emitAiPrompt(iter, prompt, { mode: 'analyze-host' });
|
|
1512
1518
|
process.exitCode = 10;
|
|
1513
1519
|
return;
|
|
1514
1520
|
}
|
|
@@ -1939,7 +1945,7 @@ async function analyzeCommand(options) {
|
|
|
1939
1945
|
logger_1.logger.info(` 1. 读取上述问题文档的当前内容`);
|
|
1940
1946
|
logger_1.logger.info(` 2. 根据质量报告中的错误信息补充/修正内容`);
|
|
1941
1947
|
logger_1.logger.info(` 3. 用 speccore global analyze --apply '{"文件路径":"修正后内容"}' 重新写入`);
|
|
1942
|
-
|
|
1948
|
+
await emitAiPrompt(options.iteration || 'GLOBAL', `\n# 质量门禁修复任务\n\n以下全局分析文档未通过质量校验,请修复后重新写入:\n\n`, { mode: 'global-gate-fix' });
|
|
1943
1949
|
for (const r of criticalErrors.slice(0, 5)) {
|
|
1944
1950
|
const fname = r.file.split('/').slice(-2).join('/');
|
|
1945
1951
|
const errs = r.issues.filter(i => i.severity === 'error').map(i => `- ${i.message}`).join('\n');
|
|
@@ -2656,8 +2662,7 @@ async function analyzeCommand(options) {
|
|
|
2656
2662
|
catch { /* ignore */ }
|
|
2657
2663
|
}
|
|
2658
2664
|
const prompt = await buildMultiDocPrompt('analyze', { iteration: iter, scope: options.scope, withCode: options.withCode, platform: options.platform, phase: options.phase, autoMode: options.auto }, options, needsClarify ? { needsClarify, clarifyTargets } : undefined);
|
|
2659
|
-
await (
|
|
2660
|
-
process.stdout.write(`[SPECCORE_PROMPT]\n${prompt}`);
|
|
2665
|
+
await emitAiPrompt(iter, prompt, { mode: 'analyze-main', scope: options.scope });
|
|
2661
2666
|
// v7.2.0+: 全局分析完成后输出下一步引导
|
|
2662
2667
|
if (options.scope === 'global') {
|
|
2663
2668
|
const guide = await buildGlobalAnalysisGuide(options);
|