speccore 5.3.2 → 5.3.3

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.
Files changed (116) hide show
  1. package/dist/commands/audit.d.ts +10 -0
  2. package/dist/commands/audit.d.ts.map +1 -0
  3. package/dist/commands/audit.js +278 -0
  4. package/dist/commands/audit.js.map +1 -0
  5. package/dist/commands/backup.js.map +1 -1
  6. package/dist/commands/baseline.d.ts +13 -0
  7. package/dist/commands/baseline.d.ts.map +1 -0
  8. package/dist/commands/baseline.js +227 -0
  9. package/dist/commands/baseline.js.map +1 -0
  10. package/dist/commands/bugfix.d.ts +13 -0
  11. package/dist/commands/bugfix.d.ts.map +1 -0
  12. package/dist/commands/bugfix.js +181 -0
  13. package/dist/commands/bugfix.js.map +1 -0
  14. package/dist/commands/change.d.ts +14 -0
  15. package/dist/commands/change.d.ts.map +1 -0
  16. package/dist/commands/change.js +208 -0
  17. package/dist/commands/change.js.map +1 -0
  18. package/dist/commands/context.d.ts +8 -0
  19. package/dist/commands/context.d.ts.map +1 -0
  20. package/dist/commands/context.js +180 -0
  21. package/dist/commands/context.js.map +1 -0
  22. package/dist/commands/dashboard.d.ts +9 -0
  23. package/dist/commands/dashboard.d.ts.map +1 -0
  24. package/dist/commands/dashboard.js +209 -0
  25. package/dist/commands/dashboard.js.map +1 -0
  26. package/dist/commands/demo.d.ts +10 -0
  27. package/dist/commands/demo.d.ts.map +1 -0
  28. package/dist/commands/demo.js +151 -0
  29. package/dist/commands/demo.js.map +1 -0
  30. package/dist/commands/execute.js +5 -2
  31. package/dist/commands/execute.js.map +1 -1
  32. package/dist/commands/global-status.d.ts +9 -0
  33. package/dist/commands/global-status.d.ts.map +1 -0
  34. package/dist/commands/global-status.js +135 -0
  35. package/dist/commands/global-status.js.map +1 -0
  36. package/dist/commands/goal.d.ts +15 -0
  37. package/dist/commands/goal.d.ts.map +1 -0
  38. package/dist/commands/goal.js +232 -0
  39. package/dist/commands/goal.js.map +1 -0
  40. package/dist/commands/handover.d.ts +11 -0
  41. package/dist/commands/handover.d.ts.map +1 -0
  42. package/dist/commands/handover.js +169 -0
  43. package/dist/commands/handover.js.map +1 -0
  44. package/dist/commands/help.d.ts +10 -0
  45. package/dist/commands/help.d.ts.map +1 -0
  46. package/dist/commands/help.js +93 -0
  47. package/dist/commands/help.js.map +1 -0
  48. package/dist/commands/history.d.ts +9 -0
  49. package/dist/commands/history.d.ts.map +1 -0
  50. package/dist/commands/history.js +87 -0
  51. package/dist/commands/history.js.map +1 -0
  52. package/dist/commands/impact.d.ts +12 -0
  53. package/dist/commands/impact.d.ts.map +1 -0
  54. package/dist/commands/impact.js +238 -0
  55. package/dist/commands/impact.js.map +1 -0
  56. package/dist/commands/index-update.d.ts +8 -0
  57. package/dist/commands/index-update.d.ts.map +1 -0
  58. package/dist/commands/index-update.js +180 -0
  59. package/dist/commands/index-update.js.map +1 -0
  60. package/dist/commands/iteration-from-global.d.ts +11 -0
  61. package/dist/commands/iteration-from-global.d.ts.map +1 -0
  62. package/dist/commands/iteration-from-global.js +294 -0
  63. package/dist/commands/iteration-from-global.js.map +1 -0
  64. package/dist/commands/new-task.d.ts +15 -0
  65. package/dist/commands/new-task.d.ts.map +1 -0
  66. package/dist/commands/new-task.js +208 -0
  67. package/dist/commands/new-task.js.map +1 -0
  68. package/dist/commands/platform-add.d.ts +12 -0
  69. package/dist/commands/platform-add.d.ts.map +1 -0
  70. package/dist/commands/platform-add.js +111 -0
  71. package/dist/commands/platform-add.js.map +1 -0
  72. package/dist/commands/rename.d.ts +14 -0
  73. package/dist/commands/rename.d.ts.map +1 -0
  74. package/dist/commands/rename.js +298 -0
  75. package/dist/commands/rename.js.map +1 -0
  76. package/dist/commands/research.d.ts +14 -0
  77. package/dist/commands/research.d.ts.map +1 -0
  78. package/dist/commands/research.js +181 -0
  79. package/dist/commands/research.js.map +1 -0
  80. package/dist/commands/retro.d.ts +10 -0
  81. package/dist/commands/retro.d.ts.map +1 -0
  82. package/dist/commands/retro.js +130 -0
  83. package/dist/commands/retro.js.map +1 -0
  84. package/dist/commands/spec.d.ts +8 -0
  85. package/dist/commands/spec.d.ts.map +1 -0
  86. package/dist/commands/spec.js +155 -0
  87. package/dist/commands/spec.js.map +1 -0
  88. package/dist/commands/sync-global.d.ts +13 -0
  89. package/dist/commands/sync-global.d.ts.map +1 -0
  90. package/dist/commands/sync-global.js +218 -0
  91. package/dist/commands/sync-global.js.map +1 -0
  92. package/dist/commands/sync.d.ts +13 -0
  93. package/dist/commands/sync.d.ts.map +1 -0
  94. package/dist/commands/sync.js +199 -0
  95. package/dist/commands/sync.js.map +1 -0
  96. package/dist/commands/template-add.d.ts +12 -0
  97. package/dist/commands/template-add.d.ts.map +1 -0
  98. package/dist/commands/template-add.js +65 -0
  99. package/dist/commands/template-add.js.map +1 -0
  100. package/dist/commands/welcome.d.ts +9 -0
  101. package/dist/commands/welcome.d.ts.map +1 -0
  102. package/dist/commands/welcome.js +166 -0
  103. package/dist/commands/welcome.js.map +1 -0
  104. package/dist/core/global-layer.d.ts +124 -0
  105. package/dist/core/global-layer.d.ts.map +1 -0
  106. package/dist/core/global-layer.js +456 -0
  107. package/dist/core/global-layer.js.map +1 -0
  108. package/dist/core/intent-recognition.d.ts +48 -0
  109. package/dist/core/intent-recognition.d.ts.map +1 -0
  110. package/dist/core/intent-recognition.js +524 -0
  111. package/dist/core/intent-recognition.js.map +1 -0
  112. package/dist/core/schemas/context.schema.d.ts +6 -4
  113. package/dist/core/schemas/context.schema.d.ts.map +1 -1
  114. package/dist/core/schemas/context.schema.js +4 -3
  115. package/dist/core/schemas/context.schema.js.map +1 -1
  116. package/package.json +1 -1
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * index-update — 扫描 GLOBAL/PROJECTS/ 下所有项目需求,自动重建 GLOBAL/INDEX.md
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.indexUpdateCommand = indexUpdateCommand;
7
+ const fs_extra_1 = require("fs-extra");
8
+ const path_1 = require("path");
9
+ const logger_1 = require("../utils/logger");
10
+ const global_layer_1 = require("../core/global-layer");
11
+ async function indexUpdateCommand(options) {
12
+ const spinner = new logger_1.Spinner('Scanning requirements and rebuilding index');
13
+ spinner.start();
14
+ try {
15
+ const globalDir = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
16
+ if (!(await (0, fs_extra_1.pathExists)(globalDir))) {
17
+ spinner.fail('Global layer not initialized. Run: speccore init');
18
+ return;
19
+ }
20
+ const projectsDir = (0, path_1.join)(globalDir, 'PROJECTS');
21
+ if (!(await (0, fs_extra_1.pathExists)(projectsDir))) {
22
+ spinner.fail('No projects found in GLOBAL/PROJECTS/');
23
+ return;
24
+ }
25
+ const index = await (0, global_layer_1.readGlobalIndex)();
26
+ const today = new Date().toISOString().split('T')[0];
27
+ // 扫描所有项目
28
+ const projects = await scanAllProjects(projectsDir);
29
+ // 收集所有需求
30
+ const allReqs = [];
31
+ let totalReqs = 0;
32
+ let newReqs = 0;
33
+ let updatedReqs = 0;
34
+ const currentReqIds = new Set();
35
+ for (const proj of projects) {
36
+ // 提取 REQ-XXX 条目
37
+ const reqContent = await (0, fs_extra_1.readFile)((0, path_1.join)(projectsDir, proj, 'REQUIREMENT.md'), 'utf-8');
38
+ const reqMatches = reqContent.matchAll(/### (REQ-\d+).*\n([\s\S]*?)(?=### REQ-\d+|$)/g);
39
+ for (const match of reqMatches) {
40
+ const reqId = match[1];
41
+ const reqBody = match[2];
42
+ currentReqIds.add(reqId);
43
+ totalReqs++;
44
+ // 从 GLOBAL/INDEX 查找现有状态
45
+ const existingEntry = index.reqs?.find((r) => r.id === reqId);
46
+ const name = extractField(reqBody, '需求名称') || proj;
47
+ const status = extractField(reqBody, '状态') || '📝 待开发';
48
+ const version = extractField(reqBody, '版本') || 'v1.0';
49
+ allReqs.push({ id: reqId, project: proj, name, status, version });
50
+ if (!existingEntry) {
51
+ newReqs++;
52
+ }
53
+ else if (existingEntry.status !== status ||
54
+ existingEntry.name !== name) {
55
+ updatedReqs++;
56
+ }
57
+ }
58
+ }
59
+ // 重建 INDEX.md
60
+ if (!options.dryRun) {
61
+ await rebuildIndex(globalDir, allReqs, projects, totalReqs, today);
62
+ }
63
+ spinner.stop(options.dryRun ? 'Dry run completed (no changes made)' : 'Index rebuilt successfully');
64
+ logger_1.logger.info('');
65
+ logger_1.logger.info('📊 扫描结果:');
66
+ logger_1.logger.info(` 项目数:${projects.length} 个`);
67
+ logger_1.logger.info(` 需求数:${totalReqs} 条`);
68
+ if (!options.dryRun) {
69
+ logger_1.logger.info(` 新增需求:${newReqs} 条`);
70
+ logger_1.logger.info(` 状态更新:${updatedReqs} 条`);
71
+ logger_1.logger.info('');
72
+ logger_1.logger.info('✅ GLOBAL/INDEX.md 已更新!');
73
+ }
74
+ else {
75
+ logger_1.logger.info('');
76
+ logger_1.logger.info('💡 预览模式(--dry-run),索引未被实际修改。');
77
+ logger_1.logger.info(' 去除 --dry-run 执行实际更新。');
78
+ }
79
+ // 列出项目摘要
80
+ logger_1.logger.info('');
81
+ logger_1.logger.info('📁 项目摘要:');
82
+ for (const proj of projects) {
83
+ const reqCount = allReqs.filter((r) => r.project === proj).length;
84
+ logger_1.logger.info(` - ${proj}: ${reqCount} 个需求`);
85
+ }
86
+ }
87
+ catch (error) {
88
+ spinner.fail(`Index update failed: ${error}`);
89
+ throw error;
90
+ }
91
+ }
92
+ /**
93
+ * 扫描 GLOBAL/PROJECTS/ 下所有项目
94
+ */
95
+ async function scanAllProjects(projectsDir) {
96
+ const projects = [];
97
+ if (!(await (0, fs_extra_1.pathExists)(projectsDir)))
98
+ return projects;
99
+ const entries = await (0, fs_extra_1.readdir)(projectsDir, { withFileTypes: true });
100
+ for (const entry of entries) {
101
+ if (entry.isDirectory() && !entry.name.startsWith('_')) {
102
+ const reqPath = (0, path_1.join)(projectsDir, entry.name, 'REQUIREMENT.md');
103
+ if (await (0, fs_extra_1.pathExists)(reqPath)) {
104
+ projects.push(entry.name);
105
+ }
106
+ }
107
+ }
108
+ return projects;
109
+ }
110
+ /**
111
+ * 从 markdown 正文中提取字段
112
+ */
113
+ function extractField(body, field) {
114
+ const patterns = [
115
+ new RegExp(`\\*\\*${field}\\*\\*\\s*[::]\\s*([^\\n]+)`, 'i'),
116
+ new RegExp(`\\|\\s*${field}\\s*\\|\\s*([^\\|]+)\\|`, 'i'),
117
+ ];
118
+ for (const pattern of patterns) {
119
+ const match = body.match(pattern);
120
+ if (match)
121
+ return match[1].trim();
122
+ }
123
+ return null;
124
+ }
125
+ /**
126
+ * 重建 INDEX.md
127
+ */
128
+ async function rebuildIndex(globalDir, reqs, projects, totalReqs, today) {
129
+ const indexPath = (0, path_1.join)(globalDir, 'INDEX.md');
130
+ // 按需求 ID 排序
131
+ reqs.sort((a, b) => a.id.localeCompare(b.id));
132
+ let content = `# 全量需求索引(Global Catalog)
133
+
134
+ > 本文件是需求定位的"地图"。具体需求内容请查看各项目的 \`PROJECTS/{项目名}/REQUIREMENT.md\`。
135
+ > 本文件由 \`speccore import\` 和 \`speccore index-update\` 自动维护,请勿手动编辑。
136
+
137
+ ---
138
+
139
+ ## 需求索引
140
+
141
+ | 需求 ID | 项目 | 需求名称 | 状态 | 版本 | 文件路径 |
142
+ | :--- | :--- | :--- | :--- | :--- | :--- |
143
+ `;
144
+ if (reqs.length === 0) {
145
+ content += '| _暂无需求_ | - | - | - | - | - |\n';
146
+ }
147
+ else {
148
+ for (const req of reqs) {
149
+ content += `| ${req.id} | ${req.project} | ${req.name} | ${req.status} | ${req.version} | GLOBAL/PROJECTS/${req.project}/REQUIREMENT.md |\n`;
150
+ }
151
+ }
152
+ content += `
153
+ ---
154
+
155
+ ## 项目列表
156
+
157
+ | 项目名称 | 需求数 | 状态 | 最后更新 |
158
+ | :--- | :--- | :--- | :--- |
159
+ `;
160
+ if (projects.length === 0) {
161
+ content += '| _暂无项目_ | - | - | - |\n';
162
+ }
163
+ else {
164
+ for (const proj of projects) {
165
+ const reqCount = reqs.filter((r) => r.project === proj).length;
166
+ content += `| ${proj} | ${reqCount} | 活跃 | ${today} |\n`;
167
+ }
168
+ }
169
+ content += `
170
+ ---
171
+
172
+ ## 版本信息
173
+
174
+ | 版本 | 日期 | 变更说明 |
175
+ | :--- | :--- | :--- |
176
+ | v1.0 | ${today} | 由 speccore index-update 自动重建 |
177
+ `;
178
+ await (0, fs_extra_1.writeFile)(indexPath, content);
179
+ }
180
+ //# sourceMappingURL=index-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-update.js","sourceRoot":"","sources":["../../src/commands/index-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * iteration-from-global - 从全量层生成期次命令
3
+ * 从 GLOBAL/INDEX.md 查找需求 ID,定位到对应项目 REQUIREMENT.md 提取需求,生成新的期次
4
+ */
5
+ export interface IterationFromGlobalOptions {
6
+ reqs?: string;
7
+ name?: string;
8
+ force?: boolean;
9
+ }
10
+ export declare function iterationFromGlobalCommand(options: IterationFromGlobalOptions): Promise<void>;
11
+ //# sourceMappingURL=iteration-from-global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iteration-from-global.d.ts","sourceRoot":"","sources":["../../src/commands/iteration-from-global.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAqInG"}
@@ -0,0 +1,294 @@
1
+ "use strict";
2
+ /**
3
+ * iteration-from-global - 从全量层生成期次命令
4
+ * 从 GLOBAL/INDEX.md 查找需求 ID,定位到对应项目 REQUIREMENT.md 提取需求,生成新的期次
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.iterationFromGlobalCommand = iterationFromGlobalCommand;
8
+ const logger_1 = require("../utils/logger");
9
+ const fs_extra_1 = require("fs-extra");
10
+ const path_1 = require("path");
11
+ const global_layer_1 = require("../core/global-layer");
12
+ const context_1 = require("../core/context");
13
+ async function iterationFromGlobalCommand(options) {
14
+ if (!options.reqs) {
15
+ logger_1.logger.error('请提供需求 ID 列表。用法: speccore iteration-from-global --reqs=REQ-001,REQ-002 --name=<期次名称>');
16
+ logger_1.logger.info('提示: 使用 speccore global-status 查看可用的需求列表');
17
+ return;
18
+ }
19
+ if (!options.name) {
20
+ logger_1.logger.error('请提供期次名称。用法: speccore iteration-from-global --name=<期次名称>');
21
+ return;
22
+ }
23
+ const spinner = new logger_1.Spinner('读取全量层需求...');
24
+ spinner.start();
25
+ try {
26
+ // 1. 读取全量索引
27
+ const index = await (0, global_layer_1.readGlobalIndex)();
28
+ const reqIds = options.reqs.split(',').map((r) => r.trim()).filter(Boolean);
29
+ // 2. 查找需求
30
+ const foundReqs = [];
31
+ const notFound = [];
32
+ for (const reqId of reqIds) {
33
+ const req = index.reqs.find((r) => r.id === reqId);
34
+ if (req) {
35
+ foundReqs.push(req);
36
+ }
37
+ else {
38
+ notFound.push(reqId);
39
+ }
40
+ }
41
+ if (notFound.length > 0) {
42
+ spinner.fail(`以下需求 ID 不存在: ${notFound.join(', ')}`);
43
+ logger_1.logger.info('请运行 speccore global-status 查看可用需求列表');
44
+ return;
45
+ }
46
+ // 3. 读取需求详情
47
+ spinner.stop(`找到 ${foundReqs.length} 个需求,正在生成期次...`);
48
+ const reqDetails = [];
49
+ for (const req of foundReqs) {
50
+ const detail = await (0, global_layer_1.readRequirementDetail)(req.project, req.id);
51
+ reqDetails.push({ req, detail: detail || `### ${req.id}:${req.name}\n\n(需求详情从 ${req.filePath} 读取)` });
52
+ }
53
+ // 4. 预览方案
54
+ logger_1.logger.info('');
55
+ logger_1.logger.info(`📋 准备生成期次: ${options.name}`);
56
+ logger_1.logger.info('');
57
+ logger_1.logger.info('选择需求:');
58
+ for (const { req } of reqDetails) {
59
+ logger_1.logger.info(` ${req.id}: ${req.name}(${req.project})`);
60
+ }
61
+ logger_1.logger.info('');
62
+ // 5. 创建期次目录
63
+ const iterationDir = (0, path_1.join)(process.cwd(), `期次-${options.name}`);
64
+ if (await (0, fs_extra_1.pathExists)(iterationDir)) {
65
+ if (!options.force) {
66
+ logger_1.logger.error(`期次 期次-${options.name} 已存在。使用 --force 覆盖。`);
67
+ return;
68
+ }
69
+ }
70
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(iterationDir, '00-需求文档'));
71
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(iterationDir, '00-技术文档'));
72
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(iterationDir, '00-期次总览'));
73
+ // 6. 生成需求文档
74
+ const reqContent = generateIterationRequirement(options.name, reqDetails);
75
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(iterationDir, '00-需求文档', 'REQUIREMENT.md'), reqContent);
76
+ // 7. 生成架构文档
77
+ const archContent = generateIterationArchitecture(options.name, foundReqs);
78
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(iterationDir, '00-技术文档', 'ARCHITECTURE.md'), archContent);
79
+ // 8. 生成期次总览
80
+ const graphContent = generateProjectGraph(options.name, foundReqs, reqDetails.length);
81
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(iterationDir, '00-期次总览', 'PROJECT_GRAPH.md'), graphContent);
82
+ // 9. 自动拆分 Task
83
+ const taskIds = await autoSplitTasks(iterationDir, foundReqs);
84
+ // 10. 更新全量索引
85
+ const today = new Date().toISOString().split('T')[0];
86
+ for (let i = 0; i < foundReqs.length; i++) {
87
+ await (0, global_layer_1.updateReqInIndex)(foundReqs[i].id, {
88
+ status: '✅ 已实现',
89
+ iteration: options.name,
90
+ task: taskIds[i] || '',
91
+ });
92
+ }
93
+ await (0, global_layer_1.appendIterationLink)({
94
+ name: options.name,
95
+ reqs: reqIds,
96
+ status: '🔄 进行中',
97
+ createdAt: today,
98
+ });
99
+ const newVersion = (0, global_layer_1.bumpGlobalVersion)(index.version);
100
+ await (0, global_layer_1.updateIndexVersion)(newVersion);
101
+ // 11. 更新上下文
102
+ await (0, context_1.updateContext)({
103
+ currentIteration: `期次-${options.name}`,
104
+ lastUpdated: new Date().toISOString(),
105
+ });
106
+ // 12. 输出结果
107
+ logger_1.logger.info('');
108
+ logger_1.logger.success('✅ 期次生成完成!');
109
+ logger_1.logger.info('');
110
+ logger_1.logger.info(`📁 期次: 期次-${options.name}`);
111
+ logger_1.logger.info(`📋 包含需求: ${reqIds.join(', ')}`);
112
+ logger_1.logger.info('');
113
+ logger_1.logger.info(`📊 生成 Task(${taskIds.length} 个):`);
114
+ for (let i = 0; i < foundReqs.length; i++) {
115
+ logger_1.logger.info(` ${taskIds[i]}: ${foundReqs[i].name}(来源: ${foundReqs[i].id})`);
116
+ }
117
+ logger_1.logger.info('');
118
+ logger_1.logger.info('📋 全量索引已更新');
119
+ logger_1.logger.info('📋 下一步:');
120
+ logger_1.logger.info(' speccore plan 生成调度方案');
121
+ logger_1.logger.info(' speccore execute 开始开发');
122
+ logger_1.logger.info(' 需求变更时运行 speccore sync-global 同步回全量层');
123
+ }
124
+ catch (error) {
125
+ spinner.fail(`期次生成失败: ${error}`);
126
+ throw error;
127
+ }
128
+ }
129
+ /**
130
+ * 生成期次需求文档
131
+ */
132
+ function generateIterationRequirement(iterationName, reqDetails) {
133
+ const today = new Date().toISOString().split('T')[0];
134
+ let content = `# ${iterationName} - 需求文档
135
+
136
+ > 本文件从全量层生成。需求来源: GLOBAL/PROJECTS/
137
+ > 创建日期: ${today}
138
+
139
+ ---
140
+
141
+ ## 需求列表
142
+
143
+ `;
144
+ for (const { req, detail } of reqDetails) {
145
+ content += `### ${req.id}:${req.name}
146
+ > 来源项目: ${req.project}
147
+
148
+ ${detail}
149
+
150
+ ---
151
+ `;
152
+ }
153
+ return content;
154
+ }
155
+ /**
156
+ * 生成期次架构文档
157
+ */
158
+ function generateIterationArchitecture(iterationName, reqs) {
159
+ const today = new Date().toISOString().split('T')[0];
160
+ let content = `# ${iterationName} - 技术架构
161
+
162
+ > 本文件从全量层继承。创建日期: ${today}
163
+
164
+ ## 涉及项目
165
+
166
+ `;
167
+ const projects = [...new Set(reqs.map((r) => r.project))];
168
+ for (const proj of projects) {
169
+ content += `- **${proj}**: ${reqs.filter((r) => r.project === proj).map((r) => r.name).join('、')}\n`;
170
+ }
171
+ content += `
172
+ ## 技术栈
173
+
174
+ (从全量层 GLOBAL/TECH_STACK.md 继承)
175
+
176
+ ## 架构决策
177
+
178
+ (继承全量层架构,详见 GLOBAL/ARCHITECTURE.md)
179
+
180
+ ## 变更记录
181
+
182
+ | 日期 | 版本 | 变更说明 | 作者 |
183
+ | :--- | :--- | :--- | :--- |
184
+ | ${today} | v1.0 | 从全量层生成 | SpecCore |
185
+ `;
186
+ return content;
187
+ }
188
+ /**
189
+ * 生成期次总览
190
+ */
191
+ function generateProjectGraph(iterationName, reqs, taskCount) {
192
+ const today = new Date().toISOString().split('T')[0];
193
+ let content = `# ${iterationName} - 期次总览
194
+
195
+ > 创建日期: ${today}
196
+ > 状态: 🔄 进行中
197
+
198
+ ## 任务列表
199
+
200
+ | Task ID | 名称 | 来源需求 | 优先级 | 状态 |
201
+ | :--- | :--- | :--- | :--- | :--- |
202
+ `;
203
+ for (let i = 0; i < reqs.length; i++) {
204
+ const taskId = `Task-${String(i + 1).padStart(3, '0')}`;
205
+ content += `| ${taskId} | ${reqs[i].name} | ${reqs[i].id} | 高 | 🔲 待开发 |\n`;
206
+ }
207
+ content += `
208
+ ## 完成统计
209
+
210
+ - 总任务数: ${taskCount}
211
+ - 已完成: 0
212
+ - 进行中: 0
213
+ - 待开发: ${taskCount}
214
+
215
+ ## 变更记录
216
+
217
+ | 日期 | 版本 | 变更说明 | 作者 |
218
+ | :--- | :--- | :--- | :--- |
219
+ | ${today} | v1.0 | 从全量层生成 | SpecCore |
220
+ `;
221
+ return content;
222
+ }
223
+ /**
224
+ * 自动拆分 Task
225
+ */
226
+ async function autoSplitTasks(iterationDir, reqs) {
227
+ const taskIds = [];
228
+ const today = new Date().toISOString().split('T')[0];
229
+ for (let i = 0; i < reqs.length; i++) {
230
+ const taskId = `Task-${String(i + 1).padStart(3, '0')}`;
231
+ const taskDir = (0, path_1.join)(iterationDir, taskId);
232
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'backend'));
233
+ await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'frontend'));
234
+ // .task-type
235
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, '.task-type'), 'feature');
236
+ // backend/TASK.md
237
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TASK.md'), `# ${taskId}: ${reqs[i].name}
238
+
239
+ > 来源: ${reqs[i].id}(${reqs[i].project})
240
+ > 创建日期: ${today}
241
+ > 状态: 🔲 待开发
242
+
243
+ ## 实现方案
244
+
245
+ (待补充)
246
+
247
+ ## 产出物
248
+
249
+ - [ ] 代码实现
250
+ - [ ] 单元测试
251
+ - [ ] 集成测试
252
+ - [ ] API 文档
253
+
254
+ ## 变更记录
255
+
256
+ | 日期 | 版本 | 变更说明 | 作者 |
257
+ | :--- | :--- | :--- | :--- |
258
+ | ${today} | v1.0 | 自动生成 | SpecCore |
259
+ `);
260
+ // backend/REQ.md
261
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'REQ.md'), `# ${reqs[i].name} - 需求
262
+
263
+ > 来源: ${reqs[i].id}(${reqs[i].project})
264
+ > 创建日期: ${today}
265
+
266
+ ## 功能描述
267
+
268
+ (从全量层继承)
269
+
270
+ ## 验收标准
271
+
272
+ - [ ] 功能验收
273
+ - [ ] 性能验收
274
+ - [ ] 安全验收
275
+ `);
276
+ // backend/TECH.md
277
+ await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TECH.md'), `# ${reqs[i].name} - 技术方案
278
+
279
+ > 来源: ${reqs[i].id}(${reqs[i].project})
280
+ > 创建日期: ${today}
281
+
282
+ ## 技术方案
283
+
284
+ (从全量层继承)
285
+
286
+ ## 技术决策
287
+
288
+ (待补充)
289
+ `);
290
+ taskIds.push(taskId);
291
+ }
292
+ return taskIds;
293
+ }
294
+ //# sourceMappingURL=iteration-from-global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iteration-from-global.js","sourceRoot":"","sources":["../../src/commands/iteration-from-global.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * new-task — 创建单个原子任务,支持多平台
3
+ * 支持 --platforms 参数指定前端平台,--backend-only / --frontend-only
4
+ */
5
+ export interface NewTaskOptions {
6
+ name: string;
7
+ type?: string;
8
+ desc?: string;
9
+ platforms?: string;
10
+ backendOnly?: boolean;
11
+ frontendOnly?: boolean;
12
+ iteration?: string;
13
+ }
14
+ export declare function newTaskCommand(options: NewTaskOptions): Promise<void>;
15
+ //# sourceMappingURL=new-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new-task.d.ts","sourceRoot":"","sources":["../../src/commands/new-task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF3E"}