speccore 5.4.2 → 5.4.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 (111) hide show
  1. package/README.en.md +4 -3
  2. package/README.md +5 -4
  3. package/package.json +1 -1
  4. package/dist/commands/audit.d.ts +0 -10
  5. package/dist/commands/audit.d.ts.map +0 -1
  6. package/dist/commands/audit.js +0 -278
  7. package/dist/commands/audit.js.map +0 -1
  8. package/dist/commands/baseline.d.ts +0 -13
  9. package/dist/commands/baseline.d.ts.map +0 -1
  10. package/dist/commands/baseline.js +0 -227
  11. package/dist/commands/baseline.js.map +0 -1
  12. package/dist/commands/bugfix.d.ts +0 -13
  13. package/dist/commands/bugfix.d.ts.map +0 -1
  14. package/dist/commands/bugfix.js +0 -181
  15. package/dist/commands/bugfix.js.map +0 -1
  16. package/dist/commands/change.d.ts +0 -14
  17. package/dist/commands/change.d.ts.map +0 -1
  18. package/dist/commands/change.js +0 -208
  19. package/dist/commands/change.js.map +0 -1
  20. package/dist/commands/context.d.ts +0 -8
  21. package/dist/commands/context.d.ts.map +0 -1
  22. package/dist/commands/context.js +0 -180
  23. package/dist/commands/context.js.map +0 -1
  24. package/dist/commands/dashboard.d.ts +0 -9
  25. package/dist/commands/dashboard.d.ts.map +0 -1
  26. package/dist/commands/dashboard.js +0 -209
  27. package/dist/commands/dashboard.js.map +0 -1
  28. package/dist/commands/demo.d.ts +0 -10
  29. package/dist/commands/demo.d.ts.map +0 -1
  30. package/dist/commands/demo.js +0 -151
  31. package/dist/commands/demo.js.map +0 -1
  32. package/dist/commands/global-status.d.ts +0 -9
  33. package/dist/commands/global-status.d.ts.map +0 -1
  34. package/dist/commands/global-status.js +0 -135
  35. package/dist/commands/global-status.js.map +0 -1
  36. package/dist/commands/goal.d.ts +0 -15
  37. package/dist/commands/goal.d.ts.map +0 -1
  38. package/dist/commands/goal.js +0 -232
  39. package/dist/commands/goal.js.map +0 -1
  40. package/dist/commands/handover.d.ts +0 -11
  41. package/dist/commands/handover.d.ts.map +0 -1
  42. package/dist/commands/handover.js +0 -169
  43. package/dist/commands/handover.js.map +0 -1
  44. package/dist/commands/help.d.ts +0 -10
  45. package/dist/commands/help.d.ts.map +0 -1
  46. package/dist/commands/help.js +0 -93
  47. package/dist/commands/help.js.map +0 -1
  48. package/dist/commands/history.d.ts +0 -9
  49. package/dist/commands/history.d.ts.map +0 -1
  50. package/dist/commands/history.js +0 -87
  51. package/dist/commands/history.js.map +0 -1
  52. package/dist/commands/impact.d.ts +0 -12
  53. package/dist/commands/impact.d.ts.map +0 -1
  54. package/dist/commands/impact.js +0 -238
  55. package/dist/commands/impact.js.map +0 -1
  56. package/dist/commands/index-update.d.ts +0 -8
  57. package/dist/commands/index-update.d.ts.map +0 -1
  58. package/dist/commands/index-update.js +0 -180
  59. package/dist/commands/index-update.js.map +0 -1
  60. package/dist/commands/iteration-from-global.d.ts +0 -11
  61. package/dist/commands/iteration-from-global.d.ts.map +0 -1
  62. package/dist/commands/iteration-from-global.js +0 -294
  63. package/dist/commands/iteration-from-global.js.map +0 -1
  64. package/dist/commands/new-task.d.ts +0 -15
  65. package/dist/commands/new-task.d.ts.map +0 -1
  66. package/dist/commands/new-task.js +0 -208
  67. package/dist/commands/new-task.js.map +0 -1
  68. package/dist/commands/platform-add.d.ts +0 -12
  69. package/dist/commands/platform-add.d.ts.map +0 -1
  70. package/dist/commands/platform-add.js +0 -111
  71. package/dist/commands/platform-add.js.map +0 -1
  72. package/dist/commands/rename.d.ts +0 -14
  73. package/dist/commands/rename.d.ts.map +0 -1
  74. package/dist/commands/rename.js +0 -298
  75. package/dist/commands/rename.js.map +0 -1
  76. package/dist/commands/research.d.ts +0 -14
  77. package/dist/commands/research.d.ts.map +0 -1
  78. package/dist/commands/research.js +0 -181
  79. package/dist/commands/research.js.map +0 -1
  80. package/dist/commands/retro.d.ts +0 -10
  81. package/dist/commands/retro.d.ts.map +0 -1
  82. package/dist/commands/retro.js +0 -130
  83. package/dist/commands/retro.js.map +0 -1
  84. package/dist/commands/spec.d.ts +0 -8
  85. package/dist/commands/spec.d.ts.map +0 -1
  86. package/dist/commands/spec.js +0 -155
  87. package/dist/commands/spec.js.map +0 -1
  88. package/dist/commands/sync-global.d.ts +0 -13
  89. package/dist/commands/sync-global.d.ts.map +0 -1
  90. package/dist/commands/sync-global.js +0 -218
  91. package/dist/commands/sync-global.js.map +0 -1
  92. package/dist/commands/sync.d.ts +0 -13
  93. package/dist/commands/sync.d.ts.map +0 -1
  94. package/dist/commands/sync.js +0 -216
  95. package/dist/commands/sync.js.map +0 -1
  96. package/dist/commands/template-add.d.ts +0 -12
  97. package/dist/commands/template-add.d.ts.map +0 -1
  98. package/dist/commands/template-add.js +0 -65
  99. package/dist/commands/template-add.js.map +0 -1
  100. package/dist/commands/welcome.d.ts +0 -9
  101. package/dist/commands/welcome.d.ts.map +0 -1
  102. package/dist/commands/welcome.js +0 -166
  103. package/dist/commands/welcome.js.map +0 -1
  104. package/dist/core/global-layer.d.ts +0 -124
  105. package/dist/core/global-layer.d.ts.map +0 -1
  106. package/dist/core/global-layer.js +0 -456
  107. package/dist/core/global-layer.js.map +0 -1
  108. package/dist/core/intent-recognition.d.ts +0 -48
  109. package/dist/core/intent-recognition.d.ts.map +0 -1
  110. package/dist/core/intent-recognition.js +0 -524
  111. package/dist/core/intent-recognition.js.map +0 -1
