speccore 8.3.158 → 8.3.159
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 +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +34 -72
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +0 -13
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +66 -215
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +1 -2
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +1 -4
- package/dist/commands/update.js.map +1 -1
- package/dist/core/agents/defaults/_INDEX.md +15 -15
- package/dist/core/agents/defaults/code-reviewer.md +9 -0
- package/dist/core/agents/defaults/compiler.md +12 -3
- package/dist/core/agents/defaults/dependency-analyst.md +7 -0
- package/dist/core/agents/defaults/doc-sync-agent.md +7 -0
- package/dist/core/agents/defaults/impact-analyst.md +7 -0
- package/dist/core/agents/defaults/interaction-designer.md +17 -0
- package/dist/core/agents/defaults/performance-expert.md +9 -0
- package/dist/core/agents/defaults/regression-tester.md +7 -0
- package/dist/core/agents/defaults/security-reviewer.md +9 -0
- package/dist/core/agents/defaults/test-engineer.md +10 -0
- package/dist/core/agents/defaults/test-reviewer.md +10 -0
- package/dist/core/lock-manager.d.ts.map +1 -1
- package/dist/core/lock-manager.js +2 -0
- package/dist/core/lock-manager.js.map +1 -1
- package/dist/core/rules/defaults/ANALYSIS_QUALITY.md +73 -0
- package/dist/core/rules/defaults/EXECUTION.md +20 -0
- package/dist/core/rules/defaults/ITERATION_QUALITY.md +49 -0
- package/dist/core/rules/defaults/TASK_SPLIT.md +16 -0
- package/dist/core/spec-paths.d.ts.map +1 -1
- package/dist/core/spec-paths.js +2 -1
- package/dist/core/spec-paths.js.map +1 -1
- package/package.json +4 -6
- package/templates/api-design-example.md +0 -338
- package/templates/ci/github-actions.yml +0 -44
- package/templates/dashboard.html +0 -425
- package/templates/database-example.md +0 -223
- package/templates/deploy-docker/README.md +0 -284
- package/templates/deploy-docker/deploy-remote.sh +0 -79
- package/templates/deploy-docker/docker-compose.yml +0 -113
- package/templates/deploy-docker/frontend.Dockerfile +0 -43
- package/templates/deploy-docker/nginx.conf +0 -30
- package/templates/deploy-examples.yaml +0 -436
- package/templates/deploy-java/Dockerfile +0 -50
- package/templates/deploy-java/README.md +0 -212
- package/templates/deploy-java/deploy.sh +0 -120
- package/templates/deploy-java/spring-boot.service +0 -35
- package/templates/html/speccore-ask-explain.html +0 -10
- package/templates/html/speccore-ask-guide.html +0 -10
- package/templates/html/speccore-ask-match.html +0 -10
- package/templates/html/speccore-ask-pipeline.html +0 -1
- package/templates/html/speccore-ask-result.html +0 -10
- package/templates/html/speccore-demo.html +0 -449
- package/templates/html/speccore-dev.html +0 -202
- package/templates/html/speccore-help.html +0 -1
- package/templates/html/speccore-knowledge-graph.html +0 -656
- package/templates/html/speccore-retro-T-001.html +0 -1
- package/templates/html/speccore-setup-guide.html +0 -289
- package/templates/html/speccore-welcome.html +0 -1
- package/templates/security-example.md +0 -226
- package/templates/verify-spec-example.yaml +0 -982
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAoEA,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
|
@@ -1072,13 +1072,6 @@ ${singlePrompt}`);
|
|
|
1072
1072
|
const { detectProfessionalLevel } = await Promise.resolve().then(() => __importStar(require('../core/requirement-clarifier')));
|
|
1073
1073
|
const reqDir = (0, path_1.join)(iterDir, '010-requirements');
|
|
1074
1074
|
const requirements = [];
|
|
1075
|
-
// v8.3.158+: 优先读取根目录下的需求文档(用户直接放置)
|
|
1076
|
-
if (await (0, fs_extra_1.pathExists)(reqDir)) {
|
|
1077
|
-
const rootFiles = await (0, fs_extra_2.readdir)(reqDir);
|
|
1078
|
-
for (const f of rootFiles.filter((f) => f.endsWith('.md') && !['INDEX.md', 'README.md', 'CLARIFY_REPORT.md', 'CHANGELOG.md'].includes(f))) {
|
|
1079
|
-
requirements.push((0, path_1.join)(reqDir, f));
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
1075
|
const reqIndex = (0, path_1.join)(reqDir, 'INDEX.md');
|
|
1083
1076
|
if (await (0, fs_extra_1.pathExists)(reqIndex))
|
|
1084
1077
|
requirements.push(reqIndex);
|
|
@@ -1540,12 +1533,7 @@ ${singlePrompt}`);
|
|
|
1540
1533
|
printBackupSummary();
|
|
1541
1534
|
return;
|
|
1542
1535
|
}
|
|
1543
|
-
catch
|
|
1544
|
-
// v8.3.158+: JSON 解析失败时给出明确警告,避免静默 fallback 导致用户困惑
|
|
1545
|
-
logger_1.logger.warn('⚠️ 多文档 JSON 解析失败,回退到单文件模式');
|
|
1546
|
-
logger_1.logger.warn(' 原因: AI 输出的 --apply 内容不是合法 JSON 格式');
|
|
1547
|
-
logger_1.logger.info(' 建议: 使用 [DOC:filename] 标记格式,或将 JSON 写入文件后用 --apply @file.json');
|
|
1548
|
-
logger_1.logger.info(' 当前内容将作为单文件 ANALYSIS.md 写入(内容可能不完整)');
|
|
1536
|
+
catch {
|
|
1549
1537
|
// fallback to single-file mode
|
|
1550
1538
|
}
|
|
1551
1539
|
}
|
|
@@ -4238,12 +4226,7 @@ sequenceDiagram
|
|
|
4238
4226
|
if (iterDir) {
|
|
4239
4227
|
const specDir = (0, path_1.join)(iterDir, '020-specs');
|
|
4240
4228
|
const platforms = await (0, spec_paths_1.parsePlatformList)();
|
|
4241
|
-
|
|
4242
|
-
const features = await (0, spec_paths_1.parseFeatureList)(iterDir);
|
|
4243
|
-
const useFeatureMode = features.length > 0;
|
|
4244
|
-
const manifest = useFeatureMode
|
|
4245
|
-
? (0, spec_skeleton_1.computeFeatureBasedAnalyzeManifest)(features, platforms, undefined, ctx.iteration)
|
|
4246
|
-
: (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, undefined, ctx.iteration);
|
|
4229
|
+
const manifest = (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, undefined, ctx.iteration);
|
|
4247
4230
|
perDocStatus = await (0, spec_skeleton_1.detectSkeletonProgress)(specDir, manifest);
|
|
4248
4231
|
if (perDocStatus.nextUnfilled) {
|
|
4249
4232
|
const nextDocName = perDocStatus.nextUnfilled.docName;
|
|
@@ -4299,47 +4282,41 @@ sequenceDiagram
|
|
|
4299
4282
|
if (missingDocs.length > 0) {
|
|
4300
4283
|
logger_1.logger.warn(`⚠️ DOC_MATRIX 交叉校验发现 ${missingDocs.length} 个全局文档缺失(不在骨架清单中但应该存在): ${missingDocs.join(', ')}`);
|
|
4301
4284
|
logger_1.logger.info(`🔧 自动补建骨架文件...`);
|
|
4302
|
-
//
|
|
4303
|
-
const missingEntries = (
|
|
4304
|
-
|
|
4305
|
-
: (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, '1', ctx.iteration)).filter(e => missingDocs.includes(e.docName));
|
|
4285
|
+
// 为缺失文档补建骨架
|
|
4286
|
+
const missingEntries = (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, '1', ctx.iteration)
|
|
4287
|
+
.filter(e => missingDocs.includes(e.docName));
|
|
4306
4288
|
if (missingEntries.length > 0) {
|
|
4307
4289
|
await (0, spec_skeleton_1.generateSkeleton)(specDir, missingEntries);
|
|
4308
4290
|
logger_1.logger.info(`✅ 已补建 ${missingEntries.length} 个骨架文件,请继续填充`);
|
|
4309
4291
|
// 重新检测进度(现在有了新骨架)
|
|
4310
|
-
const newManifest =
|
|
4311
|
-
? (0, spec_skeleton_1.computeFeatureBasedAnalyzeManifest)(features, platforms, undefined, ctx.iteration)
|
|
4312
|
-
: (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, undefined, ctx.iteration);
|
|
4292
|
+
const newManifest = (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, undefined, ctx.iteration);
|
|
4313
4293
|
perDocStatus = await (0, spec_skeleton_1.detectSkeletonProgress)(specDir, newManifest);
|
|
4314
4294
|
}
|
|
4315
4295
|
}
|
|
4316
4296
|
// v8.1.1+: Phase 2 平台文档交叉校验
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
const
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
if (!await (0, fs_extra_1.pathExists)(docPath)) {
|
|
4325
|
-
missingPlatformDocs.push(`${platform}/${doc}`);
|
|
4326
|
-
}
|
|
4297
|
+
const expectedPlatformDocs = PLATFORM_DOCS.filter(d => includeDocs.includes(d));
|
|
4298
|
+
const missingPlatformDocs = [];
|
|
4299
|
+
for (const platform of platforms) {
|
|
4300
|
+
for (const doc of expectedPlatformDocs) {
|
|
4301
|
+
const docPath = (0, path_1.join)(specDir, platform, doc);
|
|
4302
|
+
if (!await (0, fs_extra_1.pathExists)(docPath)) {
|
|
4303
|
+
missingPlatformDocs.push(`${platform}/${doc}`);
|
|
4327
4304
|
}
|
|
4328
4305
|
}
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
|
|
4306
|
+
}
|
|
4307
|
+
if (missingPlatformDocs.length > 0) {
|
|
4308
|
+
logger_1.logger.warn(`⚠️ DOC_MATRIX 交叉校验发现 ${missingPlatformDocs.length} 个平台文档缺失: ${missingPlatformDocs.slice(0, 5).join(', ')}${missingPlatformDocs.length > 5 ? '...' : ''}`);
|
|
4309
|
+
logger_1.logger.info(`🔧 自动补建平台骨架文件...`);
|
|
4310
|
+
const missingPlatformEntries = (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, '2', ctx.iteration)
|
|
4311
|
+
.filter(e => {
|
|
4312
|
+
const relName = e.relPath; // e.g. "overview/TECH.md" relative to specDir
|
|
4313
|
+
return missingPlatformDocs.some(mp => relName.endsWith(mp) || mp.endsWith(relName));
|
|
4314
|
+
});
|
|
4315
|
+
if (missingPlatformEntries.length > 0) {
|
|
4316
|
+
await (0, spec_skeleton_1.generateSkeleton)(specDir, missingPlatformEntries);
|
|
4317
|
+
logger_1.logger.info(`✅ 已补建 ${missingPlatformEntries.length} 个平台骨架文件,请继续填充`);
|
|
4318
|
+
const newManifest = (0, spec_skeleton_1.computeAnalyzeManifest)(platforms, undefined, ctx.iteration);
|
|
4319
|
+
perDocStatus = await (0, spec_skeleton_1.detectSkeletonProgress)(specDir, newManifest);
|
|
4343
4320
|
}
|
|
4344
4321
|
}
|
|
4345
4322
|
}
|
|
@@ -4615,19 +4592,6 @@ status: "clarified"
|
|
|
4615
4592
|
else {
|
|
4616
4593
|
// 回退:从 010-requirements/ 读取原始需求
|
|
4617
4594
|
const reqDir = (0, path_1.join)(iterDirForCtx, '010-requirements');
|
|
4618
|
-
// v8.3.158+: 优先读取根目录下的 .md 文件(用户直接放置的需求文档)
|
|
4619
|
-
const rootFiles = (await Promise.resolve().then(() => __importStar(require('fs-extra')))).readdirSync(reqDir).filter((f) => f.endsWith('.md') && !['INDEX.md', 'README.md', 'CLARIFY_REPORT.md', 'CHANGELOG.md'].includes(f));
|
|
4620
|
-
if (rootFiles.length > 0) {
|
|
4621
|
-
for (const f of rootFiles.slice(0, 10)) {
|
|
4622
|
-
const filePath = (0, path_1.join)(reqDir, f);
|
|
4623
|
-
let content = await (await Promise.resolve().then(() => __importStar(require('fs-extra')))).readFile(filePath, 'utf-8');
|
|
4624
|
-
content = await (0, prompt_builder_1.processMarkdownContent)(content, filePath, seenPaths, undefined, {
|
|
4625
|
-
maxLinkDepth: 2, maxLinkChars: 1200, maxSvgChars: 1500,
|
|
4626
|
-
});
|
|
4627
|
-
prdContent += `\n### ${f}\n${content.slice(0, 3000)}\n`;
|
|
4628
|
-
}
|
|
4629
|
-
}
|
|
4630
|
-
// 再读取子目录中的需求文档(兼容旧结构)
|
|
4631
4595
|
const prdSources = (0, path_1.join)(reqDir, 'sources');
|
|
4632
4596
|
const prdConverted = (0, path_1.join)(reqDir, 'converted');
|
|
4633
4597
|
const prdFeatures = (0, path_1.join)(reqDir, 'features');
|
|
@@ -4822,13 +4786,12 @@ status: "clarified"
|
|
|
4822
4786
|
prompt += ` ⚠️ 如果全局层产物不存在,跳过该项,继续后续分析\n\n`;
|
|
4823
4787
|
prompt += `3. 读取迭代需求文档(按优先级顺序):\n`;
|
|
4824
4788
|
prompt += ` a. 先读 010-requirements/INDEX.md — 了解需求全貌和文件清单\n`;
|
|
4825
|
-
prompt += ` b. 再读 010-requirements
|
|
4826
|
-
prompt += ` c. 再读 010-requirements/
|
|
4827
|
-
prompt += ` d.
|
|
4828
|
-
prompt += ` e. 读取 010-requirements/prototypes/ — 原型文件(HTML/图片/链接均读取)\n`;
|
|
4789
|
+
prompt += ` b. 再读 010-requirements/converted/*.md — doc2spec 转换后的核心规格(主要依据)\n`;
|
|
4790
|
+
prompt += ` c. 再读 010-requirements/features/*/README.md — 功能级补充需求\n`;
|
|
4791
|
+
prompt += ` d. 读取 010-requirements/prototypes/ — 原型文件(HTML/图片/链接均读取)\n`;
|
|
4829
4792
|
prompt += ` ⚠️ 需求文档中链接到原型的(如 \`\` 或 \`详见 prototypes/xxx.html\`),必须主动 Read 该原型文件\n`;
|
|
4830
|
-
prompt += `
|
|
4831
|
-
prompt += `
|
|
4793
|
+
prompt += ` e. 如用户指定了特定文档,优先读取指定文件;如要求全部,再读 sources/ 原始文档\n`;
|
|
4794
|
+
prompt += ` f. **文档长度自适应**:如果单个需求文档超过 5000 字,先快速扫描目录和章节标题,标记关键章节,再深入阅读。不要在非关键章节上花费过多 tokens\n`;
|
|
4832
4795
|
prompt += `4. 读懂需求文档后,按专业模板标准自由撰写每个文档(不是填空表)\n`;
|
|
4833
4796
|
prompt += `5. **文档忠实度约束(最高优先级)**:\n`;
|
|
4834
4797
|
prompt += ` - **严禁臆造**:只能写需求文档中明确提及的功能、接口、页面、字段、业务规则\n`;
|
|
@@ -5464,11 +5427,10 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
5464
5427
|
prompt += `\n## 读取需求文档\n\n`;
|
|
5465
5428
|
prompt += `依次读取以下文档(按优先级):\n`;
|
|
5466
5429
|
prompt += `1. \`010-requirements/INDEX.md\` — 需求全貌\n`;
|
|
5467
|
-
prompt += `2. \`010-requirements
|
|
5430
|
+
prompt += `2. \`010-requirements/sources/*.md\` — 原始需求(主要依据)\n`;
|
|
5468
5431
|
prompt += `3. \`010-requirements/converted/*.md\` — 已转换文档\n`;
|
|
5469
5432
|
prompt += `4. \`010-requirements/features/*/README.md\` — 功能级补充\n`;
|
|
5470
|
-
prompt += `5. \`010-requirements/prototypes/\` — 原型文件\n`;
|
|
5471
|
-
prompt += `6. \`010-requirements/sources/*.md\` — 原始需求(补充参考)\n\n`;
|
|
5433
|
+
prompt += `5. \`010-requirements/prototypes/\` — 原型文件\n\n`;
|
|
5472
5434
|
// v8.2.0+: 如果检测到多个功能单元,启用单元化澄清模式
|
|
5473
5435
|
if (hasMultipleUnits) {
|
|
5474
5436
|
prompt += `## ⚠️ 功能单元拆分澄清模式(v8.2.0+)\n\n`;
|