speccore 1.0.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/README.en.md +401 -0
- package/README.md +401 -0
- package/bin/speccore +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +450 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/archive.d.ts +10 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +138 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/audit.d.ts +10 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +278 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/baseline.d.ts +13 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +227 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/bugfix.d.ts +13 -0
- package/dist/commands/bugfix.d.ts.map +1 -0
- package/dist/commands/bugfix.js +181 -0
- package/dist/commands/bugfix.js.map +1 -0
- package/dist/commands/change.d.ts +14 -0
- package/dist/commands/change.d.ts.map +1 -0
- package/dist/commands/change.js +150 -0
- package/dist/commands/change.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +110 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +9 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +209 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/demo.d.ts +10 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +151 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/execute.d.ts +18 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +127 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/global-status.d.ts +9 -0
- package/dist/commands/global-status.d.ts.map +1 -0
- package/dist/commands/global-status.js +135 -0
- package/dist/commands/global-status.js.map +1 -0
- package/dist/commands/goal.d.ts +15 -0
- package/dist/commands/goal.d.ts.map +1 -0
- package/dist/commands/goal.js +282 -0
- package/dist/commands/goal.js.map +1 -0
- package/dist/commands/handover.d.ts +11 -0
- package/dist/commands/handover.d.ts.map +1 -0
- package/dist/commands/handover.js +169 -0
- package/dist/commands/handover.js.map +1 -0
- package/dist/commands/health.d.ts +7 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +80 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/help.d.ts +10 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +93 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +9 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +87 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/impact.d.ts +12 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +238 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/import.d.ts +15 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +366 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +564 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/iteration/create.d.ts +7 -0
- package/dist/commands/iteration/create.d.ts.map +1 -0
- package/dist/commands/iteration/create.js +141 -0
- package/dist/commands/iteration/create.js.map +1 -0
- package/dist/commands/iteration/split.d.ts +9 -0
- package/dist/commands/iteration/split.d.ts.map +1 -0
- package/dist/commands/iteration/split.js +165 -0
- package/dist/commands/iteration/split.js.map +1 -0
- package/dist/commands/iteration-from-global.d.ts +11 -0
- package/dist/commands/iteration-from-global.d.ts.map +1 -0
- package/dist/commands/iteration-from-global.js +294 -0
- package/dist/commands/iteration-from-global.js.map +1 -0
- package/dist/commands/plan.d.ts +12 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +126 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/progress.d.ts +10 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +89 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/rename.d.ts +14 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +298 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/report.d.ts +10 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +124 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/research.d.ts +14 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +181 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/retro.d.ts +10 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +130 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/spec.d.ts +8 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +155 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +48 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync-global.d.ts +13 -0
- package/dist/commands/sync-global.d.ts.map +1 -0
- package/dist/commands/sync-global.js +218 -0
- package/dist/commands/sync-global.js.map +1 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +170 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/task/new.d.ts +13 -0
- package/dist/commands/task/new.d.ts.map +1 -0
- package/dist/commands/task/new.js +195 -0
- package/dist/commands/task/new.js.map +1 -0
- package/dist/commands/template-add.d.ts +12 -0
- package/dist/commands/template-add.d.ts.map +1 -0
- package/dist/commands/template-add.js +65 -0
- package/dist/commands/template-add.js.map +1 -0
- package/dist/commands/validate.d.ts +10 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +37 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/welcome.d.ts +9 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +166 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/core/context.d.ts +31 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +145 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/global-layer.d.ts +124 -0
- package/dist/core/global-layer.d.ts.map +1 -0
- package/dist/core/global-layer.js +456 -0
- package/dist/core/global-layer.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent-recognition.d.ts +48 -0
- package/dist/core/intent-recognition.d.ts.map +1 -0
- package/dist/core/intent-recognition.js +485 -0
- package/dist/core/intent-recognition.js.map +1 -0
- package/dist/core/state.d.ts +26 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +187 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/template-engine.d.ts +28 -0
- package/dist/core/template-engine.d.ts.map +1 -0
- package/dist/core/template-engine.js +57 -0
- package/dist/core/template-engine.js.map +1 -0
- package/dist/core/validator.d.ts +26 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +246 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/yaml-parser.d.ts +25 -0
- package/dist/core/yaml-parser.d.ts.map +1 -0
- package/dist/core/yaml-parser.js +113 -0
- package/dist/core/yaml-parser.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/file.d.ts +29 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +126 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/git.d.ts +25 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +77 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +184 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* import - 多项目导入命令
|
|
4
|
+
* 将存量项目导入到全量层(GLOBAL/PROJECTS/),填充全量需求和索引
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.importCommand = importCommand;
|
|
8
|
+
const fs_extra_1 = require("fs-extra");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const global_layer_1 = require("../core/global-layer");
|
|
12
|
+
async function importCommand(options) {
|
|
13
|
+
const spinner = new logger_1.Spinner('Importing project to global layer');
|
|
14
|
+
spinner.start();
|
|
15
|
+
try {
|
|
16
|
+
// 新逻辑:多项目导入到全量层
|
|
17
|
+
if (options.project) {
|
|
18
|
+
const projectName = options.project;
|
|
19
|
+
const projectPath = options.path || `./${projectName}`;
|
|
20
|
+
const projectType = (options.type || 'backend');
|
|
21
|
+
await importToGlobalLayer(projectName, projectPath, projectType);
|
|
22
|
+
spinner.stop('Project imported to global layer');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// 兼容旧逻辑
|
|
26
|
+
const sources = (options.source || 'all').split(',');
|
|
27
|
+
const results = [];
|
|
28
|
+
for (const source of sources) {
|
|
29
|
+
switch (source.trim()) {
|
|
30
|
+
case 'code':
|
|
31
|
+
results.push(await importCode(options.path || './'));
|
|
32
|
+
break;
|
|
33
|
+
case 'prd':
|
|
34
|
+
results.push(await importPRD(options.path || './PRD.md'));
|
|
35
|
+
break;
|
|
36
|
+
case 'prototype':
|
|
37
|
+
results.push(await importPrototype(options.url || ''));
|
|
38
|
+
break;
|
|
39
|
+
case 'all':
|
|
40
|
+
results.push(await autoDetectImport(options.path || './'));
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
logger_1.logger.warn(`Unknown source type: ${source}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
spinner.stop('Import completed');
|
|
47
|
+
for (const result of results) {
|
|
48
|
+
logger_1.logger.info(result);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
spinner.fail(`Import failed: ${error}`);
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 多项目导入到全量层
|
|
58
|
+
*/
|
|
59
|
+
async function importToGlobalLayer(projectName, projectPath, projectType) {
|
|
60
|
+
// 1. 检查路径
|
|
61
|
+
if (!(await (0, fs_extra_1.pathExists)(projectPath))) {
|
|
62
|
+
throw new Error(`Project path not found: ${projectPath}`);
|
|
63
|
+
}
|
|
64
|
+
// 2. 检查全局层是否已初始化
|
|
65
|
+
const globalDir = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
|
|
66
|
+
if (!(await (0, fs_extra_1.pathExists)(globalDir))) {
|
|
67
|
+
throw new Error('Global layer not initialized. Run: speccore init');
|
|
68
|
+
}
|
|
69
|
+
// 3. 读取当前全量索引
|
|
70
|
+
const index = await (0, global_layer_1.readGlobalIndex)();
|
|
71
|
+
// 4. 扫描项目代码
|
|
72
|
+
logger_1.logger.info(`🔍 Scanning project: ${projectName} (${projectType})`);
|
|
73
|
+
const scanResult = await scanProject(projectPath, projectType);
|
|
74
|
+
logger_1.logger.info(` Found ${scanResult.apis.length} API endpoints, ${scanResult.models.length} data models`);
|
|
75
|
+
// 5. 生成需求条目
|
|
76
|
+
const requirements = [];
|
|
77
|
+
let nextId = parseInt((0, global_layer_1.getNextReqId)(index).replace('REQ-', ''), 10);
|
|
78
|
+
for (const api of scanResult.apis) {
|
|
79
|
+
const reqId = `REQ-${String(nextId++).padStart(3, '0')}`;
|
|
80
|
+
requirements.push({
|
|
81
|
+
id: reqId,
|
|
82
|
+
name: api.name,
|
|
83
|
+
description: `API: ${api.method} ${api.path}\n${api.description || '从代码分析提取的功能描述'}`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// 如果没有扫描到 API,生成一个占位需求
|
|
87
|
+
if (requirements.length === 0) {
|
|
88
|
+
const reqId = `REQ-${String(nextId++).padStart(3, '0')}`;
|
|
89
|
+
requirements.push({
|
|
90
|
+
id: reqId,
|
|
91
|
+
name: `${projectName} 项目导入`,
|
|
92
|
+
description: `从 ${projectPath} 导入的项目,类型: ${projectType}`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// 6. 创建项目目录和文件
|
|
96
|
+
await (0, global_layer_1.ensureProjectDir)(projectName);
|
|
97
|
+
const entries = await (0, global_layer_1.writeProjectRequirements)(projectName, projectType, requirements, scanResult.techStack);
|
|
98
|
+
await (0, global_layer_1.writeProjectMetadata)(projectName, projectType, scanResult.techStack, scanResult.repoUrl);
|
|
99
|
+
// 7. 更新全量索引
|
|
100
|
+
for (const entry of entries) {
|
|
101
|
+
await (0, global_layer_1.appendReqToIndex)(entry);
|
|
102
|
+
}
|
|
103
|
+
await (0, global_layer_1.upsertProjectInIndex)({
|
|
104
|
+
name: projectName,
|
|
105
|
+
type: projectType,
|
|
106
|
+
reqCount: entries.length,
|
|
107
|
+
implemented: entries.filter((e) => e.status === '📦 已有实现').length,
|
|
108
|
+
inProgress: 0,
|
|
109
|
+
pending: 0,
|
|
110
|
+
lastImport: new Date().toISOString().split('T')[0],
|
|
111
|
+
});
|
|
112
|
+
// 8. 更新版本
|
|
113
|
+
const newVersion = (0, global_layer_1.bumpGlobalVersion)(index.version);
|
|
114
|
+
await (0, global_layer_1.updateIndexVersion)(newVersion);
|
|
115
|
+
// 9. 更新 OVERVIEW.md 和 CHANGELOG.md
|
|
116
|
+
await updateGlobalOverview(projectName, projectType);
|
|
117
|
+
await updateGlobalChangelog(`导入项目 ${projectName}`, newVersion);
|
|
118
|
+
// 10. 输出报告
|
|
119
|
+
logger_1.logger.info('');
|
|
120
|
+
logger_1.logger.info('✅ 项目导入完成!');
|
|
121
|
+
logger_1.logger.info('');
|
|
122
|
+
logger_1.logger.info('📊 导入摘要:');
|
|
123
|
+
logger_1.logger.info(` 项目名称: ${projectName}`);
|
|
124
|
+
logger_1.logger.info(` 项目类型: ${projectType}`);
|
|
125
|
+
logger_1.logger.info(` 识别接口: ${scanResult.apis.length} 个`);
|
|
126
|
+
logger_1.logger.info(` 数据模型: ${scanResult.models.length} 个`);
|
|
127
|
+
logger_1.logger.info(` 生成需求: ${entries.map((e) => e.id).join(', ')}`);
|
|
128
|
+
logger_1.logger.info('');
|
|
129
|
+
logger_1.logger.info('📁 已创建:');
|
|
130
|
+
logger_1.logger.info(` GLOBAL/PROJECTS/${projectName}/REQUIREMENT.md`);
|
|
131
|
+
logger_1.logger.info(` GLOBAL/PROJECTS/${projectName}/METADATA.md`);
|
|
132
|
+
logger_1.logger.info('');
|
|
133
|
+
logger_1.logger.info('📋 已更新:');
|
|
134
|
+
logger_1.logger.info(' GLOBAL/INDEX.md(需求映射 + 项目列表)');
|
|
135
|
+
logger_1.logger.info(' GLOBAL/OVERVIEW.md');
|
|
136
|
+
logger_1.logger.info('');
|
|
137
|
+
logger_1.logger.info('📋 下一步:');
|
|
138
|
+
logger_1.logger.info(' speccore global-status 查看全量层状态');
|
|
139
|
+
logger_1.logger.info(' speccore iteration-from-global 从全量层生成期次');
|
|
140
|
+
}
|
|
141
|
+
async function scanProject(projectPath, projectType) {
|
|
142
|
+
const result = {
|
|
143
|
+
apis: [],
|
|
144
|
+
models: [],
|
|
145
|
+
techStack: '',
|
|
146
|
+
repoUrl: '',
|
|
147
|
+
};
|
|
148
|
+
const absPath = (0, path_1.join)(process.cwd(), projectPath);
|
|
149
|
+
if (projectType === 'backend') {
|
|
150
|
+
// 扫描后端项目
|
|
151
|
+
// 尝试读取 pom.xml (Java/Maven)
|
|
152
|
+
const pomPath = (0, path_1.join)(absPath, 'pom.xml');
|
|
153
|
+
if (await (0, fs_extra_1.pathExists)(pomPath)) {
|
|
154
|
+
const pom = await (0, fs_extra_1.readFile)(pomPath, 'utf-8');
|
|
155
|
+
const groupMatch = pom.match(/<groupId>([^<]+)<\/groupId>/);
|
|
156
|
+
const artifactMatch = pom.match(/<artifactId>([^<]+)<\/artifactId>/);
|
|
157
|
+
if (groupMatch && artifactMatch) {
|
|
158
|
+
result.techStack = `Java Maven: ${groupMatch[1]}:${artifactMatch[1]}`;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// 扫描 package.json (Node.js)
|
|
162
|
+
const pkgPath = (0, path_1.join)(absPath, 'package.json');
|
|
163
|
+
if (await (0, fs_extra_1.pathExists)(pkgPath)) {
|
|
164
|
+
const pkg = JSON.parse(await (0, fs_extra_1.readFile)(pkgPath, 'utf-8'));
|
|
165
|
+
result.techStack = `Node.js: ${pkg.name || 'unnamed'}`;
|
|
166
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
167
|
+
if (deps['@nestjs/core'])
|
|
168
|
+
result.techStack += ' (NestJS)';
|
|
169
|
+
else if (deps['express'])
|
|
170
|
+
result.techStack += ' (Express)';
|
|
171
|
+
}
|
|
172
|
+
// 扫描 src/ 目录寻找 Controller/路由
|
|
173
|
+
const srcDir = (0, path_1.join)(absPath, 'src');
|
|
174
|
+
if (await (0, fs_extra_1.pathExists)(srcDir)) {
|
|
175
|
+
result.apis = await scanApiEndpoints(srcDir);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else if (['web', 'h5', 'miniapp'].includes(projectType)) {
|
|
179
|
+
// 扫描前端项目
|
|
180
|
+
const pkgPath = (0, path_1.join)(absPath, 'package.json');
|
|
181
|
+
if (await (0, fs_extra_1.pathExists)(pkgPath)) {
|
|
182
|
+
const pkg = JSON.parse(await (0, fs_extra_1.readFile)(pkgPath, 'utf-8'));
|
|
183
|
+
result.techStack = `${projectType}: ${pkg.name || 'unnamed'}`;
|
|
184
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
185
|
+
if (deps['vue'])
|
|
186
|
+
result.techStack += ' (Vue)';
|
|
187
|
+
else if (deps['react'])
|
|
188
|
+
result.techStack += ' (React)';
|
|
189
|
+
else if (deps['@angular/core'])
|
|
190
|
+
result.techStack += ' (Angular)';
|
|
191
|
+
// 扫描 pages/ 目录
|
|
192
|
+
const pagesDir = (0, path_1.join)(absPath, 'src', 'pages');
|
|
193
|
+
if (await (0, fs_extra_1.pathExists)(pagesDir)) {
|
|
194
|
+
const pages = await (0, fs_extra_1.readdir)(pagesDir, { withFileTypes: true });
|
|
195
|
+
for (const page of pages.filter((p) => p.isDirectory())) {
|
|
196
|
+
result.apis.push({
|
|
197
|
+
method: 'PAGE',
|
|
198
|
+
path: `/${page.name}`,
|
|
199
|
+
name: `${page.name} 页面`,
|
|
200
|
+
description: `${projectType} 页面`,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* 递归扫描 API 端点
|
|
210
|
+
*/
|
|
211
|
+
async function scanApiEndpoints(srcDir) {
|
|
212
|
+
const apis = [];
|
|
213
|
+
async function scan(dir) {
|
|
214
|
+
if (!(await (0, fs_extra_1.pathExists)(dir)))
|
|
215
|
+
return;
|
|
216
|
+
const entries = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true });
|
|
217
|
+
for (const entry of entries) {
|
|
218
|
+
const fullPath = (0, path_1.join)(dir, entry.name);
|
|
219
|
+
if (entry.isDirectory()) {
|
|
220
|
+
await scan(fullPath);
|
|
221
|
+
}
|
|
222
|
+
else if ([
|
|
223
|
+
'.java', '.ts', '.js', '.go', '.py',
|
|
224
|
+
].includes((0, path_1.extname)(entry.name))) {
|
|
225
|
+
const content = await (0, fs_extra_1.readFile)(fullPath, 'utf-8');
|
|
226
|
+
// Java Spring
|
|
227
|
+
const javaMatches = content.matchAll(/@(GetMapping|PostMapping|PutMapping|DeleteMapping|PatchMapping|RequestMapping)\s*(?:\([^)]*\))?\s*(?:@[^(\n]*\s*)*(?:public\s+\S+\s+)?(\w+)\s*\(/g);
|
|
228
|
+
for (const match of javaMatches) {
|
|
229
|
+
const annMethod = match[1];
|
|
230
|
+
const funcName = match[2];
|
|
231
|
+
// Try to extract path
|
|
232
|
+
const pathMatch = content.substring(match.index || 0, (match.index || 0) + 200).match(/@\w+Mapping\s*\(\s*(?:value\s*=\s*)?["']([^"']+)["']/);
|
|
233
|
+
const apiPath = pathMatch ? pathMatch[1] : '/';
|
|
234
|
+
apis.push({
|
|
235
|
+
method: annMethod.replace('Mapping', '').toUpperCase(),
|
|
236
|
+
path: apiPath,
|
|
237
|
+
name: funcName ? funcName.replace(/([A-Z])/g, ' $1').trim() : apiPath,
|
|
238
|
+
description: `从 ${entry.name} 扫描到的 API 端点`,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
// TypeScript NestJS
|
|
242
|
+
const tsMatches = content.matchAll(/@(Get|Post|Put|Delete|Patch)\s*\(\s*(?:['"]([^'"]*)['"]\s*)?\)/g);
|
|
243
|
+
for (const match of tsMatches) {
|
|
244
|
+
apis.push({
|
|
245
|
+
method: match[1],
|
|
246
|
+
path: match[2] || '/',
|
|
247
|
+
name: match[2] ? match[2].replace(/^\//, '').replace(/\//g, ' ') : 'API',
|
|
248
|
+
description: `从 ${entry.name} 扫描到的 NestJS 端点`,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
// Express routes
|
|
252
|
+
const expressMatches = content.matchAll(/(?:app|router)\.(get|post|put|delete|patch)\s*\(\s*['"]([^'"]+)['"]/g);
|
|
253
|
+
for (const match of expressMatches) {
|
|
254
|
+
apis.push({
|
|
255
|
+
method: match[1].toUpperCase(),
|
|
256
|
+
path: match[2],
|
|
257
|
+
name: match[2].replace(/^\//, '').replace(/\//g, ' '),
|
|
258
|
+
description: `从 ${entry.name} 扫描到的 Express 路由`,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
await scan(srcDir);
|
|
265
|
+
return apis;
|
|
266
|
+
}
|
|
267
|
+
// ============================================================
|
|
268
|
+
// 全局文件更新
|
|
269
|
+
// ============================================================
|
|
270
|
+
async function updateGlobalOverview(projectName, projectType) {
|
|
271
|
+
const overviewPath = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL', 'OVERVIEW.md');
|
|
272
|
+
if (!(await (0, fs_extra_1.pathExists)(overviewPath)))
|
|
273
|
+
return;
|
|
274
|
+
let content = await (0, fs_extra_1.readFile)(overviewPath, 'utf-8');
|
|
275
|
+
const today = new Date().toISOString().split('T')[0];
|
|
276
|
+
const newEntry = `| ${projectName} | ${projectType} | 已导入 | - |`;
|
|
277
|
+
if (content.includes('_待导入_')) {
|
|
278
|
+
content = content.replace('| _待导入_ | - | - | - |', newEntry);
|
|
279
|
+
}
|
|
280
|
+
await (0, fs_extra_1.writeFile)(overviewPath, content);
|
|
281
|
+
}
|
|
282
|
+
async function updateGlobalChangelog(description, version) {
|
|
283
|
+
const changelogPath = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL', 'CHANGELOG.md');
|
|
284
|
+
if (!(await (0, fs_extra_1.pathExists)(changelogPath)))
|
|
285
|
+
return;
|
|
286
|
+
let content = await (0, fs_extra_1.readFile)(changelogPath, 'utf-8');
|
|
287
|
+
const today = new Date().toISOString().split('T')[0];
|
|
288
|
+
const newEntry = `| ${today} | ${version} | 导入 | ${description} | SpecCore |`;
|
|
289
|
+
if (content.includes('_暂无记录_')) {
|
|
290
|
+
content = content.replace('| _暂无记录_ | v1.0 | 创建 | 全量层模板初始化 | - |', newEntry);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// 在变更记录表后面追加
|
|
294
|
+
const firstEntry = content.indexOf('|', content.indexOf('## 变更记录'));
|
|
295
|
+
const endOfLine = content.indexOf('\n', firstEntry);
|
|
296
|
+
if (endOfLine > 0) {
|
|
297
|
+
content = content.slice(0, endOfLine + 1) + newEntry + '\n' + content.slice(endOfLine + 1);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
await (0, fs_extra_1.writeFile)(changelogPath, content);
|
|
301
|
+
}
|
|
302
|
+
// ============================================================
|
|
303
|
+
// 旧版兼容函数
|
|
304
|
+
// ============================================================
|
|
305
|
+
async function importCode(sourcePath) {
|
|
306
|
+
if (!(await (0, fs_extra_1.pathExists)(sourcePath))) {
|
|
307
|
+
throw new Error(`Path not found: ${sourcePath}`);
|
|
308
|
+
}
|
|
309
|
+
const statsObj = await (0, fs_extra_1.stat)(sourcePath);
|
|
310
|
+
if (!statsObj.isDirectory()) {
|
|
311
|
+
throw new Error(`Path must be a directory: ${sourcePath}`);
|
|
312
|
+
}
|
|
313
|
+
const entries = await (0, fs_extra_1.readdir)(sourcePath, { withFileTypes: true });
|
|
314
|
+
const files = entries.filter((e) => e.isFile() && ['.java', '.ts', '.js', '.py', '.go'].includes((0, path_1.extname)(e.name)));
|
|
315
|
+
logger_1.logger.info(`Legacy mode: Found ${files.length} source files.`);
|
|
316
|
+
logger_1.logger.info('💡 Tip: Use speccore import --project=<name> --path=<path> --type=<type> for global layer import.');
|
|
317
|
+
return `Found ${files.length} source files in ${sourcePath}`;
|
|
318
|
+
}
|
|
319
|
+
async function importPRD(prdPath) {
|
|
320
|
+
if (!(await (0, fs_extra_1.pathExists)(prdPath))) {
|
|
321
|
+
throw new Error(`PRD file not found: ${prdPath}`);
|
|
322
|
+
}
|
|
323
|
+
const content = await (0, fs_extra_1.readFile)(prdPath, 'utf-8');
|
|
324
|
+
const requirements = extractRequirements(content);
|
|
325
|
+
logger_1.logger.info(`Extracted ${requirements.length} requirements (legacy mode)`);
|
|
326
|
+
return `Imported PRD from ${prdPath}: ${requirements.length} requirements`;
|
|
327
|
+
}
|
|
328
|
+
function extractRequirements(content) {
|
|
329
|
+
const requirements = [];
|
|
330
|
+
const patterns = [
|
|
331
|
+
/(?:需求|Requirement)\s*[::]\s*(.+)/g,
|
|
332
|
+
/(?:功能|Feature)\s*[::]\s*(.+)/g,
|
|
333
|
+
/\d+\.\s+(.+)/g,
|
|
334
|
+
];
|
|
335
|
+
for (const pattern of patterns) {
|
|
336
|
+
const matches = content.matchAll(pattern);
|
|
337
|
+
for (const match of matches) {
|
|
338
|
+
requirements.push(match[1].trim());
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return requirements;
|
|
342
|
+
}
|
|
343
|
+
async function importPrototype(url) {
|
|
344
|
+
if (!url) {
|
|
345
|
+
throw new Error('Prototype URL is required');
|
|
346
|
+
}
|
|
347
|
+
logger_1.logger.info(`Importing prototype from ${url}`);
|
|
348
|
+
return `Prototype imported from ${url}`;
|
|
349
|
+
}
|
|
350
|
+
async function autoDetectImport(sourcePath) {
|
|
351
|
+
logger_1.logger.info('💡 Tip: Use speccore import --project=<name> --path=<path> --type=<type> for global layer import.');
|
|
352
|
+
logger_1.logger.info('Auto-detecting project structure...');
|
|
353
|
+
const results = [];
|
|
354
|
+
if (await (0, fs_extra_1.pathExists)((0, path_1.join)(sourcePath, 'src'))) {
|
|
355
|
+
results.push(await importCode(sourcePath));
|
|
356
|
+
}
|
|
357
|
+
const prdFiles = ['PRD.md', 'README.md', 'docs/PRD.md'];
|
|
358
|
+
for (const prdFile of prdFiles) {
|
|
359
|
+
if (await (0, fs_extra_1.pathExists)((0, path_1.join)(sourcePath, prdFile))) {
|
|
360
|
+
results.push(await importPRD((0, path_1.join)(sourcePath, prdFile)));
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return results.join('\n');
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ErE"}
|