package/README.en.md CHANGED
@@ -175,10 +175,11 @@ SpecCore natively integrates WorkBuddy.
175
175
 
176
176
  | Document | Content |
177
177
  | :--- | :--- |
178
+ | [Scenarios](docs/scenarios.en.md) | 12 real-world scenarios: new project → daily dev → CI/CD |
178
179
  | [SDD Methodology](docs/sdd-methodology.en.md) | What is SDD, why, how |
179
180
  | [Quick Reference](docs/quick-reference.en.md) | One-page: commands + safety + CI |
180
181
  | [Quick Start](docs/quick-start.en.md) | Install → Init → Import → Multi-platform → Scenarios |
181
- | [Command Reference](docs/commands.en.md) | 44 commands full params + 35 intents |
182
+ | [Command Reference](docs/commands.en.md) | 46 commands full params + 35 intents |
182
183
  | [Tool Adaptation](docs/tool-adaptation.en.md) | WorkBuddy integration + workflow + security |
183
184
  | [Usage Guide](docs/usage-guide.en.md) | File safety: manual edit vs CLI command |
184
185
  | [Workspace Layout](docs/workspace-organization.en.md) | Recommended directory structure |
@@ -229,9 +230,9 @@ bash verify.sh # Run tests
229
230
 
230
231
  ## Version
231
232
 
232
- v4.6.0 | 🔧 CLI Commands: 40 | 🧠 Intents: 31
233
+ v5.4.2 | 🔧 CLI Commands: 46 | 🧠 Intents: 35
233
234
 
234
- Changelog: [CHANGELOG.md](CHANGELOG.md)
235
+ Changelog: [CHANGELOG.en.md](CHANGELOG.en.md)
235
236
 
236
237
  ---
237
238
 
package/README.md CHANGED
@@ -19,7 +19,7 @@ SpecCore 由两部分组成,**职责明确,互不混淆**:
19
19
  | **在哪里执行** | 终端 / Terminal | AI 编程工具(WorkBuddy / Cursor / Claude 等) |
20
20
  | **怎么用** | `speccore init` | 输入 `/spec-xxx` |
21
21
  | **什么原理** | TypeScript 编译,直接操作文件 | Markdown 指令,AI 读取后执行 |
22
- | **数量** | 39 个 CLI 命令 | 39 个 Slash Command |
22
+ | **数量** | 46 个 CLI 命令 | 46 个 Slash Command |
23
23
  | **何时用** | 项目初始化、文件校验、批量操作 | 日常开发:需求管理、开发执行、审查归档 |
24
24
 
25
25
  > 💡 **简单记忆**:`speccore` 开头 → 终端执行;`/spec` 开头 → AI 工具中执行。
@@ -104,7 +104,7 @@ SpecCore 采用**确定性逻辑与智能逻辑解耦**的架构:
104
104
 
105
105
  ---
106
106
 
107
- ## 🔧 终端命令速查(39 个 CLI 命令)
107
+ ## 🔧 终端命令速查(46 个 CLI 命令)
108
108
 
