speccore 8.3.341 → 8.3.345
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.d.ts.map +1 -1
- package/dist/commands/analyze.js +53 -21
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/ask.d.ts +1 -0
- package/dist/commands/ask.d.ts.map +1 -1
- package/dist/commands/ask.js +5 -18
- package/dist/commands/ask.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -24
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/taskify.d.ts.map +1 -1
- package/dist/commands/iteration/taskify.js +5 -147
- package/dist/commands/iteration/taskify.js.map +1 -1
- package/dist/commands/welcome.d.ts.map +1 -1
- package/dist/commands/welcome.js +37 -36
- package/dist/commands/welcome.js.map +1 -1
- package/dist/core/function-map.d.ts +49 -0
- package/dist/core/function-map.d.ts.map +1 -0
- package/dist/core/function-map.js +280 -0
- package/dist/core/function-map.js.map +1 -0
- package/dist/core/page-bundle.d.ts +25 -0
- package/dist/core/page-bundle.d.ts.map +1 -0
- package/dist/core/page-bundle.js +144 -0
- package/dist/core/page-bundle.js.map +1 -0
- package/dist/core/prompt-builder.d.ts +9 -0
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +134 -2
- package/dist/core/prompt-builder.js.map +1 -1
- package/package.json +1 -1
- package/templates/html/speccore-ask-guide.html +1 -1
- package/templates/html/speccore-ask-pipeline.html +1 -1
- package/templates/html/speccore-ask-result.html +1 -1
- package/templates/html/speccore-help.html +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,WAAW,cAAc;IAAG,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE;AAEpF,wBAAsB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,WAAW,cAAc;IAAG,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE;AAEpF,wBAAsB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE5E;AAYD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAClD,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAC/B,MAAM,CAOR"}
|
package/dist/commands/welcome.js
CHANGED
|
@@ -58,39 +58,44 @@ async function welcomeCommand(_options) {
|
|
|
58
58
|
const isInit = await (0, fs_extra_1.pathExists)((0, path_1.join)(process.cwd(), '.speccore'));
|
|
59
59
|
const iteration = await (0, context_1.getDefaultIteration)('');
|
|
60
60
|
const iterName = (!iteration || iteration.includes('---') || iteration.length < 2) ? '' : iteration;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
catch { }
|
|
69
|
-
}
|
|
70
|
-
let phase = 'doc';
|
|
71
|
-
if (iterName) {
|
|
72
|
-
const reqDoc = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${iterName}`, '020-specs', 'REQUIREMENT.md');
|
|
73
|
-
if (!(await (0, fs_extra_1.pathExists)(reqDoc)))
|
|
74
|
-
phase = 'doc';
|
|
75
|
-
else if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${iterName}`, '020-specs', 'ANALYSIS.md'))))
|
|
76
|
-
phase = 'analyze';
|
|
77
|
-
else if (taskCount === 0)
|
|
78
|
-
phase = 'split';
|
|
79
|
-
else
|
|
80
|
-
phase = 'execute';
|
|
61
|
+
// 阶段与任务数统一计算(HTML 名片与联动页面共用,TTY 分支同样落盘)
|
|
62
|
+
let taskCount = 0;
|
|
63
|
+
if (iterName) {
|
|
64
|
+
try {
|
|
65
|
+
const entries = await (0, fs_extra_1.readdir)(`Iteration-${iterName}`, { withFileTypes: true });
|
|
66
|
+
taskCount = entries.filter(e => e.isDirectory() && e.name.startsWith('Task-')).length;
|
|
81
67
|
}
|
|
68
|
+
catch { }
|
|
69
|
+
}
|
|
70
|
+
let phase = 'doc';
|
|
71
|
+
if (iterName) {
|
|
72
|
+
const reqDoc = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${iterName}`, '020-specs', 'REQUIREMENT.md');
|
|
73
|
+
if (!(await (0, fs_extra_1.pathExists)(reqDoc)))
|
|
74
|
+
phase = 'doc';
|
|
75
|
+
else if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${iterName}`, '020-specs', 'ANALYSIS.md'))))
|
|
76
|
+
phase = 'analyze';
|
|
77
|
+
else if (taskCount === 0)
|
|
78
|
+
phase = 'split';
|
|
79
|
+
else
|
|
80
|
+
phase = 'execute';
|
|
81
|
+
}
|
|
82
|
+
// 落盘名片 + 补齐跳转目标(v8.3.342+:任何分支输出 [SPECCORE_WELCOME] 标记前必须写文件,
|
|
83
|
+
// 修复此前 TTY 分支输出标记但文件不存在的断链)
|
|
84
|
+
const emitPage = async () => {
|
|
82
85
|
const html = renderWelcomeHtml(version, isInit, iterName, phase, taskCount);
|
|
83
86
|
const outPath = _options.output || (0, path_1.join)(process.cwd(), 'outputs', 'welcome-SpecCore.html');
|
|
84
87
|
await (0, fs_extra_1.ensureDir)((0, path_1.join)(process.cwd(), 'outputs'));
|
|
85
88
|
await (0, fs_extra_1.writeFile)(outPath, html);
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await generatePromptsPage((0, path_1.join)(process.cwd(), 'outputs', 'speccore-prompts.html'));
|
|
91
|
-
}
|
|
92
|
-
catch { /* 联动生成失败不阻断 welcome */ }
|
|
89
|
+
// 名片内跳转目标:ask 引导页家族(含帮助页/提示词库)+ 配置引导页(已初始化时)
|
|
90
|
+
try {
|
|
91
|
+
const { ensureWelcomeTargets } = await Promise.resolve().then(() => __importStar(require('../core/page-bundle')));
|
|
92
|
+
await ensureWelcomeTargets(process.cwd(), isInit);
|
|
93
93
|
}
|
|
94
|
+
catch { /* 联动生成失败不阻断 welcome */ }
|
|
95
|
+
return outPath;
|
|
96
|
+
};
|
|
97
|
+
if ((0, ask_host_ai_1.isAiContext)() || !process.stdout.isTTY || _options.web) {
|
|
98
|
+
const outPath = await emitPage();
|
|
94
99
|
process.stdout.write(`✅ 页面已生成: file://${outPath}\n`);
|
|
95
100
|
process.stdout.write(`[SPECCORE_WELCOME: ${outPath}]\n`);
|
|
96
101
|
return;
|
|
@@ -104,27 +109,23 @@ async function welcomeCommand(_options) {
|
|
|
104
109
|
logger_1.logger.info(box('📦 项目状态', ['', `${C.gray}尚未初始化${C.r}`, '', `${C.cyan}◆ 快速开始:${C.r} speccore init`]));
|
|
105
110
|
logger_1.logger.info('');
|
|
106
111
|
showAskGuide();
|
|
107
|
-
|
|
112
|
+
const outPath = await emitPage();
|
|
113
|
+
process.stdout.write(`[SPECCORE_WELCOME: ${outPath}]\n`);
|
|
108
114
|
return;
|
|
109
115
|
}
|
|
110
116
|
if (!iterName) {
|
|
111
117
|
logger_1.logger.info(box('📦 项目状态', [`${C.gray}无活跃迭代${C.r}`, `${C.b}speccore iteration create -n Q1${C.r}`]));
|
|
112
118
|
logger_1.logger.info('');
|
|
113
119
|
showAskGuide();
|
|
114
|
-
|
|
120
|
+
const outPath = await emitPage();
|
|
121
|
+
process.stdout.write(`[SPECCORE_WELCOME: ${outPath}]\n`);
|
|
115
122
|
return;
|
|
116
123
|
}
|
|
117
|
-
let taskCount = 0;
|
|
118
|
-
try {
|
|
119
|
-
const entries = await (0, fs_extra_1.readdir)(`Iteration-${iterName}`, { withFileTypes: true });
|
|
120
|
-
taskCount = entries.filter(e => e.isDirectory() && e.name.startsWith('Task-')).length;
|
|
121
|
-
}
|
|
122
|
-
catch { }
|
|
123
124
|
logger_1.logger.info(box(`📦 项目状态 · ${iterName}`, [`${C.gray}任务数: ${taskCount}${C.r}`, `${C.b}speccore next(下一步)${C.r}`, `${C.b}speccore run(全自动)${C.r}`]));
|
|
124
125
|
logger_1.logger.info('');
|
|
125
126
|
showAskGuide();
|
|
126
127
|
// 始终输出标记,确保 AI 宿主弹出页面
|
|
127
|
-
const outPath =
|
|
128
|
+
const outPath = await emitPage();
|
|
128
129
|
process.stdout.write(`[SPECCORE_WELCOME: ${outPath}]\n`);
|
|
129
130
|
}
|
|
130
131
|
function showAskGuide() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBH,
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface FunctionMapUnit {
|
|
2
|
+
name: string;
|
|
3
|
+
platforms: string[];
|
|
4
|
+
sharedCapability: string;
|
|
5
|
+
dependsOn: string[];
|
|
6
|
+
description: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* v7.4.2+: 解析 FUNCTION_MAP.md(表格格式优先,回退树形格式)。
|
|
10
|
+
* 迁出自 taskify.ts 原 parseFunctionMap(v8.3.343),逻辑不变。
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseFunctionMap(content: string, allPlatforms: string[]): FunctionMapUnit[];
|
|
13
|
+
export interface NarrowPlatformGap {
|
|
14
|
+
/** 功能单元目录名(如 admin-web-03-booking-management) */
|
|
15
|
+
feature: string;
|
|
16
|
+
/** _matrix.md 已声明的端 */
|
|
17
|
+
declared: string[];
|
|
18
|
+
/** FUNCTION_MAP 声明的端 */
|
|
19
|
+
functionMap: string[];
|
|
20
|
+
/** FUNCTION_MAP 有、声明无、且端目录无真实规格的端(需要补端分析) */
|
|
21
|
+
missing: string[];
|
|
22
|
+
/** FUNCTION_MAP 有、声明无、但端目录已有真实规格的端(_matrix 声明滞后,需同步声明) */
|
|
23
|
+
undeclared: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* v8.3.343+: 声明过窄检测。
|
|
27
|
+
*
|
|
28
|
+
* 背景:doc2spec 生成的 _matrix.md platforms 语义是「端级需求文档所属端」(常为单端),
|
|
29
|
+
* 而 analyze 阶段 AI 写入的 FUNCTION_MAP 端覆盖语义是「功能单元跨端协作涉及端」(多端)。
|
|
30
|
+
* 此前两者无交叉校验:骨架按单端声明收敛,后端端级规格缺失时静默通过,
|
|
31
|
+
* taskify 拿不到后端规格(瞎编或漏任务)、execute 代码生成不完整。
|
|
32
|
+
*
|
|
33
|
+
* 策略:只读检测 + 警告(不回灌 _matrix,避免 AI 生成的 FUNCTION_MAP 污染权威声明)。
|
|
34
|
+
* 锚定方式:FUNCTION_MAP 每行中与功能单元目录名精确相等的单元格 → 该行端列。
|
|
35
|
+
* 目录名匹配不到的行跳过(宁缺勿滥,不做模糊匹配)。
|
|
36
|
+
*
|
|
37
|
+
* 两类缺口:
|
|
38
|
+
* - missing:端级规格缺失 → 需补端分析;
|
|
39
|
+
* - undeclared:端级规格已存在但 _matrix 未声明 → 声明滞后。
|
|
40
|
+
* 后者也必须报:taskify 的 readMatrixPlatforms 非空即采信(端级文档反推被短路),
|
|
41
|
+
* 声明不更新则多端子任务依然不会生成,补的端分析白费。
|
|
42
|
+
*
|
|
43
|
+
* @param iterDir 迭代目录绝对路径
|
|
44
|
+
* @param features 功能单元目录名列表(parseFeatureList 产物)
|
|
45
|
+
* @param declaredMap 单元 → _matrix 声明端映射(resolveFeaturePlatformMap 产物)
|
|
46
|
+
* @param allPlatforms CONSTITUTION 标准端列表
|
|
47
|
+
*/
|
|
48
|
+
export declare function detectNarrowPlatformDeclarations(iterDir: string, features: string[], declaredMap: Map<string, string[]>, allPlatforms: string[]): Promise<NarrowPlatformGap[]>;
|
|
49
|
+
//# sourceMappingURL=function-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-map.d.ts","sourceRoot":"","sources":["../../src/core/function-map.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAI3F;AAoJD,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wBAAwB;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAClC,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAqC9B"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFunctionMap = parseFunctionMap;
|
|
4
|
+
exports.detectNarrowPlatformDeclarations = detectNarrowPlatformDeclarations;
|
|
5
|
+
/**
|
|
6
|
+
* function-map.ts — FUNCTION_MAP 解析与端覆盖交叉校验
|
|
7
|
+
*
|
|
8
|
+
* v8.3.343+:
|
|
9
|
+
* 1. 从 taskify.ts 迁出 parseFunctionMap(表格/树形双格式),供 analyze 与 taskify 共享;
|
|
10
|
+
* 2. 新增 detectNarrowPlatformDeclarations——「声明过窄检测」:
|
|
11
|
+
* doc2spec 写进 _matrix.md 的端声明语义是「这份端级需求文档属于哪个端」,
|
|
12
|
+
* 而 FUNCTION_MAP 的端覆盖语义是「该功能单元跨端协作涉及哪些端」。
|
|
13
|
+
* 两者语义不同却被同一字段承载,导致多端单元只有单端骨架、taskify 拿不到后端规格。
|
|
14
|
+
* 本检测在 analyze 阶段比对两者:FUNCTION_MAP 声明了某端、_matrix 未声明、
|
|
15
|
+
* 且该端目录无真实规格时,输出缺口警告(只告警不自动回灌,避免污染权威声明)。
|
|
16
|
+
*/
|
|
17
|
+
const path_1 = require("path");
|
|
18
|
+
const fs_extra_1 = require("fs-extra");
|
|
19
|
+
const spec_paths_1 = require("./spec-paths");
|
|
20
|
+
const spec_skeleton_1 = require("./spec-skeleton");
|
|
21
|
+
/**
|
|
22
|
+
* v7.4.2+: 解析 FUNCTION_MAP.md(表格格式优先,回退树形格式)。
|
|
23
|
+
* 迁出自 taskify.ts 原 parseFunctionMap(v8.3.343),逻辑不变。
|
|
24
|
+
*/
|
|
25
|
+
function parseFunctionMap(content, allPlatforms) {
|
|
26
|
+
const tableResult = parseFunctionMapTable(content, allPlatforms);
|
|
27
|
+
if (tableResult.length > 0)
|
|
28
|
+
return tableResult;
|
|
29
|
+
return parseFunctionMapTree(content, allPlatforms);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* v7.4.2+: 解析 FUNCTION_MAP.md 表格格式
|
|
33
|
+
*/
|
|
34
|
+
function parseFunctionMapTable(content, allPlatforms) {
|
|
35
|
+
const units = [];
|
|
36
|
+
const lines = content.split(/\r?\n/);
|
|
37
|
+
let inTable = false;
|
|
38
|
+
let platformColIdx = -1;
|
|
39
|
+
let sharedCapColIdx = -1;
|
|
40
|
+
let dependsOnColIdx = -1;
|
|
41
|
+
let descColIdx = -1;
|
|
42
|
+
// v8.3.345: 名称列定位。新格式表头「| 单元ID | 功能模块/功能单元 | 中文名 | 涉及端 | …」
|
|
43
|
+
// 名称在第 2 列(首列是 M-01 这类单元ID);旧格式「| 功能单元(目录名) | 名称 | 端列表 | …」
|
|
44
|
+
// 名称在第 1 列。按表头含「功能模块/功能单元」且非「涉及端」定位,避免取到单元ID。
|
|
45
|
+
let nameColIdx = -1;
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
if ((line.includes('功能单元') || line.includes('功能模块')) && line.includes('涉及端')) {
|
|
48
|
+
inTable = true;
|
|
49
|
+
const headerCells = line.split('|').map(c => c.trim()).filter(Boolean);
|
|
50
|
+
platformColIdx = headerCells.findIndex(c => c.includes('涉及端'));
|
|
51
|
+
sharedCapColIdx = headerCells.findIndex(c => c.includes('共享能力'));
|
|
52
|
+
dependsOnColIdx = headerCells.findIndex(c => c.includes('依赖任务'));
|
|
53
|
+
descColIdx = headerCells.findIndex(c => c.includes('说明'));
|
|
54
|
+
nameColIdx = headerCells.findIndex(c => (c.includes('功能模块') || c.includes('功能单元')) && !c.includes('涉及端'));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!inTable)
|
|
58
|
+
continue;
|
|
59
|
+
if (line.startsWith('## ') && !line.includes('功能映射'))
|
|
60
|
+
break;
|
|
61
|
+
const cells = line.split('|').map(c => c.trim()).filter(Boolean);
|
|
62
|
+
if (cells.length < 3)
|
|
63
|
+
continue;
|
|
64
|
+
if (cells.every(c => /^[-:]+$/.test(c)))
|
|
65
|
+
continue;
|
|
66
|
+
if (cells.some(c => c.includes('功能单元')) || cells.some(c => c.includes('涉及端')))
|
|
67
|
+
continue;
|
|
68
|
+
// v8.3.268: 功能单元列此前取 cells[0](旧数据「| 目录名 | 名称 | 端列表 | …」首列即目录名)。
|
|
69
|
+
// v8.3.345: 新格式表头带「单元ID」列(首列 M-01),取 cells[0] 会拿到单元ID——
|
|
70
|
+
// 改为优先表头定位列,无表头信息时兜底:首列若是单元ID 模式(M-01/F-01)取第二列。
|
|
71
|
+
// 「dir(名称)」格式剥尾部括号注释。
|
|
72
|
+
let unitNameRaw = '';
|
|
73
|
+
if (nameColIdx >= 0 && nameColIdx < cells.length) {
|
|
74
|
+
unitNameRaw = cells[nameColIdx];
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const first = cells[0] || '';
|
|
78
|
+
unitNameRaw = /^[A-Za-z]+-\d+$/.test(first) ? (cells[1] || first) : first;
|
|
79
|
+
}
|
|
80
|
+
const unitName = unitNameRaw.replace(/[((][^))]*[))]$/, '').trim();
|
|
81
|
+
if (!unitName || unitName === '#' || unitName === '功能单元')
|
|
82
|
+
continue;
|
|
83
|
+
let platforms = [];
|
|
84
|
+
if (platformColIdx >= 0 && platformColIdx < cells.length) {
|
|
85
|
+
const raw = cells[platformColIdx];
|
|
86
|
+
if (raw && raw !== '无' && raw !== '—' && raw !== '-') {
|
|
87
|
+
platforms = raw.split(/[,,]/).map(p => p.trim()).filter(p => p && allPlatforms.includes(p));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// v8.3.268: 端列自适应——AI 落盘 FUNCTION_MAP 表格可能列错位(涉及端表头下是
|
|
91
|
+
// 名称、端列表落在其他列),按表头解析落空时扫描整行,找「逗号分隔且 ≥2 个
|
|
92
|
+
// 值全部属于标准端名」的单元格作为端列,避免静默回退全端平铺。
|
|
93
|
+
if (platforms.length === 0) {
|
|
94
|
+
platforms = findAdaptivePlatformCell(cells, allPlatforms);
|
|
95
|
+
}
|
|
96
|
+
if (platforms.length === 0)
|
|
97
|
+
platforms = [...allPlatforms];
|
|
98
|
+
let sharedCapability = '无';
|
|
99
|
+
if (sharedCapColIdx >= 0 && sharedCapColIdx < cells.length) {
|
|
100
|
+
const raw = cells[sharedCapColIdx];
|
|
101
|
+
if (raw && raw !== '无' && raw !== '—' && raw !== '-')
|
|
102
|
+
sharedCapability = raw;
|
|
103
|
+
}
|
|
104
|
+
let dependsOn = [];
|
|
105
|
+
if (dependsOnColIdx >= 0 && dependsOnColIdx < cells.length) {
|
|
106
|
+
const raw = cells[dependsOnColIdx];
|
|
107
|
+
if (raw && raw !== '无' && raw !== '—' && raw !== '-') {
|
|
108
|
+
dependsOn = raw.split(/[,,]/).map(p => p.trim()).filter(Boolean);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
let description = '';
|
|
112
|
+
if (descColIdx >= 0 && descColIdx < cells.length)
|
|
113
|
+
description = cells[descColIdx];
|
|
114
|
+
units.push({ name: unitName, platforms, sharedCapability, dependsOn, description });
|
|
115
|
+
}
|
|
116
|
+
return units;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* v7.4.2+: 解析 FUNCTION_MAP.md 树形格式
|
|
120
|
+
* 匹配: ├── 会议室 CRUD .............. room-service ✅ | admin-web ✅
|
|
121
|
+
* 提取: 模块名="会议室 CRUD", 涉及端=[room-service, admin-web]
|
|
122
|
+
*/
|
|
123
|
+
function parseFunctionMapTree(content, allPlatforms) {
|
|
124
|
+
const units = [];
|
|
125
|
+
const lines = content.split(/\r?\n/);
|
|
126
|
+
const treeNodeRe = /[├└]──\s*/;
|
|
127
|
+
const separatorRe = /\s*[.·]{3,}\s*/;
|
|
128
|
+
for (const line of lines) {
|
|
129
|
+
if (!treeNodeRe.test(line))
|
|
130
|
+
continue;
|
|
131
|
+
const afterTree = line.replace(/.*[├└]──\s*/, '').trim();
|
|
132
|
+
if (!afterTree)
|
|
133
|
+
continue;
|
|
134
|
+
// 跳过分类型节点(如 ├── 🏢 会议室管理),这些是父级分类
|
|
135
|
+
if (!separatorRe.test(afterTree) && !afterTree.includes('✅') && !afterTree.includes('❌') && !afterTree.includes('⚠️')) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const parts = afterTree.split(separatorRe);
|
|
139
|
+
if (parts.length < 2)
|
|
140
|
+
continue;
|
|
141
|
+
let unitName = parts[0].replace(/[🏢📅✅💰🔔👥📊⚙️🔑🛡️]/g, '').trim();
|
|
142
|
+
if (!unitName || unitName.length < 2)
|
|
143
|
+
continue;
|
|
144
|
+
const platformPart = parts.slice(1).join(' ');
|
|
145
|
+
const platforms = [];
|
|
146
|
+
for (const p of allPlatforms) {
|
|
147
|
+
if (platformPart.includes(p)) {
|
|
148
|
+
platforms.push(p);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (platforms.length === 0) {
|
|
152
|
+
platforms.push(...allPlatforms);
|
|
153
|
+
}
|
|
154
|
+
units.push({ name: unitName, platforms, sharedCapability: '无', dependsOn: [], description: '' });
|
|
155
|
+
}
|
|
156
|
+
return units;
|
|
157
|
+
}
|
|
158
|
+
/** 端列自适应定位:找「逗号分隔且 ≥2 个值全部属于标准端名」的单元格 */
|
|
159
|
+
function findAdaptivePlatformCell(cells, allPlatforms) {
|
|
160
|
+
for (const cell of cells) {
|
|
161
|
+
const parts = cell.split(/[,,]/).map(p => p.trim()).filter(Boolean);
|
|
162
|
+
if (parts.length >= 2 && parts.every(p => allPlatforms.includes(p))) {
|
|
163
|
+
return parts;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* v8.3.343+: 声明过窄检测。
|
|
170
|
+
*
|
|
171
|
+
* 背景:doc2spec 生成的 _matrix.md platforms 语义是「端级需求文档所属端」(常为单端),
|
|
172
|
+
* 而 analyze 阶段 AI 写入的 FUNCTION_MAP 端覆盖语义是「功能单元跨端协作涉及端」(多端)。
|
|
173
|
+
* 此前两者无交叉校验:骨架按单端声明收敛,后端端级规格缺失时静默通过,
|
|
174
|
+
* taskify 拿不到后端规格(瞎编或漏任务)、execute 代码生成不完整。
|
|
175
|
+
*
|
|
176
|
+
* 策略:只读检测 + 警告(不回灌 _matrix,避免 AI 生成的 FUNCTION_MAP 污染权威声明)。
|
|
177
|
+
* 锚定方式:FUNCTION_MAP 每行中与功能单元目录名精确相等的单元格 → 该行端列。
|
|
178
|
+
* 目录名匹配不到的行跳过(宁缺勿滥,不做模糊匹配)。
|
|
179
|
+
*
|
|
180
|
+
* 两类缺口:
|
|
181
|
+
* - missing:端级规格缺失 → 需补端分析;
|
|
182
|
+
* - undeclared:端级规格已存在但 _matrix 未声明 → 声明滞后。
|
|
183
|
+
* 后者也必须报:taskify 的 readMatrixPlatforms 非空即采信(端级文档反推被短路),
|
|
184
|
+
* 声明不更新则多端子任务依然不会生成,补的端分析白费。
|
|
185
|
+
*
|
|
186
|
+
* @param iterDir 迭代目录绝对路径
|
|
187
|
+
* @param features 功能单元目录名列表(parseFeatureList 产物)
|
|
188
|
+
* @param declaredMap 单元 → _matrix 声明端映射(resolveFeaturePlatformMap 产物)
|
|
189
|
+
* @param allPlatforms CONSTITUTION 标准端列表
|
|
190
|
+
*/
|
|
191
|
+
async function detectNarrowPlatformDeclarations(iterDir, features, declaredMap, allPlatforms) {
|
|
192
|
+
if (features.length === 0)
|
|
193
|
+
return [];
|
|
194
|
+
const funcMapPath = (0, path_1.join)(iterDir, '020-specs', spec_paths_1.GLOBAL_SPECS_DIR, 'FUNCTION_MAP.md');
|
|
195
|
+
if (!(await (0, fs_extra_1.pathExists)(funcMapPath)))
|
|
196
|
+
return [];
|
|
197
|
+
const content = await (0, fs_extra_1.readFile)(funcMapPath, 'utf-8').catch(() => '');
|
|
198
|
+
if (!content.trim() || content.includes(spec_skeleton_1.SKELETON_MARKER))
|
|
199
|
+
return [];
|
|
200
|
+
const rows = parseFunctionMapRawRows(content, allPlatforms);
|
|
201
|
+
const featureSet = new Set(features);
|
|
202
|
+
const gaps = [];
|
|
203
|
+
const specDir = (0, path_1.join)(iterDir, '020-specs');
|
|
204
|
+
for (const row of rows) {
|
|
205
|
+
// 锚定目录名:行内存在与功能单元目录名精确相等的单元格
|
|
206
|
+
const featureCell = row.cells.find(c => featureSet.has(c));
|
|
207
|
+
if (!featureCell)
|
|
208
|
+
continue;
|
|
209
|
+
const declared = declaredMap.get(featureCell) || [];
|
|
210
|
+
const fmPlatforms = row.platforms.filter(p => allPlatforms.includes(p));
|
|
211
|
+
if (fmPlatforms.length === 0)
|
|
212
|
+
continue;
|
|
213
|
+
// FUNCTION_MAP 声明了但 _matrix 未声明的端
|
|
214
|
+
const beyond = fmPlatforms.filter(p => !declared.includes(p));
|
|
215
|
+
if (beyond.length === 0)
|
|
216
|
+
continue;
|
|
217
|
+
// 分流:端目录无真实规格 → missing(补端分析);已有真实规格 → undeclared(同步声明)
|
|
218
|
+
const missing = [];
|
|
219
|
+
const undeclared = [];
|
|
220
|
+
for (const p of beyond) {
|
|
221
|
+
const platformDir = (0, path_1.join)(specDir, featureCell, p);
|
|
222
|
+
if (!(await (0, fs_extra_1.pathExists)(platformDir))) {
|
|
223
|
+
missing.push(p);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const hasReal = await dirHasRealContent(platformDir);
|
|
227
|
+
if (!hasReal)
|
|
228
|
+
missing.push(p);
|
|
229
|
+
else
|
|
230
|
+
undeclared.push(p);
|
|
231
|
+
}
|
|
232
|
+
if (missing.length > 0 || undeclared.length > 0) {
|
|
233
|
+
gaps.push({ feature: featureCell, declared, functionMap: fmPlatforms, missing, undeclared });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return gaps;
|
|
237
|
+
}
|
|
238
|
+
/** FUNCTION_MAP 表格行级解析:每行 cells + 自适应端列(与 parseFunctionMapTable 同口径) */
|
|
239
|
+
function parseFunctionMapRawRows(content, allPlatforms) {
|
|
240
|
+
const rows = [];
|
|
241
|
+
const lines = content.split(/\r?\n/);
|
|
242
|
+
let inTable = false;
|
|
243
|
+
for (const line of lines) {
|
|
244
|
+
if ((line.includes('功能单元') || line.includes('功能模块')) && line.includes('涉及端')) {
|
|
245
|
+
inTable = true;
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (!inTable)
|
|
249
|
+
continue;
|
|
250
|
+
if (line.startsWith('## ') && !line.includes('功能映射'))
|
|
251
|
+
break;
|
|
252
|
+
const cells = line.split('|').map(c => c.trim()).filter(Boolean);
|
|
253
|
+
if (cells.length < 3)
|
|
254
|
+
continue;
|
|
255
|
+
if (cells.every(c => /^[-:]+$/.test(c)))
|
|
256
|
+
continue;
|
|
257
|
+
if (cells.some(c => c.includes('功能单元')) || cells.some(c => c.includes('涉及端')))
|
|
258
|
+
continue;
|
|
259
|
+
// 端列自适应:找「逗号分隔且 ≥2 个值全部属于标准端名」的单元格
|
|
260
|
+
const platforms = findAdaptivePlatformCell(cells, allPlatforms);
|
|
261
|
+
rows.push({ cells, platforms });
|
|
262
|
+
}
|
|
263
|
+
return rows;
|
|
264
|
+
}
|
|
265
|
+
/** 目录内存在非骨架真实内容(≥100 字符的 .md/.yaml 即算) */
|
|
266
|
+
async function dirHasRealContent(dir) {
|
|
267
|
+
const files = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true }).catch(() => []);
|
|
268
|
+
for (const f of files) {
|
|
269
|
+
if (!f.isFile())
|
|
270
|
+
continue;
|
|
271
|
+
if (!/\.(md|yaml|yml)$/.test(f.name))
|
|
272
|
+
continue;
|
|
273
|
+
const c = await (0, fs_extra_1.readFile)((0, path_1.join)(dir, f.name), 'utf-8').catch(() => '');
|
|
274
|
+
const t = c.trim();
|
|
275
|
+
if (t && !t.includes(spec_skeleton_1.SKELETON_MARKER) && t.length >= 100)
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=function-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-map.js","sourceRoot":"","sources":["../../src/core/function-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** 包内 HTML 模板目录(dist/core → 包根 templates/html,与 ask/init 现有定位同源) */
|
|
2
|
+
export declare function htmlTemplateDir(): string;
|
|
3
|
+
/** ask 引导页跳转的四个模式页 */
|
|
4
|
+
export declare const ASK_MODE_PAGES: readonly string[];
|
|
5
|
+
/** 从包内模板复制单个 HTML 到项目 outputs/(存在才复制,幂等覆盖) */
|
|
6
|
+
export declare function copyHtmlTemplate(cwd: string, file: string): Promise<string>;
|
|
7
|
+
/** 联动生成提示词库页(失败不阻断主流程) */
|
|
8
|
+
export declare function ensurePromptsPage(cwd: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* 幂等生成 ask 引导页家族:
|
|
11
|
+
* onboarding 主页面 + 四个模式页 + 帮助页(onboarding 的跳转目标全部补齐)
|
|
12
|
+
* 返回 onboarding 页面路径,供 [SPECCORE_ONBOARD] 标记使用。
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureAskPages(cwd: string): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* 幂等生成项目配置引导页(setup-guide 内「查看提示词库」链接 → prompts,
|
|
17
|
+
* 两者一起补齐)。返回 setup-guide 页面路径。
|
|
18
|
+
*/
|
|
19
|
+
export declare function ensureSetupGuidePage(cwd: string, projectName?: string, pkgVersion?: string): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* 幂等补齐项目名片(welcome 页)的全部跳转目标:
|
|
22
|
+
* onboarding 家族(含帮助页 + 提示词库);已初始化项目再补配置引导页。
|
|
23
|
+
*/
|
|
24
|
+
export declare function ensureWelcomeTargets(cwd: string, isInit: boolean): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=page-bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-bundle.d.ts","sourceRoot":"","sources":["../../src/core/page-bundle.ts"],"names":[],"mappings":"AAiBA,oEAAoE;AACpE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,sBAAsB;AACtB,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAK3C,CAAC;AAEF,8CAA8C;AAC9C,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMjF;AAED,0BAA0B;AAC1B,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWjE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlH;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtF"}
|