speccore 5.23.2 → 5.24.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.d.ts.map +1 -1
- package/dist/commands/analyze.js +54 -1
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/execute.js +10 -3
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/create.js +17 -0
- package/dist/commands/iteration/create.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +214 -7
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/status-panel.js +8 -1
- package/dist/commands/status-panel.js.map +1 -1
- package/dist/core/ai-context-generator.d.ts +26 -0
- package/dist/core/ai-context-generator.d.ts.map +1 -0
- package/dist/core/ai-context-generator.js +199 -0
- package/dist/core/ai-context-generator.js.map +1 -0
- package/dist/core/analyze-engine.d.ts.map +1 -1
- package/dist/core/analyze-engine.js +116 -139
- package/dist/core/analyze-engine.js.map +1 -1
- package/dist/core/git-integration.d.ts +3 -1
- package/dist/core/git-integration.d.ts.map +1 -1
- package/dist/core/git-integration.js +58 -5
- package/dist/core/git-integration.js.map +1 -1
- package/dist/core/name-validator.d.ts +23 -0
- package/dist/core/name-validator.d.ts.map +1 -0
- package/dist/core/name-validator.js +110 -0
- package/dist/core/name-validator.js.map +1 -0
- package/dist/core/short-id.d.ts +15 -0
- package/dist/core/short-id.d.ts.map +1 -0
- package/dist/core/short-id.js +45 -0
- package/dist/core/short-id.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-integration.js","sourceRoot":"","sources":["../../src/core/git-integration.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAmBH,
|
|
1
|
+
{"version":3,"file":"git-integration.js","sourceRoot":"","sources":["../../src/core/git-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 扫描所有期次名称(去期次-NNN-前缀,返回原始 name 部分)
|
|
3
|
+
*/
|
|
4
|
+
export declare function getAllIterationNames(): Promise<string[]>;
|
|
5
|
+
/**
|
|
6
|
+
* 扫描所有任务名称(全项目范围)
|
|
7
|
+
* 任务名称存储在内容文件的第一行 # 标题中
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAllTaskNames(): Promise<string[]>;
|
|
10
|
+
/**
|
|
11
|
+
* 检查期次名称是否重复
|
|
12
|
+
* @returns 冲突的期次列表
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkIterationNameConflict(name: string, excludeName?: string): Promise<string[]>;
|
|
15
|
+
/**
|
|
16
|
+
* 检查任务名称是否重复(全项目范围)
|
|
17
|
+
* @returns 冲突的任务列表(含所属期次)
|
|
18
|
+
*/
|
|
19
|
+
export declare function checkTaskNameConflict(name: string, excludeName?: string): Promise<{
|
|
20
|
+
name: string;
|
|
21
|
+
iteration: string;
|
|
22
|
+
}[]>;
|
|
23
|
+
//# sourceMappingURL=name-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-validator.d.ts","sourceRoot":"","sources":["../../src/core/name-validator.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAW9D;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBzD;AAsBD;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGtG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAoB9H"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAllIterationNames = getAllIterationNames;
|
|
4
|
+
exports.getAllTaskNames = getAllTaskNames;
|
|
5
|
+
exports.checkIterationNameConflict = checkIterationNameConflict;
|
|
6
|
+
exports.checkTaskNameConflict = checkTaskNameConflict;
|
|
7
|
+
/**
|
|
8
|
+
* name-validator — 全局名称唯一性校验
|
|
9
|
+
* 期次名称全项目唯一,任务名称全项目唯一
|
|
10
|
+
*/
|
|
11
|
+
const fs_extra_1 = require("fs-extra");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
/**
|
|
14
|
+
* 扫描所有期次名称(去期次-NNN-前缀,返回原始 name 部分)
|
|
15
|
+
*/
|
|
16
|
+
async function getAllIterationNames() {
|
|
17
|
+
const cwd = process.cwd();
|
|
18
|
+
const entries = await (0, fs_extra_1.readdir)(cwd, { withFileTypes: true });
|
|
19
|
+
return entries
|
|
20
|
+
.filter(e => e.isDirectory() && e.name.startsWith('期次-'))
|
|
21
|
+
.map(e => {
|
|
22
|
+
// 期次-001-MyName → MyName
|
|
23
|
+
const parts = e.name.split('-');
|
|
24
|
+
return parts.slice(2).join('-');
|
|
25
|
+
})
|
|
26
|
+
.filter(n => n.length > 0);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 扫描所有任务名称(全项目范围)
|
|
30
|
+
* 任务名称存储在内容文件的第一行 # 标题中
|
|
31
|
+
*/
|
|
32
|
+
async function getAllTaskNames() {
|
|
33
|
+
const cwd = process.cwd();
|
|
34
|
+
const iterations = await (0, fs_extra_1.readdir)(cwd, { withFileTypes: true });
|
|
35
|
+
const allTasks = [];
|
|
36
|
+
for (const iter of iterations) {
|
|
37
|
+
if (!iter.isDirectory() || !iter.name.startsWith('期次-'))
|
|
38
|
+
continue;
|
|
39
|
+
const iterPath = (0, path_1.join)(cwd, iter.name);
|
|
40
|
+
try {
|
|
41
|
+
const entries = await (0, fs_extra_1.readdir)(iterPath, { withFileTypes: true });
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
if (!entry.isDirectory() || !entry.name.startsWith('Task-'))
|
|
44
|
+
continue;
|
|
45
|
+
const name = await readTaskName((0, path_1.join)(iterPath, entry.name));
|
|
46
|
+
if (name.length > 0)
|
|
47
|
+
allTasks.push(name);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch { /* 跳过 */ }
|
|
51
|
+
}
|
|
52
|
+
return allTasks;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 从任务目录的内容文件中读取任务名称(第一行 # 标题)
|
|
56
|
+
*/
|
|
57
|
+
async function readTaskName(taskDir) {
|
|
58
|
+
// 尝试多个可能的文件
|
|
59
|
+
const files = ['backend/TASK.md', 'backend/REQ.md', 'frontend/TASK.md', 'frontend/REQ.md'];
|
|
60
|
+
for (const f of files) {
|
|
61
|
+
const filePath = (0, path_1.join)(taskDir, f);
|
|
62
|
+
if (await (0, fs_extra_1.pathExists)(filePath)) {
|
|
63
|
+
try {
|
|
64
|
+
const content = await (0, fs_extra_1.readFile)(filePath, 'utf-8');
|
|
65
|
+
const firstLine = content.split('\n')[0].trim();
|
|
66
|
+
const match = firstLine.match(/^#\s+(.+)/);
|
|
67
|
+
if (match)
|
|
68
|
+
return match[1].trim();
|
|
69
|
+
}
|
|
70
|
+
catch { /* skip bad file */ }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return '';
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 检查期次名称是否重复
|
|
77
|
+
* @returns 冲突的期次列表
|
|
78
|
+
*/
|
|
79
|
+
async function checkIterationNameConflict(name, excludeName) {
|
|
80
|
+
const existing = await getAllIterationNames();
|
|
81
|
+
return existing.filter(n => n === name && n !== excludeName);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 检查任务名称是否重复(全项目范围)
|
|
85
|
+
* @returns 冲突的任务列表(含所属期次)
|
|
86
|
+
*/
|
|
87
|
+
async function checkTaskNameConflict(name, excludeName) {
|
|
88
|
+
const cwd = process.cwd();
|
|
89
|
+
const iterations = await (0, fs_extra_1.readdir)(cwd, { withFileTypes: true });
|
|
90
|
+
const conflicts = [];
|
|
91
|
+
for (const iter of iterations) {
|
|
92
|
+
if (!iter.isDirectory() || !iter.name.startsWith('期次-'))
|
|
93
|
+
continue;
|
|
94
|
+
const iterPath = (0, path_1.join)(cwd, iter.name);
|
|
95
|
+
try {
|
|
96
|
+
const entries = await (0, fs_extra_1.readdir)(iterPath, { withFileTypes: true });
|
|
97
|
+
for (const entry of entries) {
|
|
98
|
+
if (!entry.isDirectory() || !entry.name.startsWith('Task-'))
|
|
99
|
+
continue;
|
|
100
|
+
const taskName = await readTaskName((0, path_1.join)(iterPath, entry.name));
|
|
101
|
+
if (taskName === name && taskName !== excludeName) {
|
|
102
|
+
conflicts.push({ name: taskName, iteration: iter.name });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch { /* skip */ }
|
|
107
|
+
}
|
|
108
|
+
return conflicts;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=name-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-validator.js","sourceRoot":"","sources":["../../src/core/name-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成6位短ID (time-based + crypto random)
|
|
3
|
+
* 格式: 4位时间戳(base36) + 2位随机
|
|
4
|
+
* 例如: "k8x3a1", "m9f2b7"
|
|
5
|
+
*/
|
|
6
|
+
export declare function shortId(): string;
|
|
7
|
+
/**
|
|
8
|
+
* 生成期次ID: 期次-{shortId}-{name}
|
|
9
|
+
*/
|
|
10
|
+
export declare function iterationId(name: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* 生成任务ID: Task-{shortId}
|
|
13
|
+
*/
|
|
14
|
+
export declare function taskId(): string;
|
|
15
|
+
//# sourceMappingURL=short-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-id.d.ts","sourceRoot":"","sources":["../../src/core/short-id.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAehC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAE/B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shortId = shortId;
|
|
4
|
+
exports.iterationId = iterationId;
|
|
5
|
+
exports.taskId = taskId;
|
|
6
|
+
/**
|
|
7
|
+
* short-id — 永不重复的短ID生成器
|
|
8
|
+
* 6位字符 0-9a-z,36^6 = 21 亿种组合
|
|
9
|
+
*/
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
11
|
+
const CHARS = '0123456789abcdefghijklmnopqrstuvwxyz';
|
|
12
|
+
/**
|
|
13
|
+
* 生成6位短ID (time-based + crypto random)
|
|
14
|
+
* 格式: 4位时间戳(base36) + 2位随机
|
|
15
|
+
* 例如: "k8x3a1", "m9f2b7"
|
|
16
|
+
*/
|
|
17
|
+
function shortId() {
|
|
18
|
+
// 时间戳部分 (base36, 4位): 提供时间排序 + 粗粒度唯一性
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
let ts = '';
|
|
21
|
+
let n = now;
|
|
22
|
+
for (let i = 0; i < 4; i++) {
|
|
23
|
+
ts = CHARS[n % 36] + ts;
|
|
24
|
+
n = Math.floor(n / 36);
|
|
25
|
+
}
|
|
26
|
+
// 随机部分 (crypto强随机, 2位): 保证同一毫秒内不碰撞
|
|
27
|
+
const bytes = (0, crypto_1.randomBytes)(1);
|
|
28
|
+
const r1 = CHARS[bytes[0] % 36];
|
|
29
|
+
const r2 = CHARS[(bytes[0] >> 4) % 36];
|
|
30
|
+
return ts + r1 + r2;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 生成期次ID: 期次-{shortId}-{name}
|
|
34
|
+
*/
|
|
35
|
+
function iterationId(name) {
|
|
36
|
+
const cleanName = name.replace(/^期次-/, '').replace(/[\/\\]/g, '-');
|
|
37
|
+
return `期次-${shortId()}-${cleanName}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 生成任务ID: Task-{shortId}
|
|
41
|
+
*/
|
|
42
|
+
function taskId() {
|
|
43
|
+
return `Task-${shortId()}`;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=short-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-id.js","sourceRoot":"","sources":["../../src/core/short-id.ts"],"names":[],"mappings":";;AAaA,0BAeC;AAKD,kCAGC;AAKD,wBAEC;AA3CD;;;GAGG;AACH,mCAAqC;AAErC,MAAM,KAAK,GAAG,sCAAsC,CAAC;AAErD;;;;GAIG;AACH,SAAgB,OAAO;IACrB,sCAAsC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,mCAAmC;IACnC,MAAM,KAAK,GAAG,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO,MAAM,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,MAAM;IACpB,OAAO,QAAQ,OAAO,EAAE,EAAE,CAAC;AAC7B,CAAC"}
|