speccore 8.1.2 → 8.3.2
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 -0
- package/dist/cli.js +24 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +38 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +1107 -135
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/change.d.ts.map +1 -1
- package/dist/commands/change.js +28 -0
- package/dist/commands/change.js.map +1 -1
- package/dist/commands/clarify.d.ts +6 -0
- package/dist/commands/clarify.d.ts.map +1 -1
- package/dist/commands/clarify.js +172 -14
- package/dist/commands/clarify.js.map +1 -1
- package/dist/commands/done.d.ts.map +1 -1
- package/dist/commands/done.js +312 -3
- package/dist/commands/done.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +112 -2
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +111 -14
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/pattern.d.ts +2 -0
- package/dist/commands/pattern.d.ts.map +1 -1
- package/dist/commands/pattern.js +43 -0
- package/dist/commands/pattern.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +99 -1
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/workspace.d.ts +20 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +142 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +18 -0
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/intent-recognition.d.ts +7 -1
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +33 -3
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/knowledge-graph.d.ts +6 -1
- package/dist/core/knowledge-graph.d.ts.map +1 -1
- package/dist/core/knowledge-graph.js +268 -7
- package/dist/core/knowledge-graph.js.map +1 -1
- package/dist/core/pattern-detector.d.ts +26 -0
- package/dist/core/pattern-detector.d.ts.map +1 -0
- package/dist/core/pattern-detector.js +256 -0
- package/dist/core/pattern-detector.js.map +1 -0
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +40 -7
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/questions.js +1 -1
- package/dist/core/questions.js.map +1 -1
- package/dist/core/requirement-clarifier.d.ts +25 -2
- package/dist/core/requirement-clarifier.d.ts.map +1 -1
- package/dist/core/requirement-clarifier.js +205 -9
- package/dist/core/requirement-clarifier.js.map +1 -1
- package/dist/core/spec-skeleton.d.ts.map +1 -1
- package/dist/core/spec-skeleton.js +125 -25
- package/dist/core/spec-skeleton.js.map +1 -1
- package/dist/core/unit-context-assembler.d.ts +50 -0
- package/dist/core/unit-context-assembler.d.ts.map +1 -0
- package/dist/core/unit-context-assembler.js +442 -0
- package/dist/core/unit-context-assembler.js.map +1 -0
- package/dist/core/verify-engine.d.ts +4 -3
- package/dist/core/verify-engine.d.ts.map +1 -1
- package/dist/core/verify-engine.js +623 -24
- package/dist/core/verify-engine.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +62 -0
- package/dist/core/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace-manager.js +175 -0
- package/dist/core/workspace-manager.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pattern-detector — 可复用模式候选检测引擎
|
|
3
|
+
*
|
|
4
|
+
* v8.2.0+: 从代码目录启发式检测可复用模式候选
|
|
5
|
+
* 供 done/execute/pattern 命令共用
|
|
6
|
+
*/
|
|
7
|
+
export interface PatternCandidate {
|
|
8
|
+
name: string;
|
|
9
|
+
category: string;
|
|
10
|
+
/** v8.3.0+: 所属端 — backend | frontend | shared | unknown */
|
|
11
|
+
platform: string;
|
|
12
|
+
file: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 启发式检测代码中的可复用模式候选
|
|
17
|
+
* @param codeDirs 要扫描的代码目录列表
|
|
18
|
+
* @param sourceLabel 来源标签(用于日志)
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectPatternCandidates(codeDirs: string[], sourceLabel?: string): Promise<PatternCandidate[]>;
|
|
21
|
+
/**
|
|
22
|
+
* v8.3.0+: 按端分组展示模式候选
|
|
23
|
+
* @returns 分组后的记录,键为端名,值为该端的候选列表
|
|
24
|
+
*/
|
|
25
|
+
export declare function groupCandidatesByPlatform(candidates: PatternCandidate[]): Record<string, PatternCandidate[]>;
|
|
26
|
+
//# sourceMappingURL=pattern-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/core/pattern-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8H7B;AAuED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,gBAAgB,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAsBpC"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* pattern-detector — 可复用模式候选检测引擎
|
|
4
|
+
*
|
|
5
|
+
* v8.2.0+: 从代码目录启发式检测可复用模式候选
|
|
6
|
+
* 供 done/execute/pattern 命令共用
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.detectPatternCandidates = detectPatternCandidates;
|
|
10
|
+
exports.groupCandidatesByPlatform = groupCandidatesByPlatform;
|
|
11
|
+
const fs_extra_1 = require("fs-extra");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
/**
|
|
14
|
+
* 启发式检测代码中的可复用模式候选
|
|
15
|
+
* @param codeDirs 要扫描的代码目录列表
|
|
16
|
+
* @param sourceLabel 来源标签(用于日志)
|
|
17
|
+
*/
|
|
18
|
+
async function detectPatternCandidates(codeDirs, sourceLabel) {
|
|
19
|
+
const candidates = [];
|
|
20
|
+
// 1. 扫描代码文件
|
|
21
|
+
const codeFiles = [];
|
|
22
|
+
const codeExts = ['.ts', '.js', '.tsx', '.jsx', '.java', '.go', '.py', '.vue'];
|
|
23
|
+
for (const baseDir of codeDirs) {
|
|
24
|
+
if (!(await (0, fs_extra_1.pathExists)(baseDir)))
|
|
25
|
+
continue;
|
|
26
|
+
await scanCodeDir(baseDir, baseDir, codeFiles, codeExts);
|
|
27
|
+
}
|
|
28
|
+
if (codeFiles.length === 0)
|
|
29
|
+
return candidates;
|
|
30
|
+
// 2. 加载已有 PATTERNS 模式名(避免重复推荐)
|
|
31
|
+
const existingPatterns = await loadExistingPatternNames();
|
|
32
|
+
// 3. 启发式规则检测
|
|
33
|
+
for (const cf of codeFiles) {
|
|
34
|
+
const content = cf.content;
|
|
35
|
+
const relPath = cf.relPath;
|
|
36
|
+
// 推断所属端
|
|
37
|
+
const platform = inferPlatform(relPath);
|
|
38
|
+
// 规则 A: 通用工具目录下的导出
|
|
39
|
+
const isUtilDir = /\/(utils|helpers|common|shared)\//i.test(relPath);
|
|
40
|
+
if (isUtilDir) {
|
|
41
|
+
const exports = extractNamedExports(content);
|
|
42
|
+
for (const name of exports.slice(0, 3)) {
|
|
43
|
+
if (isGenericName(name) && !existingPatterns.has(name.toLowerCase())) {
|
|
44
|
+
candidates.push({
|
|
45
|
+
name,
|
|
46
|
+
category: 'utility',
|
|
47
|
+
platform,
|
|
48
|
+
file: relPath,
|
|
49
|
+
reason: '通用工具函数,位于 utils/ 目录',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// 规则 B: 中间件/装饰器/Hook 目录
|
|
55
|
+
const isMiddlewareDir = /\/(middleware|decorators|hooks|interceptors|filters)\//i.test(relPath);
|
|
56
|
+
if (isMiddlewareDir) {
|
|
57
|
+
const exports = extractNamedExports(content);
|
|
58
|
+
for (const name of exports.slice(0, 2)) {
|
|
59
|
+
if (!existingPatterns.has(name.toLowerCase())) {
|
|
60
|
+
const category = relPath.includes('middleware') ? 'middleware' :
|
|
61
|
+
relPath.includes('decorator') ? 'decorator' :
|
|
62
|
+
relPath.includes('hook') ? 'hook' : 'interceptors';
|
|
63
|
+
candidates.push({
|
|
64
|
+
name,
|
|
65
|
+
category,
|
|
66
|
+
platform,
|
|
67
|
+
file: relPath,
|
|
68
|
+
reason: `可复用${category},位于专用目录`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 规则 C: 组件目录下的通用组件(前端)
|
|
74
|
+
const isComponentDir = /\/(components|ui|widgets)\//i.test(relPath);
|
|
75
|
+
if (isComponentDir && /\.(tsx|jsx|vue)$/.test(relPath)) {
|
|
76
|
+
const exports = extractNamedExports(content);
|
|
77
|
+
for (const name of exports.slice(0, 2)) {
|
|
78
|
+
if (name.startsWith('Base') || name.startsWith('App') || name.startsWith('Common')) {
|
|
79
|
+
if (!existingPatterns.has(name.toLowerCase())) {
|
|
80
|
+
candidates.push({
|
|
81
|
+
name,
|
|
82
|
+
category: 'component',
|
|
83
|
+
platform,
|
|
84
|
+
file: relPath,
|
|
85
|
+
reason: '通用 UI 组件',
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// 规则 D: 有 JSDoc/详细注释的导出(表明是有意设计的可复用模块)
|
|
92
|
+
const hasJSDoc = /\/\*\*[\s\S]*?\*\/\s*(export|class|function|const)/.test(content);
|
|
93
|
+
if (hasJSDoc && !isUtilDir && !isMiddlewareDir && !isComponentDir) {
|
|
94
|
+
const exports = extractNamedExports(content);
|
|
95
|
+
for (const name of exports.slice(0, 1)) {
|
|
96
|
+
if (isGenericName(name) && !existingPatterns.has(name.toLowerCase())) {
|
|
97
|
+
candidates.push({
|
|
98
|
+
name,
|
|
99
|
+
category: 'module',
|
|
100
|
+
platform,
|
|
101
|
+
file: relPath,
|
|
102
|
+
reason: '有详细 JSDoc 注释的可复用模块',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// 去重
|
|
109
|
+
const seen = new Set();
|
|
110
|
+
const unique = candidates.filter(c => {
|
|
111
|
+
const key = `${c.name}:${c.file}`;
|
|
112
|
+
if (seen.has(key))
|
|
113
|
+
return false;
|
|
114
|
+
seen.add(key);
|
|
115
|
+
return true;
|
|
116
|
+
});
|
|
117
|
+
// v8.3.0+: 跨端同名模式检测
|
|
118
|
+
// 如果同一个 name 同时出现在 backend 和 frontend,标记为 shared(跨端共享)
|
|
119
|
+
const namePlatforms = new Map();
|
|
120
|
+
for (const c of unique) {
|
|
121
|
+
if (!namePlatforms.has(c.name))
|
|
122
|
+
namePlatforms.set(c.name, new Set());
|
|
123
|
+
namePlatforms.get(c.name).add(c.platform);
|
|
124
|
+
}
|
|
125
|
+
for (const c of unique) {
|
|
126
|
+
const platforms = namePlatforms.get(c.name);
|
|
127
|
+
if (platforms && platforms.has('backend') && platforms.has('frontend')) {
|
|
128
|
+
if (c.platform !== 'shared') {
|
|
129
|
+
c.platform = 'shared';
|
|
130
|
+
c.reason = c.reason + '(跨端共享:前后端均存在同名导出)';
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return unique;
|
|
135
|
+
}
|
|
136
|
+
async function scanCodeDir(dir, baseDir, results, exts) {
|
|
137
|
+
try {
|
|
138
|
+
const entries = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true });
|
|
139
|
+
for (const e of entries) {
|
|
140
|
+
const fullPath = (0, path_1.join)(dir, e.name);
|
|
141
|
+
if (e.isDirectory()) {
|
|
142
|
+
if (e.name === 'node_modules' || e.name === 'dist' || e.name.startsWith('.'))
|
|
143
|
+
continue;
|
|
144
|
+
await scanCodeDir(fullPath, baseDir, results, exts);
|
|
145
|
+
}
|
|
146
|
+
else if (exts.some(ext => e.name.endsWith(ext))) {
|
|
147
|
+
const content = await (0, fs_extra_1.readFile)(fullPath, 'utf-8');
|
|
148
|
+
results.push({ path: fullPath, relPath: fullPath.replace(baseDir + '/', ''), content });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch { /* skip */ }
|
|
153
|
+
}
|
|
154
|
+
/** 从代码中提取命名导出 */
|
|
155
|
+
function extractNamedExports(content) {
|
|
156
|
+
const names = [];
|
|
157
|
+
const patterns = [
|
|
158
|
+
/export\s+(?:async\s+)?function\s+(\w+)/g,
|
|
159
|
+
/export\s+class\s+(\w+)/g,
|
|
160
|
+
/export\s+const\s+(\w+)\s*=/g,
|
|
161
|
+
/export\s+default\s+class\s+(\w+)/g,
|
|
162
|
+
/export\s+default\s+function\s+(\w+)/g,
|
|
163
|
+
];
|
|
164
|
+
for (const p of patterns) {
|
|
165
|
+
let m;
|
|
166
|
+
while ((m = p.exec(content)) !== null) {
|
|
167
|
+
names.push(m[1]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return [...new Set(names)];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* v8.3.0+: 根据文件路径推断所属端
|
|
174
|
+
*/
|
|
175
|
+
function inferPlatform(filePath) {
|
|
176
|
+
const lower = filePath.toLowerCase();
|
|
177
|
+
// 后端标识
|
|
178
|
+
if (/[\\/](10-backend|backend|api|server|service|controller|model|dao|repository|entity|dto)[\\/]/i.test(lower)) {
|
|
179
|
+
return 'backend';
|
|
180
|
+
}
|
|
181
|
+
// 前端标识
|
|
182
|
+
if (/[\\/](20-frontend|frontend|h5|admin|web|app|mobile|pages|views|components|ui|widgets)[\\/]/i.test(lower)) {
|
|
183
|
+
return 'frontend';
|
|
184
|
+
}
|
|
185
|
+
// 共享标识
|
|
186
|
+
if (/[\\/](shared|common|_shared|types|interfaces|constants|enums|utils)[\\/]/i.test(lower)) {
|
|
187
|
+
return 'shared';
|
|
188
|
+
}
|
|
189
|
+
return 'unknown';
|
|
190
|
+
}
|
|
191
|
+
/** 判断是否为通用命名 */
|
|
192
|
+
function isGenericName(name) {
|
|
193
|
+
const genericPrefixes = ['with', 'use', 'create', 'format', 'validate', 'handle', 'parse', 'build', 'make', 'get', 'set', 'is', 'has', 'to', 'from', 'transform', 'merge', 'split', 'compose', 'pipe'];
|
|
194
|
+
const genericNames = ['utils', 'helpers', 'common', 'shared', 'base', 'core', 'helper', 'util', 'factory', 'provider', 'service', 'manager', 'controller', 'middleware', 'interceptor', 'filter', 'guard', 'decorator', 'hook', 'mixin'];
|
|
195
|
+
const lower = name.toLowerCase();
|
|
196
|
+
if (genericNames.includes(lower))
|
|
197
|
+
return true;
|
|
198
|
+
for (const prefix of genericPrefixes) {
|
|
199
|
+
if (lower.startsWith(prefix) && name.length > prefix.length + 1)
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* v8.3.0+: 按端分组展示模式候选
|
|
206
|
+
* @returns 分组后的记录,键为端名,值为该端的候选列表
|
|
207
|
+
*/
|
|
208
|
+
function groupCandidatesByPlatform(candidates) {
|
|
209
|
+
const groups = {};
|
|
210
|
+
const order = ['shared', 'backend', 'frontend', 'unknown'];
|
|
211
|
+
for (const c of candidates) {
|
|
212
|
+
const p = c.platform || 'unknown';
|
|
213
|
+
if (!groups[p])
|
|
214
|
+
groups[p] = [];
|
|
215
|
+
groups[p].push(c);
|
|
216
|
+
}
|
|
217
|
+
// 按固定顺序返回(shared 在前,unknown 在后)
|
|
218
|
+
const result = {};
|
|
219
|
+
for (const key of order) {
|
|
220
|
+
if (groups[key] && groups[key].length > 0) {
|
|
221
|
+
result[key] = groups[key];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// 补充任何未在 order 中的端
|
|
225
|
+
for (const [key, value] of Object.entries(groups)) {
|
|
226
|
+
if (!result[key])
|
|
227
|
+
result[key] = value;
|
|
228
|
+
}
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
231
|
+
/** 加载已有 PATTERNS 中的模式名 */
|
|
232
|
+
async function loadExistingPatternNames() {
|
|
233
|
+
const names = new Set();
|
|
234
|
+
try {
|
|
235
|
+
const patternsDir = (0, path_1.join)(process.cwd(), '.speccore', 'PATTERNS');
|
|
236
|
+
if (!(await (0, fs_extra_1.pathExists)(patternsDir)))
|
|
237
|
+
return names;
|
|
238
|
+
const entries = await (0, fs_extra_1.readdir)(patternsDir, { withFileTypes: true });
|
|
239
|
+
for (const entry of entries) {
|
|
240
|
+
if (entry.isDirectory()) {
|
|
241
|
+
const subEntries = await (0, fs_extra_1.readdir)((0, path_1.join)(patternsDir, entry.name), { withFileTypes: true });
|
|
242
|
+
for (const sub of subEntries) {
|
|
243
|
+
if (sub.name.endsWith('.md')) {
|
|
244
|
+
names.add(sub.name.replace('.md', '').toLowerCase());
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (entry.name.endsWith('.md')) {
|
|
249
|
+
names.add(entry.name.replace('.md', '').toLowerCase());
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch { /* 静默失败 */ }
|
|
254
|
+
return names;
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=pattern-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/core/pattern-detector.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmBH,0DAiIC;AA2ED,8DAwBC;AArPD,uCAAyD;AACzD,+BAA4B;AAW5B;;;;GAIG;AACI,KAAK,UAAU,uBAAuB,CAC3C,QAAkB,EAClB,WAAoB;IAEpB,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,YAAY;IACZ,MAAM,SAAS,GAAyD,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE/E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QAC3C,MAAM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAE9C,+BAA+B;IAC/B,MAAM,gBAAgB,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAE1D,aAAa;IACb,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAE3B,QAAQ;QACR,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAExC,mBAAmB;QACnB,MAAM,SAAS,GAAG,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACrE,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI;wBACJ,QAAQ,EAAE,SAAS;wBACnB,QAAQ;wBACR,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,qBAAqB;qBAC9B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,eAAe,GAAG,yDAAyD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChG,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;wBAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;4BAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;oBACrD,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI;wBACJ,QAAQ;wBACR,QAAQ;wBACR,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,MAAM,QAAQ,SAAS;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,cAAc,GAAG,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpE,IAAI,cAAc,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;wBAC9C,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI;4BACJ,QAAQ,EAAE,WAAW;4BACrB,QAAQ;4BACR,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,UAAU;yBACnB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,QAAQ,GAAG,oDAAoD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpF,IAAI,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,cAAc,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACrE,UAAU,CAAC,IAAI,CAAC;wBACd,IAAI;wBACJ,QAAQ,EAAE,QAAQ;wBAClB,QAAQ;wBACR,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,oBAAoB;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;IACL,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACnC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,uDAAuD;IACvD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5B,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACtB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,mBAAmB,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAW,EAAE,OAAe,EAAE,OAA6D,EAAE,IAAc;IAE3G,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACvF,MAAM,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;AACxB,CAAC;AAED,iBAAiB;AACjB,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG;QACf,yCAAyC;QACzC,yBAAyB;QACzB,6BAA6B;QAC7B,mCAAmC;QACnC,sCAAsC;KACvC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;IACP,IAAI,+FAA+F,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;IACP,IAAI,6FAA6F,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9G,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO;IACP,IAAI,2EAA2E,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5F,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gBAAgB;AAChB,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACvM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzO,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CACvC,UAA8B;IAE9B,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAE3D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,gCAAgC;IAChC,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,mBAAmB;IACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0BAA0B;AAC1B,KAAK,UAAU,wBAAwB;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,WAAW,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,MAAM,IAAA,kBAAO,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;oBAC7B,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"AA+DA,gBAAgB;AAChB,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAErE,YAAY;AACZ,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAe;AACf,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,WAAW;AACX,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/D;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gBAAgB;AAChB,MAAM,WAAW,QAAQ;IACvB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,GAAG,EAAE,QAAQ,EAAE,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -226,6 +226,7 @@ async function loadExtraSpecs(cwd, taskDir, platform, iteration, options) {
|
|
|
226
226
|
const MAX_TOTAL = options?.maxTotalChars ?? 8000;
|
|
227
227
|
let totalChars = 0;
|
|
228
228
|
const files = [
|
|
229
|
+
{ name: '开发指南', path: '00-specs/DEV_GUIDE.md' },
|
|
229
230
|
{ name: '任务上下文', path: '_shared/CONTEXT.md' },
|
|
230
231
|
{ name: '技术方案', path: '00-specs/TECH.md' },
|
|
231
232
|
{ name: '技术方案(旧)', path: '_shared/TECH.md' },
|
|
@@ -370,6 +371,9 @@ async function loadAllTaskContext(cwd, taskDir, platform, iteration, graph) {
|
|
|
370
371
|
catch { /* 跳过 */ }
|
|
371
372
|
};
|
|
372
373
|
await scanTaskDir(taskDir, '');
|
|
374
|
+
// 1b. 单独读取 00-specs/DEV_GUIDE.md(被 CODEGEN_EXCLUDE_DIRS 排除,但开发指南是 execute 的核心输入)
|
|
375
|
+
const devGuidePath = (0, path_1.join)(taskDir, '00-specs', 'DEV_GUIDE.md');
|
|
376
|
+
await addFile(devGuidePath, '开发指南', '00-specs/DEV_GUIDE.md');
|
|
373
377
|
// 2. 迭代规格 020-specs/ 所有 .md(含 global/ 子目录)
|
|
374
378
|
if (iteration) {
|
|
375
379
|
const iterDir = (0, path_1.join)(cwd, `Iteration-${iteration}`);
|
|
@@ -762,18 +766,35 @@ function formatGlobalContext(ctx, platform) {
|
|
|
762
766
|
// 需要按子目录分组的(platforms, PROJECTS, PATTERNS)
|
|
763
767
|
if (group.prefix === 'platforms/' || group.prefix === 'PROJECTS/' || group.prefix === 'PATTERNS:') {
|
|
764
768
|
const bySub = new Map();
|
|
769
|
+
// v8.2.0+: PATTERNS 通用分类(始终保留)
|
|
770
|
+
// v8.3.0+: 增加 shared(跨端共享模式)
|
|
771
|
+
const PATTERN_COMMON_CATEGORIES = new Set(['architecture', 'data-model', 'api-contract', 'security', 'performance', 'shared', 'TEMPLATES', 'README']);
|
|
765
772
|
for (const e of entries) {
|
|
766
773
|
// PATTERNS:architecture/x.md → architecture; platforms/admin/x.md → admin
|
|
767
774
|
const sub = group.prefix === 'PATTERNS:'
|
|
768
775
|
? e.path.replace('PATTERNS:', '').split('/')[0]
|
|
769
776
|
: e.path.split('/')[1];
|
|
777
|
+
// v8.2.0+: PATTERNS 按端过滤 — 只保留通用分类 + 当前端相关模式
|
|
778
|
+
if (group.prefix === 'PATTERNS:' && platform) {
|
|
779
|
+
const isCommon = PATTERN_COMMON_CATEGORIES.has(sub);
|
|
780
|
+
const isCurrentPlatform = sub === platform;
|
|
781
|
+
if (!isCommon && !isCurrentPlatform)
|
|
782
|
+
continue; // 跳过不相关的端专属模式
|
|
783
|
+
}
|
|
770
784
|
if (!bySub.has(sub))
|
|
771
785
|
bySub.set(sub, []);
|
|
772
786
|
bySub.get(sub).push(e);
|
|
773
787
|
}
|
|
788
|
+
// 如果没有匹配到任何条目,跳过该组
|
|
789
|
+
if (bySub.size === 0) {
|
|
790
|
+
lines.pop(); // 移除 group.label
|
|
791
|
+
continue;
|
|
792
|
+
}
|
|
774
793
|
for (const [sub, subEntries] of bySub) {
|
|
775
|
-
const
|
|
776
|
-
|
|
794
|
+
const isCurrent = (group.prefix === 'platforms/' || group.prefix === 'PATTERNS:') && sub === platform;
|
|
795
|
+
const marker = isCurrent ? ' ⬅ 当前端' : '';
|
|
796
|
+
const commonMarker = group.prefix === 'PATTERNS:' && PATTERN_COMMON_CATEGORIES.has(sub) ? ' 🌐 通用' : '';
|
|
797
|
+
lines.push(`📂 ${sub}/${marker}${commonMarker}`);
|
|
777
798
|
for (const e of subEntries) {
|
|
778
799
|
lines.push(formatTOCEntry(e, 2));
|
|
779
800
|
}
|
|
@@ -1048,10 +1069,15 @@ function getInstruction(command, context) {
|
|
|
1048
1069
|
case 'plan':
|
|
1049
1070
|
return [
|
|
1050
1071
|
'请根据以下 Task 列表和人员配置,生成执行计划。',
|
|
1051
|
-
'
|
|
1052
|
-
'
|
|
1053
|
-
'
|
|
1054
|
-
'
|
|
1072
|
+
'',
|
|
1073
|
+
'## 计划制定原则',
|
|
1074
|
+
'',
|
|
1075
|
+
'1. **参考 DEV_GUIDE.md 改造顺序** — 每个任务的 DEV_GUIDE.md 中都有「实施步骤(按依赖排序)」,排计划时必须尊重这些依赖关系',
|
|
1076
|
+
'2. **拓扑排序确定执行顺序** — 先执行被依赖的任务,再执行依赖方',
|
|
1077
|
+
'3. **识别可并行的 Task 批次** — 无依赖关系的任务可以并行',
|
|
1078
|
+
'4. **参考 RISK.md 和 .issues.md** — 高风险任务和有已知问题的任务应安排更充裕的时间或提前验证',
|
|
1079
|
+
'5. **分配负责人** — 根据技能匹配分配',
|
|
1080
|
+
'6. **估算工作量和里程碑** — 基于改造范围和接口数量估算',
|
|
1055
1081
|
'请按 Markdown 表格格式输出执行计划。',
|
|
1056
1082
|
'',
|
|
1057
1083
|
'## 🤖 自动模式指令',
|
|
@@ -1079,8 +1105,15 @@ async function buildPrompt(command, options) {
|
|
|
1079
1105
|
let extraSpecs = [];
|
|
1080
1106
|
if (taskDir) {
|
|
1081
1107
|
try {
|
|
1108
|
+
// v8.2.0+: 从 REQ.md 提取标题作为更精准的查询词
|
|
1109
|
+
let searchQuery = options.task || options.iteration || '';
|
|
1110
|
+
if (reqContent) {
|
|
1111
|
+
const titleMatch = reqContent.match(/^#\s+(.+)$/m);
|
|
1112
|
+
if (titleMatch)
|
|
1113
|
+
searchQuery = titleMatch[1].trim();
|
|
1114
|
+
}
|
|
1082
1115
|
const unifiedResult = await (0, unified_retrieval_1.unifiedSearch)(cwd, {
|
|
1083
|
-
query:
|
|
1116
|
+
query: searchQuery,
|
|
1084
1117
|
iteration: options.iteration,
|
|
1085
1118
|
taskId: options.task,
|
|
1086
1119
|
platform: options.platform,
|