109
109
  > 在终端中执行,所有命令以 `speccore` 开头。
110
110
 
@@ -175,10 +175,11 @@ SpecCore 原生集成 WorkBuddy(`speccore init` 自动创建 `.workbuddy/` ski
175
175
 
176
176
  | 文档 | 内容 |
177
177
  | :--- | :--- |
178
+ | [场景实战](docs/场景实战.md) | 12 个真实场景:从零启动→日常开发→CI/CD,逐步演示 |
178
179
  | [SDD 方法论](docs/SDD方法论.md) | SDD 是什么、为什么、怎么做 |
179
180
  | [速查卡](docs/速查卡.md) | 一页掌握:常用命令 + 安全口诀 + CI 模板 |
180
181
  | [快速开始指南](docs/快速开始.md) | 安装 → 初始化 → 导入 → 多端 Task → 场景速查 |
181
- | [命令参考手册](docs/命令参考.md) | 44 个命令完整参数 + 35 种意图映射 |
182
+ | [命令参考手册](docs/命令参考.md) | 46 个命令完整参数 + 35 种意图映射 |
182
183
  | [工具适配说明](docs/工具适配说明.md) | WorkBuddy 集成原理 + 工作流程 + 安全检查 |
183
184
  | [使用指南](docs/使用指南.md) | 文件操作安全指南:可手动改 vs 必须用命令 |
184
185
  | [工作空间组织](docs/工作空间组织.md) | 推荐目录结构 + 多工程协作 |
@@ -266,7 +267,7 @@ bash verify.sh
266
267
 
267
268
  ## 版本
268
269
 
269
- v4.8.0 | 🔧 CLI 命令 42 个 | 🧠 意图识别 31
270
+ v5.4.2 | 🔧 CLI 命令 46 个 | 🧠 意图识别 35
270
271
 
271
272
  版本历史见 [CHANGELOG.md](CHANGELOG.md)
272
273
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccore",
3
- "version": "5.4.2",
3
+ "version": "5.4.3",
4
4
  "description": "SpecCore - Code by Spec, Not by Vibe.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,10 +0,0 @@
1
- /**
2
- * audit - AI 智能审计命令
3
- * 扫描全量层发现重复需求、歧义描述、潜在冲突、孤立需求
4
- */
5
- export interface AuditOptions {
6
- fix?: boolean;
7
- detail?: boolean;
8
- }
9
- export declare function auditCommand(options: AuditOptions): Promise<void>;
10
- //# sourceMappingURL=audit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DvE"}
@@ -1,278 +0,0 @@
1
- "use strict";
2
- /**
3
- * audit - AI 智能审计命令
4
- * 扫描全量层发现重复需求、歧义描述、潜在冲突、孤立需求
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.auditCommand = auditCommand;
8
- const logger_1 = require("../utils/logger");
9
- const global_layer_1 = require("../core/global-layer");
10
- async function auditCommand(options) {
11
- const spinner = new logger_1.Spinner('扫描全量层...');
12
- spinner.start();
13
- try {
14
- const index = await (0, global_layer_1.readGlobalIndex)();
15
- if (index.reqs.length === 0) {
16
- spinner.fail('全量层为空,无法执行审计。请先导入项目。');
17
- return;
18
- }
19
- spinner.stop(`扫描 ${index.reqs.length} 条需求...`);
20
- const issues = [];
21
- // 1. 重复检测
22
- const duplicates = detectDuplicates(index);
23
- issues.push(...duplicates);
24
- // 2. 歧义检测
25
- for (const req of index.reqs) {
26
- const detail = await (0, global_layer_1.readRequirementDetail)(req.project, req.id);
27
- const ambiguous = detectAmbiguity(req, detail || '');
28
- issues.push(...ambiguous);
29
- }
30
- // 3. 孤立检测
31
- const orphans = index.reqs.filter((r) => !r.iteration && r.status !== '🗑️ 已废弃' && r.status !== '📦 已有实现');
32
- for (const req of orphans.slice(0, 10)) {
33
- issues.push({
34
- type: 'orphan',
35
- severity: '🟡',
36
- reqId: req.id,
37
- reqName: req.name,
38
- description: `未关联任何期次或 Task,处于孤立状态`,
39
- suggestion: `建议纳入近期期次`,
40
- });
41
- }
42
- // 4. 冲突检测
43
- const conflicts = detectConflicts(index);
44
- issues.push(...conflicts);
45
- // 输出报告
46
- outputAuditReport(issues, index.reqs.length, options.detail || false);
47
- if (options.fix) {
48
- logger_1.logger.info('');
49
- logger_1.logger.info('🔧 --fix 模式:自动标记可修复的问题');
50
- autoFixIssues(issues);
51
- }
52
- }
53
- catch (error) {
54
- spinner.fail(`审计失败: ${error}`);
55
- throw error;
56
- }
57
- }
58
- /**
59
- * 重复检测
60
- */
61
- function detectDuplicates(index) {
62
- const issues = [];
63
- const checked = new Set();
64
- for (let i = 0; i < index.reqs.length; i++) {
65
- for (let j = i + 1; j < index.reqs.length; j++) {
66
- const a = index.reqs[i];
67
- const b = index.reqs[j];
68
- const key = [a.id, b.id].sort().join('|');
69
- if (checked.has(key))
70
- continue;
71
- checked.add(key);
72
- const similarity = calculateSimilarity(a.name, b.name);
73
- if (similarity > 0.8) {
74
- issues.push({
75
- type: 'duplicate',
76
- severity: '🔴',
77
- reqId: `${a.id} ⇔ ${b.id}`,
78
- reqName: `${a.name} / ${b.name}`,
79
- description: `高度重复(相似度 ${Math.round(similarity * 100)}%),来源: ${a.project} / ${b.project}`,
80
- suggestion: '建议合并或明确区分',
81
- });
82
- }
83
- else if (similarity > 0.6) {
84
- issues.push({
85
- type: 'duplicate',
86
- severity: '🟡',
87
- reqId: `${a.id} ⇔ ${b.id}`,
88
- reqName: `${a.name} / ${b.name}`,
89
- description: `可能重复(相似度 ${Math.round(similarity * 100)}%)`,
90
- suggestion: '建议审查是否可合并',
91
- });
92
- }
93
- }
94
- }
95
- return issues;
96
- }
97
- /**
98
- * 简单字符串相似度(Jaccard 系数)
99
- */
100
- function calculateSimilarity(a, b) {
101
- const setA = new Set(a.toLowerCase().split(''));
102
- const setB = new Set(b.toLowerCase().split(''));
103
- const intersection = new Set([...setA].filter((x) => setB.has(x)));
104
- const union = new Set([...setA, ...setB]);
105
- return intersection.size / union.size;
106
- }
107
- /**
108
- * 歧义检测
109
- */
110
- function detectAmbiguity(req, detail) {
111
- const issues = [];
112
- const ambiguousWords = {
113
- '尽快': '指定具体时间或 SLA',
114
- '优先': '明确优先级排序规则',
115
- '及时': '指定具体响应时间',
116
- '大量': '指定具体数字或范围',
117
- '众多': '指定具体数量',
118
- '若干': '指定明确的数量',
119
- '尽量': '改为明确的要求',
120
- '尽可能': '改为明确的约束',
121
- '稳定': '指定可测量的标准(如 99.9%)',
122
- '可靠': '指定可靠的量化指标',
123
- '良好': '指定可测量的质量标准',
124
- '适当': '指定具体的数值',
125
- };
126
- for (const [word, suggestion] of Object.entries(ambiguousWords)) {
127
- if (detail.includes(word)) {
128
- issues.push({
129
- type: 'ambiguous',
130
- severity: '🟡',
131
- reqId: req.id,
132
- reqName: req.name,
133
- description: `发现模糊词汇: "${word}"`,
134
- suggestion,
135
- });
136
- }
137
- }
138
- return issues.slice(0, 3); // 最多保留 3 条
139
- }
140
- /**
141
- * 冲突检测
142
- */
143
- function detectConflicts(index) {
144
- const issues = [];
145
- // 检测同名需求在不同项目中
146
- const nameMap = new Map();
147
- for (const req of index.reqs) {
148
- if (!nameMap.has(req.name))
149
- nameMap.set(req.name, []);
150
- nameMap.get(req.name).push(req.project);
151
- }
152
- for (const [name, projects] of nameMap) {
153
- if (projects.length > 1) {
154
- issues.push({
155
- type: 'conflict',
156
- severity: '🟡',
157
- reqId: '',
158
- reqName: name,
159
- description: `相同需求出现在 ${projects.length} 个项目中: ${projects.join(', ')}`,
160
- suggestion: '检查是否存在重复实现,考虑抽取为公共服务',
161
- });
162
- }
163
- }
164
- return issues.slice(0, 5);
165
- }
166
- /**
167
- * 输出审计报告
168
- */
169
- function outputAuditReport(issues, totalReqs, detail) {
170
- logger_1.logger.info('');
171
- logger_1.logger.info('🤖 AI 智能审计报告');
172
- logger_1.logger.info('');
173
- const duplicates = issues.filter((i) => i.type === 'duplicate');
174
- const ambiguous = issues.filter((i) => i.type === 'ambiguous');
175
- const orphans = issues.filter((i) => i.type === 'orphan');
176
- const conflicts = issues.filter((i) => i.type === 'conflict');
177
- // 重复需求
178
- if (duplicates.length > 0) {
179
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
180
- logger_1.logger.info('🔴 重复需求(建议合并)');
181
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
182
- for (const d of duplicates.slice(0, detail ? 20 : 5)) {
183
- logger_1.logger.info(` ${d.severity} ${d.reqId} | ${d.reqName}`);
184
- logger_1.logger.info(` ${d.description}`);
185
- logger_1.logger.info(` 💡 ${d.suggestion}`);
186
- }
187
- }
188
- // 歧义描述
189
- if (ambiguous.length > 0) {
190
- logger_1.logger.info('');
191
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
192
- logger_1.logger.info('⚠️ 歧义描述(建议量化)');
193
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
194
- for (const a of ambiguous.slice(0, detail ? 20 : 8)) {
195
- logger_1.logger.info(` ${a.severity} ${a.reqId}: ${a.description}`);
196
- logger_1.logger.info(` 💡 ${a.suggestion}`);
197
- }
198
- }
199
- // 冲突
200
- if (conflicts.length > 0) {
201
- logger_1.logger.info('');
202
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
203
- logger_1.logger.info('🔶 潜在冲突');
204
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
205
- for (const c of conflicts) {
206
- logger_1.logger.info(` ${c.severity} ${c.reqName}`);
207
- logger_1.logger.info(` ${c.description}`);
208
- logger_1.logger.info(` 💡 ${c.suggestion}`);
209
- }
210
- }
211
- // 孤立需求
212
- if (orphans.length > 0) {
213
- logger_1.logger.info('');
214
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
215
- logger_1.logger.info('🔶 孤立需求(建议关联期次)');
216
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
217
- for (const o of orphans.slice(0, detail ? 20 : 8)) {
218
- logger_1.logger.info(` ${o.severity} ${o.reqId}: ${o.description}`);
219
- logger_1.logger.info(` 💡 ${o.suggestion}`);
220
- }
221
- }
222
- // 健康度评分
223
- const dupCount = duplicates.filter((d) => d.severity === '🔴').length;
224
- const dupYellow = duplicates.filter((d) => d.severity === '🟡').length;
225
- const ambCount = ambiguous.length;
226
- const clarityScore = Math.max(0, 100 - ambCount * 5);
227
- const dupScore = Math.max(0, 100 - dupCount * 10 - dupYellow * 5);
228
- const linkScore = Math.max(0, 100 - orphans.length * 5);
229
- const overallScore = Math.round((clarityScore + dupScore + linkScore) / 3);
230
- logger_1.logger.info('');
231
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
232
- logger_1.logger.info(`📊 健康度评分: ${overallScore}/100`);
233
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
234
- logger_1.logger.info(` 需求完整性: ${clarityScore}/100`);
235
- logger_1.logger.info(` 描述清晰度: ${clarityScore}/100`);
236
- logger_1.logger.info(` 关联完整性: ${linkScore}/100`);
237
- logger_1.logger.info(` 重复率: ${dupScore}/100(越低越好)`);
238
- // 总结
239
- logger_1.logger.info('');
240
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
241
- logger_1.logger.info('💡 建议');
242
- logger_1.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
243
- let idx = 1;
244
- if (dupCount > 0) {
245
- logger_1.logger.info(` ${idx++}. 🔴 高优先级: 解决 ${dupCount} 条高度重复需求`);
246
- }
247
- if (ambCount > 0) {
248
- logger_1.logger.info(` ${idx++}. 🟡 中优先级: 量化 ${ambCount} 条模糊描述`);
249
- }
250
- if (orphans.length > 0) {
251
- logger_1.logger.info(` ${idx++}. 🟢 低优先级: 为 ${orphans.length} 条孤立需求关联期次`);
252
- }
253
- if (issues.length === 0) {
254
- logger_1.logger.info(' 🎉 全量层质量良好,未发现明显问题!');
255
- }
256
- logger_1.logger.info('');
257
- logger_1.logger.info('📋 输入 speccore audit --fix 自动修复可修复的问题');
258
- }
259
- /**
260
- * 自动修复
261
- */
262
- function autoFixIssues(issues) {
263
- let fixed = 0;
264
- for (const issue of issues) {
265
- if (issue.type === 'ambiguous') {
266
- // 自动标记模糊词汇
267
- logger_1.logger.info(` 已标记: ${issue.reqId} - "${issue.description}"`);
268
- fixed++;
269
- }
270
- else if (issue.type === 'orphan') {
271
- // 无法自动关联期次
272
- logger_1.logger.info(` 需确认: ${issue.reqId} - 请手动关联期次`);
273
- }
274
- }
275
- logger_1.logger.info('');
276
- logger_1.logger.info(`✅ 已自动处理 ${fixed} 条问题`);
277
- }
278
- //# sourceMappingURL=audit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAmBH,oCA0DC;AA3ED,4CAAkD;AAClD,uDAA8E;AAgBvE,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,OAAO,GAAG,IAAI,gBAAO,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC;QAEtC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,UAAU;QACV,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAE3B,UAAU;QACV,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAqB,EAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,UAAU;QACV,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACxE,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,WAAW,EAAE,sBAAsB;gBACnC,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;QAED,UAAU;QACV,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAE1B,OAAO;QACP,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;QAEtE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACtC,aAAa,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAC/B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAkD;IAC1E,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjB,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE;oBAC1B,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE;oBAChC,WAAW,EAAE,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,OAAO,EAAE;oBACzF,UAAU,EAAE,WAAW;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE;oBAC1B,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE;oBAChC,WAAW,EAAE,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI;oBACzD,UAAU,EAAE,WAAW;iBACxB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1C,OAAO,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,GAAiC,EACjC,MAAc;IAEd,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,cAAc,GAA2B;QAC7C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;KAChB,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAChE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,WAAW,EAAE,YAAY,IAAI,GAAG;gBAChC,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAkD;IACzE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,eAAe;IACf,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,WAAW,QAAQ,CAAC,MAAM,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtE,UAAU,EAAE,sBAAsB;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAoB,EAAE,SAAiB,EAAE,MAAe;IACjF,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAE9D,OAAO;IACP,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,eAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACrC,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;IACP,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK;IACL,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,eAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACrC,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;IACP,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,eAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,QAAQ;IACR,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACtE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;IAElC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,QAAQ,GAAG,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3E,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,eAAM,CAAC,IAAI,CAAC,aAAa,YAAY,MAAM,CAAC,CAAC;IAC7C,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,eAAM,CAAC,IAAI,CAAC,aAAa,YAAY,MAAM,CAAC,CAAC;IAC7C,eAAM,CAAC,IAAI,CAAC,aAAa,YAAY,MAAM,CAAC,CAAC;IAC7C,eAAM,CAAC,IAAI,CAAC,aAAa,SAAS,MAAM,CAAC,CAAC;IAC1C,eAAM,CAAC,IAAI,CAAC,WAAW,QAAQ,YAAY,CAAC,CAAC;IAE7C,KAAK;IACL,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAEpD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,eAAM,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,iBAAiB,QAAQ,UAAU,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,eAAM,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,iBAAiB,QAAQ,QAAQ,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,eAAM,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,gBAAgB,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,eAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAoB;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,WAAW;YACX,eAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;YAC/D,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,WAAW;YACX,eAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,KAAK,YAAY,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC;AACtC,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * baseline - 需求版本基线管理命令
3
- * 创建全量层快照、查看列表、对比差异、回滚
4
- */
5
- export interface BaselineOptions {
6
- name?: string;
7
- list?: boolean;
8
- compare?: string;
9
- restore?: string;
10
- req?: string;
11
- }
12
- export declare function baselineCommand(options: BaselineOptions): Promise<void>;
13
- //# sourceMappingURL=baseline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAUD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7E"}
@@ -1,227 +0,0 @@
1
- "use strict";
2
- /**
3
- * baseline - 需求版本基线管理命令
4
- * 创建全量层快照、查看列表、对比差异、回滚
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.baselineCommand = baselineCommand;
8
- const logger_1 = require("../utils/logger");
9
- const global_layer_1 = require("../core/global-layer");
10
- const fs_extra_1 = require("fs-extra");
11
- const path_1 = require("path");
12
- async function baselineCommand(options) {
13
- try {
14
- if (options.list) {
15
- await listBaselines();
16
- }
17
- else if (options.compare) {
18
- await compareBaseline(options.compare);
19
- }
20
- else if (options.restore) {
21
- await restoreBaseline(options.restore, options.req);
22
- }
23
- else if (options.name) {
24
- await createBaseline(options.name);
25
- }
26
- else {
27
- logger_1.logger.error('请提供操作参数。用法:');
28
- logger_1.logger.info(' speccore baseline --name=<名称> 创建基线');
29
- logger_1.logger.info(' speccore baseline --list 查看基线列表');
30
- logger_1.logger.info(' speccore baseline --compare=<基线> 对比基线');
31
- logger_1.logger.info(' speccore baseline --restore=<基线> --req=<ID> 回滚需求');
32
- }
33
- }
34
- catch (error) {
35
- logger_1.logger.error(`基线操作失败: ${error}`);
36
- throw error;
37
- }
38
- }
39
- /**
40
- * 创建基线
41
- */
42
- async function createBaseline(name) {
43
- const spinner = new logger_1.Spinner('创建基线快照...');
44
- spinner.start();
45
- const globalDir = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
46
- const baselineDir = (0, path_1.join)(globalDir, 'BASELINES', name);
47
- if (await (0, fs_extra_1.pathExists)(baselineDir)) {
48
- spinner.fail(`基线 "${name}" 已存在。请使用不同的名称。`);
49
- return;
50
- }
51
- const index = await (0, global_layer_1.readGlobalIndex)();
52
- if (index.reqs.length === 0) {
53
- spinner.fail('全量层为空,无法创建基线。请先导入项目。');
54
- return;
55
- }
56
- // 创建基线目录
57
- await (0, fs_extra_1.ensureDir)(baselineDir);
58
- await (0, fs_extra_1.ensureDir)((0, path_1.join)(baselineDir, 'PROJECTS'));
59
- // 快照 INDEX.md
60
- const indexPath = (0, path_1.join)(globalDir, 'INDEX.md');
61
- if (await (0, fs_extra_1.pathExists)(indexPath)) {
62
- const indexContent = await (0, fs_extra_1.readFile)(indexPath, 'utf-8');
63
- await (0, fs_extra_1.writeFile)((0, path_1.join)(baselineDir, 'INDEX.md'), indexContent);
64
- }
65
- // 快照项目需求
66
- const projectsDir = (0, path_1.join)(globalDir, 'PROJECTS');
67
- if (await (0, fs_extra_1.pathExists)(projectsDir)) {
68
- const projects = await (0, fs_extra_1.readdir)(projectsDir, { withFileTypes: true });
69
- for (const proj of projects.filter((p) => p.isDirectory() && p.name !== '_template')) {
70
- const projBaselineDir = (0, path_1.join)(baselineDir, 'PROJECTS', proj.name);
71
- await (0, fs_extra_1.ensureDir)(projBaselineDir);
72
- const reqPath = (0, path_1.join)(projectsDir, proj.name, 'REQUIREMENT.md');
73
- if (await (0, fs_extra_1.pathExists)(reqPath)) {
74
- await (0, fs_extra_1.copy)(reqPath, (0, path_1.join)(projBaselineDir, 'REQUIREMENT.md'));
75
- }
76
- }
77
- }
78
- // 创建基线元数据
79
- const meta = {
80
- name,
81
- createdAt: new Date().toISOString(),
82
- reqCount: index.reqs.length,
83
- projectCount: index.projects.length,
84
- note: '',
85
- };
86
- await (0, fs_extra_1.writeFile)((0, path_1.join)(baselineDir, 'meta.json'), JSON.stringify(meta, null, 2));
87
- // 更新基线索引
88
- await updateBaselineReadme(meta);
89
- spinner.stop(`基线 "${name}" 创建完成`);
90
- logger_1.logger.info('');
91
- logger_1.logger.info('📊 快照范围:');
92
- logger_1.logger.info(` 需求总数: ${meta.reqCount} 条`);
93
- logger_1.logger.info(` 涉及项目: ${meta.projectCount} 个`);
94
- logger_1.logger.info(` 保存位置: GLOBAL/BASELINES/${name}/`);
95
- }
96
- /**
97
- * 查看基线列表
98
- */
99
- async function listBaselines() {
100
- const globalDir = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
101
- const baselinesDir = (0, path_1.join)(globalDir, 'BASELINES');
102
- if (!(await (0, fs_extra_1.pathExists)(baselinesDir))) {
103
- logger_1.logger.info('📌 暂无基线');
104
- logger_1.logger.info('使用 speccore baseline --name=<名称> 创建第一个基线');
105
- return;
106
- }
107
- const entries = await (0, fs_extra_1.readdir)(baselinesDir, { withFileTypes: true });
108
- const baselines = entries
109
- .filter((e) => e.isDirectory())
110
- .filter((e) => e.name !== 'README.md');
111
- if (baselines.length === 0) {
112
- logger_1.logger.info('📌 暂无基线');
113
- return;
114
- }
115
- logger_1.logger.info('');
116
- logger_1.logger.info('📌 基线列表');
117
- logger_1.logger.info('');
118
- logger_1.logger.info('| 基线名称 | 创建时间 | 需求数 | 项目数 |');
119
- logger_1.logger.info('| :--- | :--- | :--- | :--- |');
120
- for (const bl of baselines) {
121
- const metaPath = (0, path_1.join)(baselinesDir, bl.name, 'meta.json');
122
- if (await (0, fs_extra_1.pathExists)(metaPath)) {
123
- const meta = JSON.parse(await (0, fs_extra_1.readFile)(metaPath, 'utf-8'));
124
- logger_1.logger.info(`| ${meta.name} | ${meta.createdAt.split('T')[0]} | ${meta.reqCount} | ${meta.projectCount} |`);
125
- }
126
- else {
127
- logger_1.logger.info(`| ${bl.name} | - | - | - |`);
128
- }
129
- }
130
- }
131
- /**
132
- * 对比基线
133
- */
134
- async function compareBaseline(baselineName) {
135
- const spinner = new logger_1.Spinner('对比基线...');
136
- spinner.start();
137
- const globalDir = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
138
- const baselineIndexPath = (0, path_1.join)(globalDir, 'BASELINES', baselineName, 'INDEX.md');
139
- if (!(await (0, fs_extra_1.pathExists)(baselineIndexPath))) {
140
- spinner.fail(`基线 "${baselineName}" 不存在`);
141
- return;
142
- }
143
- const baselineIndex = parseIndexFile(await (0, fs_extra_1.readFile)(baselineIndexPath, 'utf-8'));
144
- const currentIndex = await (0, global_layer_1.readGlobalIndex)();
145
- spinner.stop();
146
- const added = currentIndex.reqs.filter((r) => !baselineIndex.reqIds.has(r.id));
147
- const changed = currentIndex.reqs.filter((r) => baselineIndex.reqIds.has(r.id) && baselineIndex.reqStatuses.get(r.id) !== r.status);
148
- logger_1.logger.info('');
149
- logger_1.logger.info(`📊 对比基线: ${baselineName}`);
150
- logger_1.logger.info('');
151
- if (added.length === 0 && changed.length === 0) {
152
- logger_1.logger.info('✅ 全量层与基线一致,无变更。');
153
- return;
154
- }
155
- if (added.length > 0) {
156
- logger_1.logger.info(`🆕 新增需求 (${added.length} 条):`);
157
- for (const r of added) {
158
- logger_1.logger.info(` ${r.id} ${r.name} (${r.project}) - ${r.status}`);
159
- }
160
- logger_1.logger.info('');
161
- }
162
- if (changed.length > 0) {
163
- logger_1.logger.info(`🔄 状态变更 (${changed.length} 条):`);
164
- for (const r of changed) {
165
- const oldStatus = baselineIndex.reqStatuses.get(r.id) || '-';
166
- logger_1.logger.info(` ${r.id} ${r.name}: ${oldStatus} → ${r.status}`);
167
- }
168
- logger_1.logger.info('');
169
- }
170
- logger_1.logger.info(`变更摘要: ${added.length} 条新增, ${changed.length} 条状态变更`);
171
- }
172
- function parseIndexFile(content) {
173
- const reqIds = new Set();
174
- const reqStatuses = new Map();
175
- const reqTableMatch = content.match(/\| 需求 ID \|[\s\S]*?(?=\n\n---|$)/);
176
- if (reqTableMatch) {
177
- for (const line of reqTableMatch[0].split('\n')) {
178
- if (line.includes(':---'))
179
- continue;
180
- const cols = line.split('|').map((c) => c.trim());
181
- if (cols.length >= 5 && cols[1] && cols[1].match(/^REQ-\d+$/)) {
182
- reqIds.add(cols[1]);
183
- reqStatuses.set(cols[1], cols[4]);
184
- }
185
- }
186
- }
187
- return { reqIds, reqStatuses };
188
- }
189
- /**
190
- * 回滚需求到基线
191
- */
192
- async function restoreBaseline(baselineName, reqId) {
193
- const globalDir = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL');
194
- const baselineIndexPath = (0, path_1.join)(globalDir, 'BASELINES', baselineName, 'INDEX.md');
195
- if (!(await (0, fs_extra_1.pathExists)(baselineIndexPath))) {
196
- logger_1.logger.error(`基线 "${baselineName}" 不存在`);
197
- return;
198
- }
199
- if (!reqId) {
200
- logger_1.logger.info('⚠️ 回滚操作需要指定需求 ID。');
201
- logger_1.logger.info('用法: speccore baseline --restore=<基线> --req=<REQ-XXX>');
202
- return;
203
- }
204
- logger_1.logger.info('');
205
- logger_1.logger.info(`🔄 准备回滚 ${reqId} 到基线 "${baselineName}"`);
206
- logger_1.logger.info('');
207
- logger_1.logger.info('⚠️ 此操作将回滚需求描述和状态到基线版本。');
208
- logger_1.logger.info('使用 --force 选项确认回滚。');
209
- }
210
- /**
211
- * 更新 BASELINES/README.md 索引
212
- */
213
- async function updateBaselineReadme(meta) {
214
- const readmePath = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL', 'BASELINES', 'README.md');
215
- const newLine = `| ${meta.name} | ${meta.createdAt.split('T')[0]} | ${meta.reqCount} | ${meta.projectCount} | ${meta.note || '-'} |\n`;
216
- if (await (0, fs_extra_1.pathExists)(readmePath)) {
217
- let content = await (0, fs_extra_1.readFile)(readmePath, 'utf-8');
218
- if (content.includes('_暂无基线_')) {
219
- content = content.replace('| _暂无基线_ | - | - | - | - |', newLine.trim());
220
- }
221
- else {
222
- content += newLine;
223
- }
224
- await (0, fs_extra_1.writeFile)(readmePath, content);
225
- }
226
- }
227
- //# sourceMappingURL=baseline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/commands/baseline.ts"],"names":[],"mappings":"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"}