speccore 8.3.166 → 8.3.168
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 +6 -3
- package/dist/commands/analyze.d.ts +1 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +59 -9
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +25 -0
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/core/pipeline-engine.d.ts +2 -0
- package/dist/core/pipeline-engine.d.ts.map +1 -1
- package/dist/core/pipeline-engine.js +44 -4
- package/dist/core/pipeline-engine.js.map +1 -1
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +13 -2
- package/dist/core/prompt-builder.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -337,7 +337,7 @@ speccore status # 查看分析进度和过
|
|
|
337
337
|
|
|
338
338
|
```bash
|
|
339
339
|
npm install -g speccore
|
|
340
|
-
speccore --version # v8.3.
|
|
340
|
+
speccore --version # v8.3.167
|
|
341
341
|
```
|
|
342
342
|
|
|
343
343
|
## 命令列表
|
|
@@ -380,15 +380,18 @@ speccore --version # v8.3.95
|
|
|
380
380
|
- **终端**:Unicode 框线美化输出
|
|
381
381
|
- **AI 调用**:自动生成 Ocean 主题 HTML 页面(四边脉冲扫描线)
|
|
382
382
|
|
|
383
|
-
## 🤖
|
|
383
|
+
## 🤖 多层 AI 架构(v8.3.167+)
|
|
384
384
|
|
|
385
385
|
```
|
|
386
386
|
@spec-ask "..." (AI IDE 入口)
|
|
387
387
|
├─ 🧠 自有 LLM → OpenAI / Ollama(SPECCORE_LLM_KEY 环境变量)
|
|
388
388
|
├─ 🤖 宿主 AI → WorkBuddy / TRAE / Qoder(自动检测)
|
|
389
|
-
|
|
389
|
+
├─ 📐 规则引擎 → 18 条命令 KB + 4 预定义工作流(永远可用)
|
|
390
|
+
└─ 🎭 多 Subagent → 按阶段/端/模块分配专属角色(步骤隔离)
|
|
390
391
|
```
|
|
391
392
|
|
|
393
|
+
**多 Subagent 协作**:大项目自动启用功能模块级分批,每个模块由独立 Agent 深入分析,避免上下文溢出。
|
|
394
|
+
|
|
392
395
|
零配置:没配 Key 自动降级,功能不受影响。
|
|
393
396
|
|
|
394
397
|
## 📖 文档
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAuEA,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,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,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,MAAM,CAAC;IACxC,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,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;IAElB,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;IAErB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAuGD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/analyze.js
CHANGED
|
@@ -844,11 +844,26 @@ async function analyzeCommand(options) {
|
|
|
844
844
|
initStep = 'init';
|
|
845
845
|
}
|
|
846
846
|
else {
|
|
847
|
-
// 迭代层:使用 createAnalyzePipeline(支持契约先行 + 逐端推进 + 变更感知 + 关键路径优先 +
|
|
847
|
+
// 迭代层:使用 createAnalyzePipeline(支持契约先行 + 逐端推进 + 变更感知 + 关键路径优先 + 需求澄清 + 功能模块分批)
|
|
848
|
+
// v8.3.167+: 大项目自动启用功能模块分批
|
|
849
|
+
let features;
|
|
850
|
+
try {
|
|
851
|
+
const iterDirForFeatures = await (0, context_1.getIterationDir)(iter);
|
|
852
|
+
if (iterDirForFeatures) {
|
|
853
|
+
const { parseFeatureList } = await Promise.resolve().then(() => __importStar(require('../core/spec-paths')));
|
|
854
|
+
const featureList = await parseFeatureList(iterDirForFeatures);
|
|
855
|
+
if (featureList.length > 2) {
|
|
856
|
+
features = featureList;
|
|
857
|
+
logger_1.logger.info(`📦 检测到 ${featureList.length} 个功能模块,启用分批分析模式`);
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
catch { /* 忽略功能模块检测失败 */ }
|
|
848
862
|
const result = await (0, pipeline_engine_1.createAnalyzePipeline)(iter, _projectRoot, {
|
|
849
863
|
affectedPlatforms: affectedPlatforms && affectedPlatforms.length > 0 ? affectedPlatforms : undefined,
|
|
850
864
|
platformOrder: platformOrder && platformOrder.length > 0 ? platformOrder : undefined,
|
|
851
865
|
skipClarify: options.skipClarify,
|
|
866
|
+
features,
|
|
852
867
|
});
|
|
853
868
|
engine = result.engine;
|
|
854
869
|
steps = result.steps;
|
|
@@ -871,6 +886,8 @@ async function analyzeCommand(options) {
|
|
|
871
886
|
// 根据当前步骤生成对应的 prompt
|
|
872
887
|
let prompt;
|
|
873
888
|
const platformMatch = currentStep.match(/^platform-(.+)-prompt$/);
|
|
889
|
+
// v8.3.167+: 检测功能模块步骤
|
|
890
|
+
const featureMatch = currentStep.match(/^feature-(.+)-prompt$/);
|
|
874
891
|
if (isGlobalScope) {
|
|
875
892
|
// 全局层 Pipeline 步骤映射
|
|
876
893
|
if (currentStep === 'init' || currentStep === 'discovery') {
|
|
@@ -913,6 +930,14 @@ async function analyzeCommand(options) {
|
|
|
913
930
|
analyzeOptions: options,
|
|
914
931
|
}));
|
|
915
932
|
}
|
|
933
|
+
else if (featureMatch) {
|
|
934
|
+
// v8.3.167+: 功能模块级分析步骤
|
|
935
|
+
const featureName = featureMatch[1];
|
|
936
|
+
prompt = (0, prompt_builder_1.buildPromptText)(await (0, prompt_builder_1.buildPrompt)('analyze', {
|
|
937
|
+
iteration: iter,
|
|
938
|
+
analyzeOptions: { ...options, feature: featureName, phase: '1' },
|
|
939
|
+
}));
|
|
940
|
+
}
|
|
916
941
|
else if (currentStep === 'contract-prompt') {
|
|
917
942
|
// 契约先行阶段:基于 Phase 1 文档生成跨端契约
|
|
918
943
|
prompt = await buildContractFirstPrompt(iter);
|
|
@@ -955,11 +980,13 @@ async function analyzeCommand(options) {
|
|
|
955
980
|
? 'Phase 0/3: 需求确认'
|
|
956
981
|
: currentStep === 'phase1-prompt'
|
|
957
982
|
? 'Phase 1/3: 迭代综合文档'
|
|
958
|
-
:
|
|
959
|
-
?
|
|
960
|
-
:
|
|
961
|
-
?
|
|
962
|
-
:
|
|
983
|
+
: featureMatch
|
|
984
|
+
? `Phase 1b/3: ${featureMatch[1]} 功能模块分析`
|
|
985
|
+
: currentStep === 'contract-prompt'
|
|
986
|
+
? 'Phase 2/3: 契约定义'
|
|
987
|
+
: platformMatch
|
|
988
|
+
? `Phase 2/3: ${platformMatch[1]} 端专属文档`
|
|
989
|
+
: 'Pipeline';
|
|
963
990
|
}
|
|
964
991
|
// v8.3.160+: 步骤隔离模式,每步完成后需新会话继续
|
|
965
992
|
const finalPrompt = prompt + `\n\n## ⚠️ Pipeline 模式:步骤隔离 (${progressLabel})\n\n` +
|
|
@@ -967,8 +994,15 @@ async function analyzeCommand(options) {
|
|
|
967
994
|
`当你通过 --apply 写入文档后,CLI 会自动输出 [SPECCORE_STEP_DONE] 标记和下一步命令。\n\n` +
|
|
968
995
|
`**看到 [SPECCORE_STEP_DONE] 后,请在新会话中执行提示的命令**,继续下一步。\n`;
|
|
969
996
|
// v8.3.166+: Phase 2 端级步骤输出端级 subagent 标记
|
|
997
|
+
// v8.3.167+: 功能模块步骤输出功能模块级 subagent 标记
|
|
970
998
|
const platformSubagent = platformMatch ? `spec-analyzer-${platformMatch[1]}` : undefined;
|
|
971
|
-
|
|
999
|
+
const featureSubagent = featureMatch ? `spec-analyzer-feature` : undefined;
|
|
1000
|
+
if (featureSubagent) {
|
|
1001
|
+
process.stdout.write(`[SPECCORE_SUBAGENT: ${featureSubagent}]\n`);
|
|
1002
|
+
process.stdout.write(`[SPECCORE_CONTEXT_BUDGET: 10000]\n`);
|
|
1003
|
+
process.stdout.write(`[SPECCORE_CONTEXT_TYPE: full]\n\n`);
|
|
1004
|
+
}
|
|
1005
|
+
else if (platformSubagent) {
|
|
972
1006
|
process.stdout.write(`[SPECCORE_SUBAGENT: ${platformSubagent}]\n`);
|
|
973
1007
|
process.stdout.write(`[SPECCORE_CONTEXT_BUDGET: 8000]\n`);
|
|
974
1008
|
process.stdout.write(`[SPECCORE_CONTEXT_TYPE: platform-only]\n\n`);
|
|
@@ -4475,7 +4509,13 @@ sequenceDiagram
|
|
|
4475
4509
|
const GLOBAL_DOCS = [...GLOBAL_INDEX_DOCS, ...FEATURE_OVERVIEW_DOCS_LIST];
|
|
4476
4510
|
let taskDocs = docs.filter(([n]) => includeDocs.includes(n));
|
|
4477
4511
|
if (ctx.phase === '1') {
|
|
4478
|
-
|
|
4512
|
+
if (ctx.feature) {
|
|
4513
|
+
// v8.3.167+: 功能模块级分析,只生成该模块的 overview 文档(不含全局索引)
|
|
4514
|
+
taskDocs = taskDocs.filter(([n]) => FEATURE_OVERVIEW_DOCS_LIST.includes(n));
|
|
4515
|
+
}
|
|
4516
|
+
else {
|
|
4517
|
+
taskDocs = taskDocs.filter(([n]) => GLOBAL_DOCS.includes(n));
|
|
4518
|
+
}
|
|
4479
4519
|
}
|
|
4480
4520
|
else if (ctx.phase === '2') {
|
|
4481
4521
|
taskDocs = taskDocs.filter(([n]) => PLATFORM_DOCS.includes(n));
|
|
@@ -4664,7 +4704,8 @@ sequenceDiagram
|
|
|
4664
4704
|
// overview/TECH.md: 整体架构
|
|
4665
4705
|
techDoc[1] = `# 技术架构(跨端全局)\n\n> ${iter}\n\n## 写作要求\n撰写整体技术架构,覆盖所有端的交互关系:\n- 系统整体分层设计(各端在架构中的位置)\n- 跨端交互协议(前端↔后端通信方式、数据流向)\n- 中间件选型(缓存、消息队列、网关等)\n- 数据库整体设计(核心表结构、ER 关系)\n- 技术栈选型及理由\n`;
|
|
4666
4706
|
}
|
|
4667
|
-
|
|
4707
|
+
const featureLabel = ctx.feature ? ` · 功能模块:${ctx.feature}` : '';
|
|
4708
|
+
let prompt = `\n# 任务: ${command}${task} (${taskDocs.length}个文档 · ${isTask ? `类型:${taskType}` : '迭代全量'}${ctx.phase ? ` · Phase ${ctx.phase}` : ''}${featureLabel})\n\n`;
|
|
4668
4709
|
// v8.3.160+: 注入子 Agent 角色定义
|
|
4669
4710
|
if (agentContextText) {
|
|
4670
4711
|
prompt = agentContextText + '\n\n' + prompt;
|
|
@@ -4898,6 +4939,15 @@ status: "clarified"
|
|
|
4898
4939
|
prompt += `- 如果文档内容不完整,标注"文档未提及",不要自行脑补\n`;
|
|
4899
4940
|
prompt += `- 分析过程中,始终把迭代名称当作透明信息处理,不做任何功能推断\n\n`;
|
|
4900
4941
|
prompt += `## 分析范围说明\n`;
|
|
4942
|
+
// v8.3.167+: 功能模块级分析专属指令
|
|
4943
|
+
if (ctx.feature && !isTask) {
|
|
4944
|
+
prompt += `- 当前是**功能模块级分析**,只分析「**${ctx.feature}**」功能模块\n`;
|
|
4945
|
+
prompt += `- **只生成该功能模块的 overview/ 文档**,不要分析其他功能模块\n`;
|
|
4946
|
+
prompt += `- 文档写入路径格式:\`${ctx.feature}/overview/{文件名}\`(如 \`${ctx.feature}/overview/REQUIREMENT.md\`)\n`;
|
|
4947
|
+
prompt += `- **全局索引文档(FUNCTION_MAP.md / INTERACTION_MAP.md / PLATFORMS.md)已在 Phase 1 主步骤生成,不要重复生成**\n`;
|
|
4948
|
+
prompt += `- 分析前请先 Read 全局索引文档,确保本模块内容与全局文档一致\n`;
|
|
4949
|
+
prompt += `- 如果需求文档中该模块的描述不完整,标注"文档未充分描述",不要自行脑补\n\n`;
|
|
4950
|
+
}
|
|
4901
4951
|
if (isTask) {
|
|
4902
4952
|
prompt += `- 当前是**任务级分析**,类型为 \`${taskType}\`,只需产出 ${taskDocs.length} 个文档:${taskDocs.map(([n]) => n).join('、')}\n`;
|
|
4903
4953
|
prompt += `- bugfix: 聚焦根因分析和修复验证;research: 聚焦技术调研;review: 聚焦代码审查\n`;
|