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
@@ -1,10 +0,0 @@
1
- /**
2
- * retro - 期次回顾命令
3
- * 总结期次经验和改进建议
4
- */
5
- export interface RetroOptions {
6
- iteration?: string;
7
- output?: string;
8
- }
9
- export declare function retroCommand(options: RetroOptions): Promise<void>;
10
- //# sourceMappingURL=retro.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retro.d.ts","sourceRoot":"","sources":["../../src/commands/retro.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BvE"}
@@ -1,130 +0,0 @@
1
- "use strict";
2
- /**
3
- * retro - 期次回顾命令
4
- * 总结期次经验和改进建议
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.retroCommand = retroCommand;
8
- const logger_1 = require("../utils/logger");
9
- const context_1 = require("../core/context");
10
- const fs_extra_1 = require("fs-extra");
11
- const path_1 = require("path");
12
- async function retroCommand(options) {
13
- const spinner = new logger_1.Spinner('正在生成期次回顾...');
14
- spinner.start();
15
- try {
16
- const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
17
- if (!iteration) {
18
- spinner.fail('未找到活跃期次。请先运行: speccore iteration create --name <名称>');
19
- return;
20
- }
21
- const doc = await generateRetroDoc(iteration);
22
- const outputPath = options.output || (0, path_1.join)(process.cwd(), iteration, '00-期次总览', '回顾总结.md');
23
- await (0, fs_extra_1.writeFile)(outputPath, doc);
24
- spinner.stop(`期次回顾已生成: ${outputPath}`);
25
- logger_1.logger.info('');
26
- logger_1.logger.info('📝 回顾包含:');
27
- logger_1.logger.info(' - 期次数据统计');
28
- logger_1.logger.info(' - 做得好的 (Went Well)');
29
- logger_1.logger.info(' - 待改进的 (To Improve)');
30
- logger_1.logger.info(' - 行动计划 (Action Items)');
31
- }
32
- catch (error) {
33
- spinner.fail(`期次回顾生成失败: ${error}`);
34
- throw error;
35
- }
36
- }
37
- async function generateRetroDoc(iteration) {
38
- const iterDir = (0, path_1.join)(process.cwd(), iteration);
39
- const now = new Date().toISOString().split('T')[0];
40
- // 收集统计数据
41
- const stats = await collectStats(iterDir, iteration);
42
- let doc = `# ${iteration} - 期次回顾\n\n`;
43
- doc += `> 回顾日期: ${now} | 生成工具: SpecCore\n\n`;
44
- doc += `---\n\n`;
45
- // 1. 期次数据
46
- doc += `## 1. 期次数据\n\n`;
47
- doc += `| 指标 | 数值 |\n`;
48
- doc += `| :--- | :--- |\n`;
49
- doc += `| 期次名称 | ${iteration} |\n`;
50
- doc += `| 总任务数 | ${stats.totalTasks} |\n`;
51
- doc += `| 完成任务数 | ${stats.completedTasks} |\n`;
52
- doc += `| 完成率 | ${stats.completionRate}% |\n`;
53
- doc += `| 任务类型分布 | ${stats.typeDistribution} |\n\n`;
54
- // 2. 做得好的
55
- doc += `## 2. 做得好的 👍\n\n`;
56
- doc += `| 方面 | 具体表现 | 可复用经验 |\n`;
57
- doc += `| :--- | :--- | :--- |\n`;
58
- doc += `| | | |\n`;
59
- doc += `| | | |\n`;
60
- doc += `| | | |\n\n`;
61
- // 3. 待改进的
62
- doc += `## 3. 待改进的 🔧\n\n`;
63
- doc += `| 方面 | 问题描述 | 影响 | 改进建议 |\n`;
64
- doc += `| :--- | :--- | :--- | :--- |\n`;
65
- doc += `| | | | |\n`;
66
- doc += `| | | | |\n`;
67
- doc += `| | | | |\n\n`;
68
- // 4. 行动计划
69
- doc += `## 4. 行动计划 📋\n\n`;
70
- doc += `| 行动项 | 负责人 | 截止日期 | 优先级 |\n`;
71
- doc += `| :--- | :--- | :--- | :--- |\n`;
72
- if (stats.completionRate < 100) {
73
- doc += `| 完成剩余 ${stats.totalTasks - stats.completedTasks} 个任务 | 待分配 | | 高 |\n`;
74
- }
75
- doc += `| 更新项目 PATTERNS 模式库 | | | 中 |\n`;
76
- doc += `| 整理技术文档 | | | 中 |\n`;
77
- doc += `| | | | |\n\n`;
78
- // 5. 下期展望
79
- doc += `## 5. 下期展望\n\n`;
80
- const archPath = (0, path_1.join)(iterDir, '00-需求文档', 'REQUIREMENT.md');
81
- if (await (0, fs_extra_1.pathExists)(archPath)) {
82
- const content = await (0, fs_extra_1.readFile)(archPath, 'utf-8');
83
- const nextMatch = content.match(/下期|后续|下一期/);
84
- if (nextMatch) {
85
- doc += '请参考需求文档中的下期规划。\n\n';
86
- }
87
- else {
88
- doc += '(请在需求文档中补充下期规划)\n\n';
89
- }
90
- }
91
- else {
92
- doc += '(请创建需求文档)\n\n';
93
- }
94
- return doc;
95
- }
96
- async function collectStats(iterDir, _iteration) {
97
- let totalTasks = 0;
98
- let completedTasks = 0;
99
- const types = {};
100
- if (await (0, fs_extra_1.pathExists)(iterDir)) {
101
- const entries = await (0, fs_extra_1.readdir)(iterDir);
102
- const taskDirs = entries.filter((e) => e.startsWith('Task-'));
103
- for (const taskDir of taskDirs) {
104
- totalTasks++;
105
- const typePath = (0, path_1.join)(iterDir, taskDir, '.task-type');
106
- if (await (0, fs_extra_1.pathExists)(typePath)) {
107
- const type = (await (0, fs_extra_1.readFile)(typePath, 'utf-8')).trim();
108
- types[type] = (types[type] || 0) + 1;
109
- }
110
- const taskMdPath = (0, path_1.join)(iterDir, taskDir, 'backend', 'TASK.md');
111
- if (await (0, fs_extra_1.pathExists)(taskMdPath)) {
112
- const content = await (0, fs_extra_1.readFile)(taskMdPath, 'utf-8');
113
- if (content.includes('✅ 已完成')) {
114
- completedTasks++;
115
- }
116
- }
117
- }
118
- }
119
- const completionRate = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;
120
- const typeDist = Object.entries(types)
121
- .map(([k, v]) => `${k}: ${v}`)
122
- .join(', ');
123
- return {
124
- totalTasks,
125
- completedTasks,
126
- completionRate,
127
- typeDistribution: typeDist || '-',
128
- };
129
- }
130
- //# sourceMappingURL=retro.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retro.js","sourceRoot":"","sources":["../../src/commands/retro.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * /spec - 智能入口命令
3
- * 自然语言意图识别引擎,自动匹配最合适的 SpecCore 命令
4
- */
5
- export interface SpecOptions {
6
- }
7
- export declare function specCommand(input: string, _options: SpecOptions): Promise<void>;
8
- //# sourceMappingURL=spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,WAAW;CAE3B;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DrF"}
@@ -1,155 +0,0 @@
1
- "use strict";
2
- /**
3
- * /spec - 智能入口命令
4
- * 自然语言意图识别引擎,自动匹配最合适的 SpecCore 命令
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.specCommand = specCommand;
8
- const intent_recognition_1 = require("../core/intent-recognition");
9
- const logger_1 = require("../utils/logger");
10
- const context_1 = require("../core/context");
11
- async function specCommand(input, _options) {
12
- if (!input || !input.trim()) {
13
- logger_1.logger.info('🔍 SpecCore 智能入口');
14
- logger_1.logger.info('');
15
- logger_1.logger.info('用法: speccore spec "<自然语言描述>"');
16
- logger_1.logger.info('');
17
- logger_1.logger.info('示例:');
18
- logger_1.logger.info(' speccore spec "做一个用户登录功能,支持手机号+密码"');
19
- logger_1.logger.info(' speccore spec "修复登录超时问题"');
20
- logger_1.logger.info(' speccore spec "查看进度"');
21
- logger_1.logger.info(' speccore spec "开始干活"');
22
- logger_1.logger.info(' speccore spec "把登录改成验证码登录"');
23
- logger_1.logger.info(' speccore spec "审查一下"');
24
- return;
25
- }
26
- logger_1.logger.info(`🔍 正在理解你的意图...`);
27
- logger_1.logger.info('');
28
- const iteration = await (0, context_1.getDefaultIteration)();
29
- const assignee = await (0, context_1.getDefaultAssignee)();
30
- const results = await (0, intent_recognition_1.recognizeIntent)(input);
31
- if (results.length === 0) {
32
- // 低置信度:无法识别
33
- logger_1.logger.warn('🤔 我没有完全理解你的意图,请补充说明。');
34
- logger_1.logger.info('');
35
- logger_1.logger.info('你可以这样说:');
36
- logger_1.logger.info(' - "查看项目进度"');
37
- logger_1.logger.info(' - "帮我创建一个登录功能"');
38
- logger_1.logger.info(' - "审查一下当前任务"');
39
- logger_1.logger.info(' - "开始开发"');
40
- logger_1.logger.info(' - "把登录改成验证码登录"');
41
- return;
42
- }
43
- const best = results[0];
44
- const level = (0, intent_recognition_1.getConfidenceLevel)(best.confidence);
45
- // 显示上下文信息
46
- if (iteration) {
47
- logger_1.logger.info(`📍 当前期次: ${iteration}`);
48
- }
49
- if (assignee && assignee !== 'unknown') {
50
- logger_1.logger.info(`👤 当前用户: ${assignee}`);
51
- }
52
- logger_1.logger.info('');
53
- if (level === 'high') {
54
- // 高置信度 (>=80%):展示预览
55
- await showHighConfidenceResult(best, iteration);
56
- }
57
- else if (level === 'medium') {
58
- // 中置信度 (50-80%):展示候选列表
59
- showMediumConfidenceResults(results.slice(0, 3), iteration);
60
- }
61
- else {
62
- // 低置信度 (<50%):引导澄清
63
- showLowConfidenceGuidance(results.slice(0, 2), input);
64
- }
65
- }
66
- async function showHighConfidenceResult(result, iteration) {
67
- logger_1.logger.info(`🔍 我理解你想:**${getIntentLabel(result.intent)}**`);
68
- logger_1.logger.info(` 置信度: ${result.confidence}% | 匹配命令: speccore ${result.command}`);
69
- logger_1.logger.info('');
70
- // 显示匹配详情
71
- if (result.matchedTriggers.length > 0) {
72
- logger_1.logger.debug(` 命中规则: ${result.matchedTriggers.join(', ')}`);
73
- }
74
- // 显示提取的参数
75
- const params = result.extractedParams;
76
- if (Object.keys(params).length > 0) {
77
- logger_1.logger.info('📝 已提取参数:');
78
- for (const [key, value] of Object.entries(params)) {
79
- logger_1.logger.info(` ${key}: ${value}`);
80
- }
81
- logger_1.logger.info('');
82
- }
83
- // 构建执行命令预览
84
- let cmdPreview = `speccore ${result.command}`;
85
- if (params.name) {
86
- cmdPreview += ` --name "${params.name}"`;
87
- }
88
- if (params.desc) {
89
- cmdPreview += ` --desc "${params.desc}"`;
90
- }
91
- if (iteration && !params.iteration) {
92
- cmdPreview += ` --iteration "${iteration}"`;
93
- }
94
- if (params.iteration) {
95
- cmdPreview += ` --iteration "${params.iteration}"`;
96
- }
97
- logger_1.logger.info('📍 建议执行:');
98
- logger_1.logger.info(` $ ${cmdPreview}`);
99
- logger_1.logger.info('');
100
- logger_1.logger.info('💡 提示: 直接运行上述命令即可执行。或使用 --force 跳过确认。');
101
- }
102
- function showMediumConfidenceResults(results, iteration) {
103
- logger_1.logger.info('🔍 我注意到你的输入可能有多种含义:');
104
- logger_1.logger.info('');
105
- for (let i = 0; i < results.length; i++) {
106
- const r = results[i];
107
- const cmdPreview = `speccore ${r.command}${iteration ? ` --iteration "${iteration}"` : ''}`;
108
- logger_1.logger.info(` ${i + 1}. **${getIntentLabel(r.intent)}** (置信度: ${r.confidence}%) → ${cmdPreview}`);
109
- }
110
- logger_1.logger.info('');
111
- logger_1.logger.info('💡 请输入序号选择(默认 1),或补充更多信息后重试。');
112
- }
113
- function showLowConfidenceGuidance(results, input) {
114
- logger_1.logger.warn(`🤔 对"${input}"的识别置信度较低。`);
115
- if (results.length > 0) {
116
- logger_1.logger.info('');
117
- logger_1.logger.info('你可能想说的是:');
118
- for (const r of results.slice(0, 2)) {
119
- logger_1.logger.info(` - ${getIntentLabel(r.intent)} (speccore ${r.command})`);
120
- }
121
- }
122
- logger_1.logger.info('');
123
- logger_1.logger.info('你可以补充更多信息,例如:');
124
- logger_1.logger.info(' - "查看项目进度"');
125
- logger_1.logger.info(' - "帮我创建一个登录功能"');
126
- logger_1.logger.info(' - "审查一下当前任务"');
127
- logger_1.logger.info(' - "开始开发"');
128
- }
129
- function getIntentLabel(intent) {
130
- const labels = {
131
- change: '🔄 需求变更',
132
- execute: '⚡ 执行开发',
133
- create: '✨ 创建功能/任务',
134
- bugfix: '🐛 Bug 修复',
135
- review: '✅ 审查产出',
136
- plan: '📐 智能调度',
137
- reference: '📚 查找参考',
138
- archive: '📦 归档任务',
139
- query_progress: '📊 查看进度',
140
- handover: '📤 生成交接文档',
141
- health: '🏥 查看健康度',
142
- config: '⚙️ 配置管理',
143
- help: '📖 查看帮助',
144
- demo: '🎮 快速体验',
145
- welcome: '👋 新手引导',
146
- init: '🏗️ 项目初始化',
147
- import: '📥 导入项目',
148
- research: '🔬 技术调研',
149
- sync: '🔄 反向同步',
150
- retro: '📝 期次回顾',
151
- template_add: '📄 添加模板',
152
- };
153
- return labels[intent] || intent;
154
- }
155
- //# sourceMappingURL=spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * sync-global - 期次与全量层双向同步命令
3
- * 支持 to_global(期次→全量层)和 from_global(全量层→期次)两个方向
4
- */
5
- export interface SyncGlobalOptions {
6
- iteration?: string;
7
- direction?: string;
8
- auto?: boolean;
9
- dryRun?: boolean;
10
- force?: boolean;
11
- }
12
- export declare function syncGlobalCommand(options: SyncGlobalOptions): Promise<void>;
13
- //# sourceMappingURL=sync-global.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-global.d.ts","sourceRoot":"","sources":["../../src/commands/sync-global.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBjF"}
@@ -1,218 +0,0 @@
1
- "use strict";
2
- /**
3
- * sync-global - 期次与全量层双向同步命令
4
- * 支持 to_global(期次→全量层)和 from_global(全量层→期次)两个方向
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.syncGlobalCommand = syncGlobalCommand;
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
- async function syncGlobalCommand(options) {
13
- const direction = options.direction || 'to_global';
14
- const spinner = new logger_1.Spinner('检测变更...');
15
- spinner.start();
16
- try {
17
- // 确定同步方向
18
- if (direction === 'to_global') {
19
- await syncToGlobal(options);
20
- }
21
- else if (direction === 'from_global') {
22
- await syncFromGlobal(options);
23
- }
24
- else {
25
- spinner.fail(`不支持的同步方向: ${direction}(支持: to_global, from_global)`);
26
- return;
27
- }
28
- spinner.stop('同步完成');
29
- }
30
- catch (error) {
31
- spinner.fail(`同步失败: ${error}`);
32
- throw error;
33
- }
34
- }
35
- /**
36
- * 期次 → 全量层同步
37
- */
38
- async function syncToGlobal(options) {
39
- // 1. 确定期次
40
- let iterationName = options.iteration;
41
- if (!iterationName) {
42
- // 尝试从上下文获取
43
- const contextPath = (0, path_1.join)(process.cwd(), '.speccore', 'local', 'context.json');
44
- if (await (0, fs_extra_1.pathExists)(contextPath)) {
45
- const ctx = JSON.parse(await (0, fs_extra_1.readFile)(contextPath, 'utf-8'));
46
- iterationName = ctx.currentIteration;
47
- }
48
- }
49
- if (!iterationName) {
50
- logger_1.logger.error('未指定期次。用法: speccore sync-global --iteration=<期次名称>');
51
- return;
52
- }
53
- // 标准化期次名称
54
- const iterDirName = iterationName.startsWith('期次-') ? iterationName : `期次-${iterationName}`;
55
- const iterDir = (0, path_1.join)(process.cwd(), iterDirName);
56
- if (!(await (0, fs_extra_1.pathExists)(iterDir))) {
57
- logger_1.logger.error(`期次目录不存在: ${iterDirName}`);
58
- return;
59
- }
60
- // 2. 读取期次需求文档
61
- const iterReqPath = (0, path_1.join)(iterDir, '00-需求文档', 'REQUIREMENT.md');
62
- if (!(await (0, fs_extra_1.pathExists)(iterReqPath))) {
63
- logger_1.logger.error(`期次需求文档不存在: ${iterReqPath}`);
64
- return;
65
- }
66
- const iterReqContent = await (0, fs_extra_1.readFile)(iterReqPath, 'utf-8');
67
- // 3. 读取全量索引
68
- const index = await (0, global_layer_1.readGlobalIndex)();
69
- // 4. 解析迭代需求 ID
70
- const reqIdMatches = iterReqContent.matchAll(/###\s+(REQ-\d+)[::]/g);
71
- const iterReqIds = [];
72
- for (const match of reqIdMatches) {
73
- iterReqIds.push(match[1]);
74
- }
75
- if (iterReqIds.length === 0) {
76
- logger_1.logger.info('期次需求文档中未找到 REQ 编号,跳过同步。');
77
- return;
78
- }
79
- // 5. 找到关联的全量层需求
80
- const relatedReqs = index.reqs.filter((r) => iterReqIds.includes(r.id));
81
- if (relatedReqs.length === 0) {
82
- logger_1.logger.warn('全量层中未找到关联需求。请确认需求已导入到全量层。');
83
- return;
84
- }
85
- // 6. 对比变更
86
- const changes = [];
87
- const updatedProjects = new Set();
88
- for (const req of relatedReqs) {
89
- const globalDetail = await (0, global_layer_1.readRequirementDetail)(req.project, req.id);
90
- // 从期次需求文档中提取当前需求内容
91
- const iterSectionRegex = new RegExp(`### ${req.id}[::][^]*?(?=\\n### |$)`, 'm');
92
- const iterMatch = iterReqContent.match(iterSectionRegex);
93
- const iterDetail = iterMatch ? iterMatch[0] : '';
94
- if (globalDetail && iterDetail && globalDetail !== iterDetail) {
95
- changes.push({
96
- reqId: req.id,
97
- reqName: req.name,
98
- project: req.project,
99
- changeType: '修改',
100
- changeDesc: '需求内容已变更',
101
- });
102
- updatedProjects.add(req.project);
103
- }
104
- }
105
- // 7. dry-run 预览
106
- if (options.dryRun || (!options.force && !options.auto)) {
107
- logger_1.logger.info('');
108
- logger_1.logger.info(`🔄 准备同步 ${iterDirName} → 全量层`);
109
- logger_1.logger.info('');
110
- if (changes.length === 0) {
111
- logger_1.logger.info('✅ 未检测到变更。期次与全量层保持一致。');
112
- return;
113
- }
114
- logger_1.logger.info('📊 检测到以下变更:');
115
- logger_1.logger.info('');
116
- for (const change of changes) {
117
- logger_1.logger.info(` ${change.reqId}(${change.reqName}): ${change.changeDesc}`);
118
- }
119
- logger_1.logger.info('');
120
- logger_1.logger.info(`涉及项目: ${[...updatedProjects].join(', ')}`);
121
- logger_1.logger.info('使用 --force 或 --auto 执行同步。');
122
- return;
123
- }
124
- // 8. 执行同步
125
- for (const change of changes) {
126
- await (0, global_layer_1.updateReqInIndex)(change.reqId, {
127
- status: '✅ 已实现',
128
- });
129
- }
130
- const newVersion = (0, global_layer_1.bumpGlobalVersion)(index.version);
131
- await (0, global_layer_1.updateIndexVersion)(newVersion);
132
- logger_1.logger.info('');
133
- logger_1.logger.success('✅ 同步完成!');
134
- logger_1.logger.info('');
135
- logger_1.logger.info(`📋 方向: 期次 → 全量层`);
136
- logger_1.logger.info(` 期次: ${iterDirName}`);
137
- logger_1.logger.info(` 同步需求: ${changes.length} 条`);
138
- logger_1.logger.info(` 涉及项目: ${[...updatedProjects].join(', ')}`);
139
- logger_1.logger.info(` 全量层版本: ${index.version} → ${newVersion}`);
140
- }
141
- /**
142
- * 全量层 → 期次同步
143
- */
144
- async function syncFromGlobal(options) {
145
- let iterationName = options.iteration;
146
- if (!iterationName) {
147
- const contextPath = (0, path_1.join)(process.cwd(), '.speccore', 'local', 'context.json');
148
- if (await (0, fs_extra_1.pathExists)(contextPath)) {
149
- const ctx = JSON.parse(await (0, fs_extra_1.readFile)(contextPath, 'utf-8'));
150
- iterationName = ctx.currentIteration;
151
- }
152
- }
153
- if (!iterationName) {
154
- logger_1.logger.error('未指定期次。用法: speccore sync-global --iteration=<期次名称> --direction=from_global');
155
- return;
156
- }
157
- const iterDirName = iterationName.startsWith('期次-') ? iterationName : `期次-${iterationName}`;
158
- const iterReqPath = (0, path_1.join)(process.cwd(), iterDirName, '00-需求文档', 'REQUIREMENT.md');
159
- if (!(await (0, fs_extra_1.pathExists)(iterReqPath))) {
160
- logger_1.logger.error(`期次需求文档不存在: ${iterReqPath}`);
161
- return;
162
- }
163
- const index = await (0, global_layer_1.readGlobalIndex)();
164
- const iterReqContent = await (0, fs_extra_1.readFile)(iterReqPath, 'utf-8');
165
- // 解析期次中的需求 ID
166
- const iterReqIds = [];
167
- const matches = iterReqContent.matchAll(/###\s+(REQ-\d+)[::]/g);
168
- for (const match of matches) {
169
- iterReqIds.push(match[1]);
170
- }
171
- const relatedReqs = index.reqs.filter((r) => iterReqIds.includes(r.id));
172
- const changes = [];
173
- for (const req of relatedReqs) {
174
- const globalDetail = await (0, global_layer_1.readRequirementDetail)(req.project, req.id);
175
- const iterSectionRegex = new RegExp(`### ${req.id}[::][^]*?(?=\\n### |$)`, 'm');
176
- const iterMatch = iterReqContent.match(iterSectionRegex);
177
- const iterDetail = iterMatch ? iterMatch[0] : '';
178
- if (globalDetail && iterDetail && globalDetail !== iterDetail) {
179
- changes.push({
180
- reqId: req.id,
181
- reqName: req.name,
182
- project: req.project,
183
- changeType: '修改',
184
- changeDesc: '全量层已更新,需要同步到期次',
185
- });
186
- }
187
- }
188
- if (options.dryRun || (!options.force && !options.auto)) {
189
- logger_1.logger.info('');
190
- logger_1.logger.info(`🔄 准备同步 全量层 → ${iterDirName}`);
191
- logger_1.logger.info('');
192
- if (changes.length === 0) {
193
- logger_1.logger.info('✅ 未检测到变更。全量层与期次保持一致。');
194
- return;
195
- }
196
- logger_1.logger.info(`📊 检测到 ${changes.length} 条变更`);
197
- for (const change of changes) {
198
- logger_1.logger.info(` ${change.reqId}(${change.reqName}): ${change.changeDesc}`);
199
- }
200
- logger_1.logger.info('使用 --force 或 --auto 执行同步。');
201
- return;
202
- }
203
- // 执行同步:更新期次需求文档
204
- for (const change of changes) {
205
- const globalDetail = await (0, global_layer_1.readRequirementDetail)(change.project, change.reqId);
206
- if (globalDetail) {
207
- const iterSectionRegex = new RegExp(`### ${change.reqId}[::][^]*?(?=\\n### |$)`, 'm');
208
- const updated = iterReqContent.replace(iterSectionRegex, globalDetail);
209
- if (updated !== iterReqContent) {
210
- // 这里简化处理:实际生产环境需要更细致的合并逻辑
211
- }
212
- }
213
- }
214
- logger_1.logger.info('');
215
- logger_1.logger.success(`✅ 同步完成!方向: 全量层 → ${iterDirName}`);
216
- logger_1.logger.info(` 同步需求: ${changes.length} 条`);
217
- }
218
- //# sourceMappingURL=sync-global.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-global.js","sourceRoot":"","sources":["../../src/commands/sync-global.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAsBH,8CAqBC;AAzCD,4CAAkD;AAClD,uCAA2D;AAC3D,+BAA4B;AAC5B,uDAO8B;AAUvB,KAAK,UAAU,iBAAiB,CAAC,OAA0B;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,gBAAO,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,SAAS;QACT,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YACvC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,aAAa,SAAS,8BAA8B,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,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,KAAK,UAAU,YAAY,CAAC,OAA0B;IACpD,UAAU;IACV,IAAI,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW;QACX,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAC9E,IAAI,MAAM,IAAA,qBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,aAAa,GAAG,GAAG,CAAC,gBAAgB,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,eAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,UAAU;IACV,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC;IAC5F,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACjC,eAAM,CAAC,KAAK,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACrC,eAAM,CAAC,KAAK,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE5D,YAAY;IACZ,MAAM,KAAK,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC;IAEtC,eAAe;IACf,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACrE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,eAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,UAAU;IACV,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,IAAA,oCAAqB,EAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAEtE,mBAAmB;QACnB,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;YACH,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,WAAW,WAAW,QAAQ,CAAC,CAAC;QAC5C,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,eAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,UAAU;IACV,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAA,+BAAgB,EAAC,MAAM,CAAC,KAAK,EAAE;YACnC,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,gCAAiB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,IAAA,iCAAkB,EAAC,UAAU,CAAC,CAAC;IAErC,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,eAAM,CAAC,IAAI,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;IACrC,eAAM,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5C,eAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,eAAM,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,OAAO,MAAM,UAAU,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAA0B;IACtD,IAAI,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAC9E,IAAI,MAAM,IAAA,qBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,aAAa,GAAG,GAAG,CAAC,gBAAgB,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,eAAM,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC;IAC5F,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAElF,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACrC,eAAM,CAAC,KAAK,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC;IACtC,MAAM,cAAc,GAAG,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE5D,cAAc;IACd,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,IAAA,oCAAqB,EAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,gBAAgB;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;QAC5C,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,eAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,IAAA,oCAAqB,EAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,wBAAwB,EAAE,GAAG,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YACvE,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;gBAC/B,0BAA0B;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,eAAM,CAAC,OAAO,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAClD,eAAM,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * sync - 反向同步命令
3
- * 检测代码与 Spec 的差异,更新 Spec 文件
4
- */
5
- export interface SyncOptions {
6
- task?: string;
7
- iteration?: string;
8
- auto?: boolean;
9
- dryRun?: boolean;
10
- force?: boolean;
11
- }
12
- export declare function syncCommand(options: SyncOptions): Promise<void>;
13
- //# sourceMappingURL=sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDrE"}