speccore 6.77.6 → 6.79.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.
- package/dist/commands/analyze.js +50 -50
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/audit.js +5 -5
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +47 -104
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/iteration/split.js +83 -35
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/core/ai-context-generator.js +1 -1
- package/dist/core/ai-context-generator.js.map +1 -1
- package/dist/core/analyze-context-guard.js +5 -5
- package/dist/core/analyze-context-guard.js.map +1 -1
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +12 -3
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/incremental-analyzer.js +6 -6
- package/dist/core/incremental-analyzer.js.map +1 -1
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +8 -0
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/module-analyzer.js +15 -15
- package/dist/core/module-analyzer.js.map +1 -1
- package/dist/core/next-steps.js +1 -1
- package/dist/core/next-steps.js.map +1 -1
- package/dist/core/platform-addition.js +6 -6
- package/dist/core/platform-addition.js.map +1 -1
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +48 -6
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/spec-paths.d.ts +8 -8
- package/dist/core/spec-paths.d.ts.map +1 -1
- package/dist/core/spec-paths.js +14 -9
- package/dist/core/spec-paths.js.map +1 -1
- package/dist/core/streaming-analyzer.d.ts.map +1 -1
- package/dist/core/streaming-analyzer.js +22 -19
- package/dist/core/streaming-analyzer.js.map +1 -1
- package/dist/core/verify-engine.d.ts +7 -0
- package/dist/core/verify-engine.d.ts.map +1 -1
- package/dist/core/verify-engine.js +57 -0
- package/dist/core/verify-engine.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/analyze.js
CHANGED
|
@@ -872,7 +872,7 @@ async function analyzeCommand(options) {
|
|
|
872
872
|
}
|
|
873
873
|
}
|
|
874
874
|
// v6.72.0+: FUNCTION_MAP.md 自检
|
|
875
|
-
const fmContent = docs['FUNCTION_MAP.md'] || docs['global/FUNCTION_MAP.md'];
|
|
875
|
+
const fmContent = docs['FUNCTION_MAP.md'] || docs['overview/FUNCTION_MAP.md'] || docs['global/FUNCTION_MAP.md'];
|
|
876
876
|
if (fmContent) {
|
|
877
877
|
const platforms = Array.from(validPlatforms);
|
|
878
878
|
const fmResult = validateFunctionMap(fmContent, platforms);
|
|
@@ -941,7 +941,7 @@ async function analyzeCommand(options) {
|
|
|
941
941
|
}
|
|
942
942
|
}
|
|
943
943
|
else {
|
|
944
|
-
// 迭代级:写 020-specs/
|
|
944
|
+
// 迭代级:写 020-specs/overview/(迭代综合文档,v6.78.0+)
|
|
945
945
|
const specDir = (0, path_1.join)(iterDir, '020-specs');
|
|
946
946
|
const globalDir = (0, path_1.join)(specDir, spec_paths_1.GLOBAL_SPECS_DIR);
|
|
947
947
|
await (0, fs_extra_1.ensureDir)(globalDir);
|
|
@@ -953,7 +953,7 @@ async function analyzeCommand(options) {
|
|
|
953
953
|
logger_1.logger.info(` 📦 旧版已备份: ${iterBackup.split('/').pop()}`);
|
|
954
954
|
}
|
|
955
955
|
await (0, fs_extra_1.writeFile)(iterAnalysisPath, options.apply);
|
|
956
|
-
logger_1.logger.success(`✅ ANALYSIS.md 已写入 020-specs/
|
|
956
|
+
logger_1.logger.success(`✅ ANALYSIS.md 已写入 020-specs/overview/`);
|
|
957
957
|
}
|
|
958
958
|
else {
|
|
959
959
|
logger_1.logger.info(` ⏭️ 用户取消覆盖`);
|
|
@@ -1085,11 +1085,11 @@ async function analyzeCommand(options) {
|
|
|
1085
1085
|
// 检查是否有多个端
|
|
1086
1086
|
const platforms = await (0, spec_paths_1.parsePlatformList)();
|
|
1087
1087
|
// 只有多端项目(≥2 个端)才需要分两阶段:
|
|
1088
|
-
// - Phase 1: 生成综合文档(
|
|
1088
|
+
// - Phase 1: 生成综合文档(overview/REQUIREMENT.md、ANALYSIS.md、DEPS.md)
|
|
1089
1089
|
// - Phase 2: 生成各端专属文档({端}/TECH.md、TEST.md、UI_SPEC.md)
|
|
1090
1090
|
//
|
|
1091
1091
|
// 单端项目(=1 个端)不需要分阶段:
|
|
1092
|
-
// - Phase 1 生成的
|
|
1092
|
+
// - Phase 1 生成的 overview/TECH.md 本身就是该端的专属文档
|
|
1093
1093
|
// - 不需要再生成 {端}/TECH.md(会重复)
|
|
1094
1094
|
if (platforms.length >= 2) {
|
|
1095
1095
|
logger_1.logger.info('');
|
|
@@ -1788,7 +1788,7 @@ async function buildMultiDocPrompt(command, ctx, options) {
|
|
|
1788
1788
|
- 缓存策略/并发与事务/消息队列(如涉及)
|
|
1789
1789
|
- 安全:SQL注入防护/接口鉴权/数据脱敏
|
|
1790
1790
|
- 性能:QPS预估/慢查询优化/连接池配置
|
|
1791
|
-
- **不要写**用户旅程、业务场景、页面清单(这些在
|
|
1791
|
+
- **不要写**用户旅程、业务场景、页面清单(这些在 overview/REQUIREMENT.md 中)
|
|
1792
1792
|
|
|
1793
1793
|
### 前端端(h5 / admin-web / miniapp)— 产品+技术双视角
|
|
1794
1794
|
- **产品视角(主要)**:
|
|
@@ -1976,7 +1976,7 @@ sequenceDiagram
|
|
|
1976
1976
|
|
|
1977
1977
|
## 写作要求
|
|
1978
1978
|
|
|
1979
|
-
###
|
|
1979
|
+
### 迭代级 DEV_GUIDE.md(020-specs/overview/)
|
|
1980
1980
|
- **技术栈与选型决策**:每个技术点的选型理由、替代方案对比
|
|
1981
1981
|
- **代码分层规范**:目录结构、各层职责、代码组织方式
|
|
1982
1982
|
- **通用设计模式**:Repository 模式、Service 模式、策略模式等具体实现
|
|
@@ -2011,7 +2011,7 @@ sequenceDiagram
|
|
|
2011
2011
|
];
|
|
2012
2012
|
// 任务类型 × 文档矩阵: 每种类型生成哪些文档
|
|
2013
2013
|
const DOC_MATRIX = {
|
|
2014
|
-
feature: ['REQUIREMENT.md', 'ANALYSIS.md', 'TECH.md', 'TEST.md', 'REVIEW.md', 'RISK.md', 'DEPS.md', 'MONITOR.md', 'UI_SPEC.md', 'FUNCTION_MAP.md', 'INTERACTION_MAP.md'],
|
|
2014
|
+
feature: ['REQUIREMENT.md', 'ANALYSIS.md', 'TECH.md', 'TEST.md', 'REVIEW.md', 'RISK.md', 'DEPS.md', 'MONITOR.md', 'UI_SPEC.md', 'FUNCTION_MAP.md', 'INTERACTION_MAP.md', 'DEV_GUIDE.md'],
|
|
2015
2015
|
refactor: ['ANALYSIS.md', 'TECH.md', 'TEST.md', 'REVIEW.md', 'RISK.md'],
|
|
2016
2016
|
bugfix: ['ANALYSIS.md', 'TECH.md', 'TEST.md'],
|
|
2017
2017
|
research: ['ANALYSIS.md'],
|
|
@@ -2023,12 +2023,12 @@ sequenceDiagram
|
|
|
2023
2023
|
performance: ['ANALYSIS.md', 'TECH.md', 'TEST.md', 'MONITOR.md'],
|
|
2024
2024
|
};
|
|
2025
2025
|
let includeDocs = isTask ? (DOC_MATRIX[taskType] || DOC_MATRIX['feature']) : DOC_MATRIX['feature'];
|
|
2026
|
-
// v6.
|
|
2027
|
-
if (options?.devGuide) {
|
|
2028
|
-
includeDocs =
|
|
2026
|
+
// v6.78.0+: DEV_GUIDE.md 默认生成(--dev-guide 向后兼容,--no-dev-guide 可禁用)
|
|
2027
|
+
if (options?.devGuide === false) {
|
|
2028
|
+
includeDocs = includeDocs.filter(d => d !== 'DEV_GUIDE.md');
|
|
2029
2029
|
}
|
|
2030
2030
|
// ── v6.61.0+: 恢复 Phase 1/Phase 2 分步逻辑,但 CLI 自动触发 Phase 2 ──
|
|
2031
|
-
// Phase 1: 生成综合文档(
|
|
2031
|
+
// Phase 1: 生成综合文档(overview/REQUIREMENT.md、ANALYSIS.md、DEPS.md 等)
|
|
2032
2032
|
// Phase 2: 生成各端专属文档({端}/TECH.md、TEST.md、UI_SPEC.md 等)
|
|
2033
2033
|
const GLOBAL_DOCS = ['REQUIREMENT.md', 'ANALYSIS.md', 'TECH.md', 'RISK.md', 'DEPS.md', 'REVIEW.md', 'MONITOR.md', 'FUNCTION_MAP.md', 'INTERACTION_MAP.md'];
|
|
2034
2034
|
const PLATFORM_DOCS = ['TECH.md', 'TEST.md', 'UI_SPEC.md'];
|
|
@@ -2067,7 +2067,7 @@ sequenceDiagram
|
|
|
2067
2067
|
doc[1] = `# \u672c\u4efb\u52a1\u9700\u6c42\u89c4\u683c\n\n> ${iter} | ${ctx.task} | ${now}\n\n## \u5199\u4f5c\u8981\u6c42\n\u6839\u636e split \u4ea7\u51fa\u7684\u9700\u6c42\u5207\u7247\uff0c\u7ed3\u5408\u5168\u5c40\u4e0a\u4e0b\u6587\uff0c\u91cd\u65b0\u7ec4\u7ec7\u672c\u4efb\u52a1\u7684\u9700\u6c42\u89c4\u683c\uff1a\n- \u660e\u786e\u672c\u4efb\u52a1\u7684\u9a8c\u6536\u6807\u51c6\uff08\u53ef\u6d4b\u8bd5\u7684\u3001\u5177\u4f53\u7684\uff09\n- \u7ec6\u5316\u4e1a\u52a1\u89c4\u5219\u548c\u8fb9\u754c\u6761\u4ef6\n- \u5217\u51fa\u5f02\u5e38\u573a\u666f\u548c\u5904\u7406\u65b9\u5f0f\n- \u6807\u6ce8\u4e0e\u5176\u4ed6 Task \u7684\u4f9d\u8d56\u5173\u7cfb\n`;
|
|
2068
2068
|
}
|
|
2069
2069
|
else if (doc[0] === 'TECH.md') {
|
|
2070
|
-
doc[1] = `# \u672c\u4efb\u52a1\u6280\u672f\u65b9\u6848\n\n> ${iter} | ${ctx.task} | ${now}\n\n## \u5199\u4f5c\u8981\u6c42\n\u57fa\u4e8e
|
|
2070
|
+
doc[1] = `# \u672c\u4efb\u52a1\u6280\u672f\u65b9\u6848\n\n> ${iter} | ${ctx.task} | ${now}\n\n## \u5199\u4f5c\u8981\u6c42\n\u57fa\u4e8e overview/TECH.md \u7684\u6574\u4f53\u67b6\u6784\uff0c\u7ec6\u5316\u5230\u51fd\u6570/\u63a5\u53e3\u7ea7\u522b\uff1a\n- \u5177\u4f53\u7684\u63a5\u53e3\u5b9a\u4e49\uff08\u8def\u5f84/\u53c2\u6570/\u54cd\u5e94\uff09\n- \u6570\u636e\u6a21\u578b\u8bbe\u8ba1\uff08Entity/DTO/VO \u5b57\u6bb5\u6620\u5c04\uff09\n- \u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\u7684\u4f2a\u4ee3\u7801\u6216\u6d41\u7a0b\u63cf\u8ff0\n- \u524d\u7aef\u7ec4\u4ef6\u62c6\u5206\u548c\u72b6\u6001\u8bbe\u8ba1\n- \u5fc5\u987b\u4e0e overview/TECH.md \u7684\u6574\u4f53\u67b6\u6784\u4fdd\u6301\u4e00\u81f4\n`;
|
|
2071
2071
|
}
|
|
2072
2072
|
else if (doc[0] === 'TASK.md') {
|
|
2073
2073
|
doc[1] = `# \u5b9e\u65bd\u8ba1\u5212\n\n> ${iter} | ${ctx.task} | ${now}\n\n## \u5199\u4f5c\u8981\u6c42\n\u6839\u636e\u672c\u4efb\u52a1\u7684\u9700\u6c42\u548c\u6280\u672f\u65b9\u6848\uff0c\u5236\u5b9a\u5177\u4f53\u5b9e\u65bd\u6b65\u9aa4\uff1a\n- \u6309\u5f00\u53d1\u987a\u5e8f\u5217\u51fa\u5177\u4f53\u6b65\u9aa4\n- \u6bcf\u4e2a\u6b65\u9aa4\u6709\u660e\u786e\u7684\u5b8c\u6210\u6807\u51c6\n- \u6807\u6ce8\u6b65\u9aa4\u95f4\u7684\u4f9d\u8d56\u5173\u7cfb\n- \u4f30\u7b97\u6bcf\u6b65\u7684\u5de5\u4f5c\u91cf\n`;
|
|
@@ -2098,7 +2098,7 @@ sequenceDiagram
|
|
|
2098
2098
|
// ── v6.60.0+: TECH.md 模板:global/ 侧重整体架构,{端}/ 侧重端专属方案 ──
|
|
2099
2099
|
const techDoc = taskDocs.find(([n]) => n === 'TECH.md');
|
|
2100
2100
|
if (techDoc) {
|
|
2101
|
-
//
|
|
2101
|
+
// overview/TECH.md: 整体架构
|
|
2102
2102
|
techDoc[1] = `# 技术架构(跨端全局)\n\n> ${iter}\n\n## 写作要求\n撰写整体技术架构,覆盖所有端的交互关系:\n- 系统整体分层设计(各端在架构中的位置)\n- 跨端交互协议(前端↔后端通信方式、数据流向)\n- 中间件选型(缓存、消息队列、网关等)\n- 数据库整体设计(核心表结构、ER 关系)\n- 技术栈选型及理由\n`;
|
|
2103
2103
|
}
|
|
2104
2104
|
let prompt = `\n# 任务: ${command}${task} (${taskDocs.length}个文档 · ${isTask ? `类型:${taskType}` : '迭代全量'}${ctx.phase ? ` · Phase ${ctx.phase}` : ''})\n\n`;
|
|
@@ -2108,7 +2108,7 @@ sequenceDiagram
|
|
|
2108
2108
|
if (platforms.length >= 2) {
|
|
2109
2109
|
prompt += `## 📋 完整工作流程(两阶段分析)\n\n`;
|
|
2110
2110
|
prompt += `本项目检测到有 ${platforms.length} 个端(${platforms.join('、')}),需要分两阶段执行:\n\n`;
|
|
2111
|
-
prompt += `**Phase 1(当前阶段)**: 生成综合文档(
|
|
2111
|
+
prompt += `**Phase 1(当前阶段)**: 生成综合文档(overview/REQUIREMENT.md、ANALYSIS.md、DEPS.md 等)\n`;
|
|
2112
2112
|
prompt += `**Phase 2(下一阶段)**: 生成各端专属文档({端}/TECH.md、TEST.md、UI_SPEC.md 等)\n\n`;
|
|
2113
2113
|
prompt += `## ⚠️ 强制要求:Phase 1 完成后立即执行 Phase 2\n\n`;
|
|
2114
2114
|
prompt += `当你通过 --apply 写入所有综合文档后,**必须立即执行**以下命令进入 Phase 2:\n\n`;
|
|
@@ -2126,8 +2126,8 @@ sequenceDiagram
|
|
|
2126
2126
|
prompt += `- ✅ **正确行为**:只使用 CLI 预创建的 global/ 和 {端名}/ 目录,不要手动 mkdir 或 Write 到不存在的目录\n`;
|
|
2127
2127
|
prompt += `- ⚠️ **后果**:如果创建额外目录,会导致后续 split/execute 命令找不到文件,整个工作流失败\n\n`;
|
|
2128
2128
|
prompt += `### 绝对禁止直接用 Write 工具写文件\n`;
|
|
2129
|
-
prompt += `- ❌ **错误行为**:Write("020-specs/
|
|
2130
|
-
prompt += `- ✅ **正确行为**:必须通过 \`speccore analyze --apply '{"
|
|
2129
|
+
prompt += `- ❌ **错误行为**:Write("020-specs/overview/ANALYSIS.md", content) 或直接 Write 到任何路径\n`;
|
|
2130
|
+
prompt += `- ✅ **正确行为**:必须通过 \`speccore analyze --apply '{"overview/ANALYSIS.md":"...","admin-web/TECH.md":"..."}' -I ${iter}\` 写入\n`;
|
|
2131
2131
|
prompt += `- 💡 **Windows 兼容**:如果 JSON 在命令行中转义困难,先将 JSON 写入文件(如 result.json),然后执行 \`speccore analyze --apply @result.json -I ${iter}\`\n`;
|
|
2132
2132
|
prompt += `- ⚠️ **原因**:--apply 会让 CLI 自动路由文件到正确的子目录,直接 Write 会绕过这个机制,导致所有文件扁平在根目录\n\n`;
|
|
2133
2133
|
prompt += `### ✅ 正确的目录结构\n`;
|
|
@@ -2166,12 +2166,12 @@ sequenceDiagram
|
|
|
2166
2166
|
prompt += `### Step 2: 读取全局上下文(作为参考)\n`;
|
|
2167
2167
|
prompt += `- Read .speccore/CONSTITUTION.md → 项目配置\n`;
|
|
2168
2168
|
prompt += `- Read 020-specs/PLATFORMS.md → 端列表\n`;
|
|
2169
|
-
prompt += `- Read 020-specs/
|
|
2170
|
-
prompt += `- Read 020-specs/
|
|
2171
|
-
prompt += `- Read 020-specs/
|
|
2169
|
+
prompt += `- Read 020-specs/overview/REQUIREMENT.md → 迭代综合需求规格\n`;
|
|
2170
|
+
prompt += `- Read 020-specs/overview/TECH.md → 迭代综合技术架构\n`;
|
|
2171
|
+
prompt += `- Read 020-specs/overview/ANALYSIS.md → 迭代综合分析报告\n`;
|
|
2172
2172
|
prompt += `- Read 020-specs/{本任务端名}/TECH.md → 该端专属技术方案\n\n`;
|
|
2173
2173
|
prompt += `### Step 3: 撰写任务级深度分析文档\n\n`;
|
|
2174
|
-
prompt += `**REQ.md** — 本任务的需求规格(不是
|
|
2174
|
+
prompt += `**REQ.md** — 本任务的需求规格(不是 overview/REQUIREMENT.md 的复制):\n`;
|
|
2175
2175
|
prompt += `- 明确本任务的验收标准(可测试的、具体的)\n`;
|
|
2176
2176
|
prompt += `- 细化业务规则和边界条件\n`;
|
|
2177
2177
|
prompt += `- 列出本任务涉及的异常场景\n\n`;
|
|
@@ -2180,7 +2180,7 @@ sequenceDiagram
|
|
|
2180
2180
|
prompt += `- 数据模型设计(Entity/DTO/VO 字段映射)\n`;
|
|
2181
2181
|
prompt += `- 核心业务逻辑的伪代码或流程描述\n`;
|
|
2182
2182
|
prompt += `- 前端组件拆分和状态设计\n`;
|
|
2183
|
-
prompt += `- 必须与
|
|
2183
|
+
prompt += `- 必须与 overview/TECH.md 的整体架构保持一致\n\n`;
|
|
2184
2184
|
prompt += `**TASK.md** — 本任务的实施步骤:\n`;
|
|
2185
2185
|
prompt += `- 按开发顺序列出具体步骤\n`;
|
|
2186
2186
|
prompt += `- 每个步骤有明确的完成标准\n`;
|
|
@@ -2197,7 +2197,7 @@ sequenceDiagram
|
|
|
2197
2197
|
if (ctx.platform) {
|
|
2198
2198
|
prompt += `- **只分析 ${ctx.platform} 端**:从 CONSTITUTION.md 读取端列表,但只生成 ${ctx.platform} 端的专属文档\n`;
|
|
2199
2199
|
prompt += `- 在 020-specs/${ctx.platform}/ 下写入该端专属文档(ANALYSIS.md、TECH.md、TEST.md 等)\n`;
|
|
2200
|
-
prompt += `-
|
|
2200
|
+
prompt += `- 迭代综合文档写入 020-specs/overview/(REQUIREMENT.md、DEPS.md、RISK.md 等)\n`;
|
|
2201
2201
|
prompt += `- **不要生成**其他端的子目录和文档\n`;
|
|
2202
2202
|
}
|
|
2203
2203
|
// ── v6.61.0+: 阶段专属指令(Phase 2)──
|
|
@@ -2207,13 +2207,13 @@ sequenceDiagram
|
|
|
2207
2207
|
prompt += `依次 Read 以下文件,建立全局技术架构认知:\n`;
|
|
2208
2208
|
prompt += `- Read .speccore/CONSTITUTION.md\n`;
|
|
2209
2209
|
prompt += `- Read 020-specs/PLATFORMS.md → 获取端列表\n`;
|
|
2210
|
-
prompt += `- Read 020-specs/
|
|
2211
|
-
prompt += `- Read 020-specs/
|
|
2212
|
-
prompt += `- Read 020-specs/
|
|
2213
|
-
prompt += `- Read 020-specs/
|
|
2210
|
+
prompt += `- Read 020-specs/overview/REQUIREMENT.md → 需求规格\n`;
|
|
2211
|
+
prompt += `- Read 020-specs/overview/ANALYSIS.md → 分析报告\n`;
|
|
2212
|
+
prompt += `- Read 020-specs/overview/TECH.md → 整体技术架构\n`;
|
|
2213
|
+
prompt += `- Read 020-specs/overview/RISK.md、DEPS.md、REVIEW.md、MONITOR.md(如存在)\n\n`;
|
|
2214
2214
|
prompt += `### Step 2: 为每个端撰写专属文档\n`;
|
|
2215
2215
|
prompt += `根据全局上下文,为 PLATFORMS.md 中的**每个端**分别撰写:\n`;
|
|
2216
|
-
prompt += `- **{端}/TECH.md**:该端专属技术方案(必须对齐
|
|
2216
|
+
prompt += `- **{端}/TECH.md**:该端专属技术方案(必须对齐 overview/TECH.md 架构)\n`;
|
|
2217
2217
|
prompt += ` - ⚠️ **必须包含「业务-代码映射」章节**:在 TECH.md 末尾添加表格,列出本端涉及的业务模块及其对应的代码实体(文件/表/API/组件等),关系类型由你根据技术栈自主决定(如 api_controller、uses_table、page、component、route、middleware、interceptor、gateway 等)\n`;
|
|
2218
2218
|
prompt += ` - 表格格式:| 业务模块 | 代码实体 | 关系类型 | 说明 |\n`;
|
|
2219
2219
|
prompt += ` - 示例:| 会议室档案 | backend/RoomController.java | api_controller | REST 控制器 |\n`;
|
|
@@ -2221,7 +2221,7 @@ sequenceDiagram
|
|
|
2221
2221
|
prompt += `- **{端}/TEST.md**:该端专属测试计划\n`;
|
|
2222
2222
|
prompt += `- **{端}/UI_SPEC.md**:该端专属 UI 规格(仅前端端需要)\n\n`;
|
|
2223
2223
|
prompt += `### Step 3: 一致性检查\n`;
|
|
2224
|
-
prompt += `- 各端 TECH.md 的技术选型必须与
|
|
2224
|
+
prompt += `- 各端 TECH.md 的技术选型必须与 overview/TECH.md 一致\n`;
|
|
2225
2225
|
prompt += `- UI_SPEC.md 的字段映射必须与后端 API 响应字段一一对应\n`;
|
|
2226
2226
|
prompt += `- TEST.md 必须覆盖 REQUIREMENT.md 中该端的验收标准\n\n`;
|
|
2227
2227
|
prompt += `### 写入方式\n`;
|
|
@@ -2285,7 +2285,7 @@ sequenceDiagram
|
|
|
2285
2285
|
prompt += ` - 端的信息只在「功能模块清单」表格中标注,正文不区分端\n`;
|
|
2286
2286
|
// v6.49.14+: 功能模块清单必须含涉及端列 + 来源链接
|
|
2287
2287
|
// v6.71.3+: 增加「与全局层对比」列
|
|
2288
|
-
prompt += `9. **功能模块清单(重要)**:写入
|
|
2288
|
+
prompt += `9. **功能模块清单(重要)**:写入 overview/REQUIREMENT.md 时,功能模块清单表格必须包含以下列\n`;
|
|
2289
2289
|
prompt += ` - 表格格式:| # | 功能模块 | 涉及端 | 全局对比 | 来源 | 说明 |\n`;
|
|
2290
2290
|
prompt += ` - 「涉及端」:每个模块标注需要**新开发工作**的端(标准端名,逗号分隔)\n`;
|
|
2291
2291
|
prompt += ` - 「涉及」= 该端需要写新接口/新页面/新逻辑\n`;
|
|
@@ -2311,7 +2311,7 @@ sequenceDiagram
|
|
|
2311
2311
|
prompt += ` - 标注每个功能模块的「全局对比」类型(新增/扩展/重构/复用)\n`;
|
|
2312
2312
|
prompt += ` - 识别冲突:如迭代需求修改了全局层已有接口的字段/路径 → 在 RISK.md 中标注\n`;
|
|
2313
2313
|
prompt += ` - 识别依赖:如迭代的新功能依赖全局层的某个功能 → 在 FUNCTION_MAP.md「依赖任务」中标注\n\n`;
|
|
2314
|
-
prompt += `7b. **跨端功能映射表(重要)**:在 REQUIREMENT.md 完成后,必须生成
|
|
2314
|
+
prompt += `7b. **跨端功能映射表(重要)**:在 REQUIREMENT.md 完成后,必须生成 overview/FUNCTION_MAP.md\n`;
|
|
2315
2315
|
prompt += ` - 这是 split 阶段的核心输入,决定任务如何按功能单元拆分\n`;
|
|
2316
2316
|
prompt += ` - 表格格式:| # | 功能单元 | 涉及端 | 全局对比 | 共享能力 | 依赖任务 | 说明 |\n`;
|
|
2317
2317
|
prompt += ` - 「功能单元」必须与 REQUIREMENT.md 功能模块清单一一对应,不允许合并\n`;
|
|
@@ -2324,7 +2324,7 @@ sequenceDiagram
|
|
|
2324
2324
|
prompt += ` - **错误示例**(禁止):将"审批流程"和"定时任务"合并为一行\n`;
|
|
2325
2325
|
prompt += ` - FUNCTION_MAP.md 生成后,split 将**严格按此表**创建任务目录,不再由 AI 推断\n`;
|
|
2326
2326
|
// v6.70.0+: 跨端交互图谱(INTERACTION_MAP.md)
|
|
2327
|
-
prompt += `7c. **跨端交互图谱(重要)**:在 FUNCTION_MAP.md 完成后,必须生成
|
|
2327
|
+
prompt += `7c. **跨端交互图谱(重要)**:在 FUNCTION_MAP.md 完成后,必须生成 overview/INTERACTION_MAP.md\n`;
|
|
2328
2328
|
prompt += ` - 按功能单元组织,每个功能单元一个 Mermaid sequenceDiagram\n`;
|
|
2329
2329
|
prompt += ` - 展示完整的业务交互时序:用户操作 → 前端处理 → 后端调用 → 数据返回\n`;
|
|
2330
2330
|
prompt += ` - 明确标出后端服务之间的内部调用(产品文档写"系统处理"的地方)\n`;
|
|
@@ -2356,7 +2356,7 @@ sequenceDiagram
|
|
|
2356
2356
|
}
|
|
2357
2357
|
const dirStepNum = platformTypes.size > 0 ? 9 : 8;
|
|
2358
2358
|
prompt += `${dirStepNum}. **目录结构(严格遵循,禁止自创目录)**:\n`;
|
|
2359
|
-
prompt += ` - **综合文档**(跨端通用)→ 通过 --apply 写入,CLI 自动路由到 \`020-specs/
|
|
2359
|
+
prompt += ` - **综合文档**(跨端通用)→ 通过 --apply 写入,CLI 自动路由到 \`020-specs/overview/{文件名}\`\n`;
|
|
2360
2360
|
prompt += ` - REQUIREMENT.md(需求文档,含功能模块清单+涉及端列)\n`;
|
|
2361
2361
|
prompt += ` - ANALYSIS.md(需求分析)\n`;
|
|
2362
2362
|
prompt += ` - DEPS.md(依赖清单)\n`;
|
|
@@ -2383,7 +2383,7 @@ sequenceDiagram
|
|
|
2383
2383
|
prompt += `- 缓存策略/并发与事务/消息队列(如涉及)\n`;
|
|
2384
2384
|
prompt += `- 安全:SQL 注入防护/接口鉴权/数据脱敏\n`;
|
|
2385
2385
|
prompt += `- 性能:QPS 预估/慢查询优化/连接池配置\n`;
|
|
2386
|
-
prompt += `- **不需要**产品视角的需求描述(用户故事、业务场景已在
|
|
2386
|
+
prompt += `- **不需要**产品视角的需求描述(用户故事、业务场景已在 overview/REQUIREMENT.md 中)\n\n`;
|
|
2387
2387
|
prompt += `### 前端端(h5 / admin-web / miniapp)必含内容 — 产品+技术双视角\n`;
|
|
2388
2388
|
prompt += `- **产品视角(主要)**:\n`;
|
|
2389
2389
|
prompt += ` - 用户旅程:该端用户如何完成核心任务(步骤流程图)\n`;
|
|
@@ -2401,11 +2401,11 @@ sequenceDiagram
|
|
|
2401
2401
|
// v6.60.0+: 文档与端的对应关系(不再分 Phase)
|
|
2402
2402
|
// v6.71.0+: 前后端文档差异化
|
|
2403
2403
|
prompt += `### 文档与端的对应关系\n`;
|
|
2404
|
-
prompt += `- **
|
|
2405
|
-
prompt += `- **
|
|
2406
|
-
prompt += `- **
|
|
2407
|
-
prompt += `- **
|
|
2408
|
-
prompt += `- **
|
|
2404
|
+
prompt += `- **overview/REQUIREMENT.md**:整体需求(产品视角,按业务场景组织)\n`;
|
|
2405
|
+
prompt += `- **overview/ANALYSIS.md**:整体需求分析\n`;
|
|
2406
|
+
prompt += `- **overview/DEPS.md**:整体依赖清单\n`;
|
|
2407
|
+
prompt += `- **overview/FUNCTION_MAP.md**:功能单元 × 端映射表\n`;
|
|
2408
|
+
prompt += `- **overview/INTERACTION_MAP.md**:跨端交互时序图\n`;
|
|
2409
2409
|
prompt += `- **后端端(*service)/{端}/TECH.md**:纯技术视角 — 接口设计+数据模型+架构+性能\n`;
|
|
2410
2410
|
prompt += `- **前端端(h5/admin/miniapp)/{端}/TECH.md**:产品+技术双视角 — 用户旅程+页面清单+交互流程+API调用链\n`;
|
|
2411
2411
|
prompt += `- **前端端/{端}/UI_SPEC.md**:UI 规格(字段映射、组件设计、交互细节)\n`;
|
|
@@ -2526,11 +2526,11 @@ sequenceDiagram
|
|
|
2526
2526
|
prompt += `### 4. 跨文档引用一致性\n`;
|
|
2527
2527
|
prompt += `- [ ] 检查 UI_SPEC.md 中的字段映射是否与后端 API 响应字段一一对应\n`;
|
|
2528
2528
|
prompt += `- [ ] 检查 TEST.md 中的测试场景是否覆盖了 REQUIREMENT.md 中的所有验收标准\n`;
|
|
2529
|
-
prompt += `- [ ] 检查各端 TECH.md 的技术选型是否与
|
|
2529
|
+
prompt += `- [ ] 检查各端 TECH.md 的技术选型是否与 overview/TECH.md 的整体架构一致\n\n`;
|
|
2530
2530
|
prompt += `### 5. 目录结构合法性\n`;
|
|
2531
2531
|
prompt += `- [ ] 确认 --apply 的 JSON 键名只包含合法文件名或「合法端名/文件名」格式\n`;
|
|
2532
2532
|
prompt += `- [ ] **禁止**包含数字编号目录(如 1001/、1002/)、中文目录(如 错误码/)、特殊符号目录(如 .../)\n`;
|
|
2533
|
-
prompt += `- [ ] 合法格式示例:\`
|
|
2533
|
+
prompt += `- [ ] 合法格式示例:\`overview/ANALYSIS.md\`、\`admin-web/TECH.md\`、\`REQUIREMENT.md\`\n\n`;
|
|
2534
2534
|
prompt += `### 自检通过标准\n`;
|
|
2535
2535
|
prompt += `以上 5 项全部勾选通过后,方可执行 --apply 写入。如果任何一项未通过,先修正问题,重新自检,直到全部通过。\n`;
|
|
2536
2536
|
return prompt;
|
|
@@ -2560,11 +2560,11 @@ async function buildStreamingGlobalPrompt(command, ctx, options) {
|
|
|
2560
2560
|
prompt += `| :--- | :--- | :--- | :--- |\n`;
|
|
2561
2561
|
prompt += `| Phase 0 | 快速全局扫描 | 所有端并行索引 | platforms/{端}/_INDEX.md |\n`;
|
|
2562
2562
|
prompt += `| Phase 1 | 后端深度分析 | 拓扑排序,从依赖源头开始 | platforms/{后端端}/API_INVENTORY.md, DATA_MODEL.md, ... |\n`;
|
|
2563
|
-
prompt += `| Phase 2 |
|
|
2563
|
+
prompt += `| Phase 2 | 迭代综合实时更新 | 后端完成后更新迭代综合文档 | overview/API_CONTRACT.yaml, ARCHITECTURE.md, ... |\n`;
|
|
2564
2564
|
prompt += `| Phase 3 | 前端深度分析 | 对齐后端契约 | platforms/{前端端}/FEATURES.md, UI_SPEC.md, ... |\n`;
|
|
2565
|
-
prompt += `| Phase 4 | 横向关联检查 | 前后端字段/接口一致性 |
|
|
2566
|
-
prompt += `| Phase 5 | 纵向关联检查 | 功能模块跨端完整性 |
|
|
2567
|
-
prompt += `| Phase 6 | 最终核对检查 | 完整性+一致性+遗漏检测 |
|
|
2565
|
+
prompt += `| Phase 4 | 横向关联检查 | 前后端字段/接口一致性 | overview/CROSS_CHECK.md |\n`;
|
|
2566
|
+
prompt += `| Phase 5 | 纵向关联检查 | 功能模块跨端完整性 | overview/VERTICAL_CHECK.md |\n`;
|
|
2567
|
+
prompt += `| Phase 6 | 最终核对检查 | 完整性+一致性+遗漏检测 | overview/FINAL_AUDIT.md |\n\n`;
|
|
2568
2568
|
prompt += `## ⚠️ 实时关联调整机制\n\n`;
|
|
2569
2569
|
prompt += `分析过程中,如果当前阶段发现与前期文档冲突或不一致:\n`;
|
|
2570
2570
|
prompt += `1. **在当前阶段文档中标注冲突点**\n`;
|
|
@@ -2648,10 +2648,10 @@ async function buildContractFirstPrompt(iteration) {
|
|
|
2648
2648
|
prompt += `Phase 1 迭代分析已完成。现在需要在各端开始专属技术方案分析之前,**先定义跨端 API 契约**。\n\n`;
|
|
2649
2649
|
prompt += `## 读取内容\n\n`;
|
|
2650
2650
|
prompt += `1. Read .speccore/CONSTITUTION.md → 获取端列表和项目配置\n`;
|
|
2651
|
-
prompt += `2. Read 020-specs/
|
|
2652
|
-
prompt += `3. Read 020-specs/
|
|
2653
|
-
prompt += `4. Read 020-specs/
|
|
2654
|
-
prompt += `5. Read 020-specs/
|
|
2651
|
+
prompt += `2. Read 020-specs/overview/REQUIREMENT.md → 迭代综合需求规格\n`;
|
|
2652
|
+
prompt += `3. Read 020-specs/overview/ANALYSIS.md → 迭代综合分析报告\n`;
|
|
2653
|
+
prompt += `4. Read 020-specs/overview/TECH.md → 迭代综合技术架构\n`;
|
|
2654
|
+
prompt += `5. Read 020-specs/overview/DEPS.md → 依赖关系(如存在)\n\n`;
|
|
2655
2655
|
prompt += `## 输出要求\n\n`;
|
|
2656
2656
|
prompt += `基于上述文档,生成一份 **API_CONTRACT.yaml**,使用标准 YAML 格式:\n\n`;
|
|
2657
2657
|
prompt += `### 格式要求\n`;
|
|
@@ -2714,7 +2714,7 @@ async function buildContractFirstPrompt(iteration) {
|
|
|
2714
2714
|
prompt += `## 写入方式\n\n`;
|
|
2715
2715
|
prompt += `speccore analyze --apply '{"API_CONTRACT.yaml":"..."}' -I ${iteration}\n\n`;
|
|
2716
2716
|
prompt += `⚠️ **注意**:\n`;
|
|
2717
|
-
prompt += `- 契约文件写入 020-specs/
|
|
2717
|
+
prompt += `- 契约文件写入 020-specs/overview/API_CONTRACT.yaml(迭代综合共享)\n`;
|
|
2718
2718
|
prompt += `- 这是各端技术方案分析的**前置输入**,后续各端分析必须遵循此契约\n`;
|
|
2719
2719
|
prompt += `- 契约应**精确且完整**,避免后续各端分析时出现接口不一致\n\n`;
|
|
2720
2720
|
return prompt;
|