speccore 8.3.12 → 8.3.14

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.
@@ -0,0 +1,34 @@
1
+ /**
2
+ * cleanup — 本地临时缓存清理
3
+ *
4
+ * v8.3.12+: 清理 analyze/execute/split 等命令产生的临时文件和备份
5
+ * 不影响用户数据(迭代目录、任务内容、活跃缓存),只清理"临时"内容
6
+ *
7
+ * 用法:
8
+ * speccore cleanup # 默认清理:7天前的时间戳备份+归档+.bak+临时文件
9
+ * speccore cleanup --days 3 # 清理 3 天前的
10
+ * speccore cleanup --all # 清理所有可清理的(不限制天数)
11
+ * speccore cleanup --dry-run # 预览模式,只列出不删除
12
+ */
13
+ export interface CleanupOptions {
14
+ days?: number;
15
+ all?: boolean;
16
+ dryRun?: boolean;
17
+ }
18
+ export type CleanupType = 'timestampBackups' | 'bakFiles' | 'archiveFiles' | 'archiveDirs' | 'tempFiles' | 'staleCacheFiles';
19
+ export interface AutoCleanupOptions {
20
+ cwd: string;
21
+ types: CleanupType[];
22
+ days?: number;
23
+ silent?: boolean;
24
+ }
25
+ /**
26
+ * cleanup 命令入口
27
+ */
28
+ export declare function cleanupCommand(options: CleanupOptions): Promise<void>;
29
+ /**
30
+ * v8.3.14+: 按类型自动清理(供 analyze/split/execute 等命令调用)
31
+ * 只清理指定的类型,静默执行,不影响用户体验
32
+ */
33
+ export declare function cleanupByType(options: AutoCleanupOptions): Promise<void>;
34
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,UAAU,GACV,cAAc,GACd,aAAa,GACb,WAAW,GACX,iBAAiB,CAAC;AAEtB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA8LD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+I3E;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C9E"}
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ /**
3
+ * cleanup — 本地临时缓存清理
4
+ *
5
+ * v8.3.12+: 清理 analyze/execute/split 等命令产生的临时文件和备份
6
+ * 不影响用户数据(迭代目录、任务内容、活跃缓存),只清理"临时"内容
7
+ *
8
+ * 用法:
9
+ * speccore cleanup # 默认清理:7天前的时间戳备份+归档+.bak+临时文件
10
+ * speccore cleanup --days 3 # 清理 3 天前的
11
+ * speccore cleanup --all # 清理所有可清理的(不限制天数)
12
+ * speccore cleanup --dry-run # 预览模式,只列出不删除
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.cleanupCommand = cleanupCommand;
16
+ exports.cleanupByType = cleanupByType;
17
+ const fs_extra_1 = require("fs-extra");
18
+ const path_1 = require("path");
19
+ const logger_1 = require("../utils/logger");
20
+ const task_utils_1 = require("../utils/task-utils");
21
+ const ARCHIVE_PATTERNS = [
22
+ /\.invalid-\d+$/, // xxx.invalid-1234567890123
23
+ /\.orphan-\d+$/, // xxx.orphan-1234567890123
24
+ /\.migrated-\d+$/, // global.migrated-1234567890123
25
+ /\.archived-\d+$/, // global.archived-1234567890123
26
+ ];
27
+ const TEMP_FILE_PATTERNS = [
28
+ /^\.tmp_export\.md$/,
29
+ /^\.tmp_.*$/,
30
+ ];
31
+ const STALE_CACHE_PATTERNS = [
32
+ /last-analysis-snapshot\.json$/,
33
+ /semantic-tags\.json$/,
34
+ /structured-data\.json$/,
35
+ /code-structure\.json$/,
36
+ ];
37
+ /** 判断文件名是否为归档文件 */
38
+ function isArchiveFile(name) {
39
+ return ARCHIVE_PATTERNS.some(p => p.test(name));
40
+ }
41
+ /** 判断文件名是否为临时文件 */
42
+ function isTempFile(name) {
43
+ return TEMP_FILE_PATTERNS.some(p => p.test(name));
44
+ }
45
+ /** 判断是否为可清理的过期缓存 */
46
+ function isStaleCacheFile(name) {
47
+ return STALE_CACHE_PATTERNS.some(p => p.test(name));
48
+ }
49
+ /** 递归扫描目录,收集可清理文件 */
50
+ async function scanForCleanup(rootDir, cutoffTime, results, visited = new Set()) {
51
+ if (visited.has(rootDir))
52
+ return;
53
+ visited.add(rootDir);
54
+ if (!(await (0, fs_extra_1.pathExists)(rootDir)))
55
+ return;
56
+ const entries = await (0, fs_extra_1.readdir)(rootDir, { withFileTypes: true });
57
+ for (const entry of entries) {
58
+ const fullPath = (0, path_1.join)(rootDir, entry.name);
59
+ // 跳过 .speccore/backups/ 和 .speccore/cache/ 中的活跃缓存
60
+ if (fullPath.includes('.speccore/backups'))
61
+ continue;
62
+ if (fullPath.includes('.speccore/cache') && !isStaleCacheFile(entry.name))
63
+ continue;
64
+ // 跳过 node_modules 和 .git
65
+ if (entry.name === 'node_modules' || entry.name === '.git')
66
+ continue;
67
+ // 跳过 outputs/(产物而非缓存)
68
+ if (entry.name === 'outputs')
69
+ continue;
70
+ // 判断当前是否在 .speccore/ 根目录(排除根目录下的配置文件备份)
71
+ const isSpeccoreRoot = rootDir.endsWith('.speccore') || rootDir.endsWith('.speccore/');
72
+ if (entry.isDirectory()) {
73
+ // 检查是否为归档目录
74
+ if (isArchiveFile(entry.name)) {
75
+ try {
76
+ const s = await (0, fs_extra_1.stat)(fullPath);
77
+ if (s.mtimeMs < cutoffTime) {
78
+ results.archiveDirs.push(fullPath);
79
+ }
80
+ }
81
+ catch { /* ignore */ }
82
+ continue;
83
+ }
84
+ // 递归扫描(但限制深度,避免扫进源码目录)
85
+ const relativeDepth = fullPath.replace(rootDir, '').split('/').length;
86
+ if (relativeDepth < 6) {
87
+ await scanForCleanup(fullPath, cutoffTime, results, visited);
88
+ }
89
+ }
90
+ else if (entry.isFile()) {
91
+ try {
92
+ const s = await (0, fs_extra_1.stat)(fullPath);
93
+ const isOld = s.mtimeMs < cutoffTime;
94
+ // 1. 时间戳备份文件(跳过 .speccore/ 根目录下的配置文件备份)
95
+ if ((0, task_utils_1.isTimestampBackup)(entry.name) && isOld && !isSpeccoreRoot) {
96
+ results.timestampBackups.push(fullPath);
97
+ continue;
98
+ }
99
+ // 2. .bak 文件(跳过 .speccore/ 根目录)
100
+ if (entry.name.endsWith('.bak') && isOld && !isSpeccoreRoot) {
101
+ results.bakFiles.push(fullPath);
102
+ continue;
103
+ }
104
+ // 3. 归档文件
105
+ if (isArchiveFile(entry.name) && isOld) {
106
+ results.archiveFiles.push(fullPath);
107
+ continue;
108
+ }
109
+ // 4. 临时文件(不限时间,随时可删)
110
+ if (isTempFile(entry.name)) {
111
+ results.tempFiles.push(fullPath);
112
+ continue;
113
+ }
114
+ // 5. 过期缓存文件
115
+ if (isStaleCacheFile(entry.name) && isOld) {
116
+ results.staleCacheFiles.push(fullPath);
117
+ continue;
118
+ }
119
+ }
120
+ catch { /* ignore */ }
121
+ }
122
+ }
123
+ }
124
+ /** 格式化文件大小 */
125
+ function formatSize(bytes) {
126
+ if (bytes < 1024)
127
+ return `${bytes}B`;
128
+ if (bytes < 1024 * 1024)
129
+ return `${(bytes / 1024).toFixed(1)}KB`;
130
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
131
+ }
132
+ /** 计算总大小 */
133
+ async function calcTotalSize(paths) {
134
+ let total = 0;
135
+ for (const p of paths) {
136
+ try {
137
+ const s = await (0, fs_extra_1.stat)(p);
138
+ total += s.size;
139
+ }
140
+ catch { /* ignore */ }
141
+ }
142
+ return total;
143
+ }
144
+ /** 执行清理 */
145
+ async function performCleanup(results, dryRun) {
146
+ let deleted = 0;
147
+ let skipped = 0;
148
+ let totalSize = 0;
149
+ const allPaths = [
150
+ ...results.timestampBackups,
151
+ ...results.bakFiles,
152
+ ...results.archiveFiles,
153
+ ...results.tempFiles,
154
+ ...results.staleCacheFiles,
155
+ ];
156
+ for (const p of allPaths) {
157
+ try {
158
+ const s = await (0, fs_extra_1.stat)(p);
159
+ totalSize += s.size;
160
+ if (!dryRun) {
161
+ await (0, fs_extra_1.unlink)(p);
162
+ }
163
+ deleted++;
164
+ }
165
+ catch {
166
+ skipped++;
167
+ }
168
+ }
169
+ for (const d of results.archiveDirs) {
170
+ try {
171
+ const s = await (0, fs_extra_1.stat)(d);
172
+ totalSize += s.size;
173
+ if (!dryRun) {
174
+ await (0, fs_extra_1.remove)(d);
175
+ }
176
+ deleted++;
177
+ }
178
+ catch {
179
+ skipped++;
180
+ }
181
+ }
182
+ return { deleted, skipped, totalSize };
183
+ }
184
+ /**
185
+ * cleanup 命令入口
186
+ */
187
+ async function cleanupCommand(options) {
188
+ const cwd = process.cwd();
189
+ const days = options.all ? 0 : (options.days ?? 7);
190
+ const cutoffTime = Date.now() - days * 24 * 60 * 60 * 1000;
191
+ const spinner = new logger_1.Spinner('扫描临时文件...');
192
+ spinner.start();
193
+ const results = {
194
+ timestampBackups: [],
195
+ bakFiles: [],
196
+ archiveFiles: [],
197
+ archiveDirs: [],
198
+ tempFiles: [],
199
+ staleCacheFiles: [],
200
+ };
201
+ // 扫描项目根目录和 .speccore/ 目录
202
+ await scanForCleanup(cwd, cutoffTime, results);
203
+ await scanForCleanup((0, path_1.join)(cwd, '.speccore'), cutoffTime, results);
204
+ spinner.stop('扫描完成');
205
+ const totalItems = results.timestampBackups.length +
206
+ results.bakFiles.length +
207
+ results.archiveFiles.length +
208
+ results.archiveDirs.length +
209
+ results.tempFiles.length +
210
+ results.staleCacheFiles.length;
211
+ if (totalItems === 0) {
212
+ logger_1.logger.info(`✅ 没有发现需要清理的临时文件(${days === 0 ? '全部' : days + ' 天前'})`);
213
+ return;
214
+ }
215
+ // 计算各类型大小
216
+ const fileSize = await calcTotalSize([
217
+ ...results.timestampBackups,
218
+ ...results.bakFiles,
219
+ ...results.archiveFiles,
220
+ ...results.tempFiles,
221
+ ...results.staleCacheFiles,
222
+ ]);
223
+ const dirSize = await calcTotalSize(results.archiveDirs);
224
+ const totalSize = fileSize + dirSize;
225
+ // 展示清单
226
+ logger_1.logger.info('');
227
+ logger_1.logger.info(options.dryRun ? '🔍 [预览模式] 以下文件将被清理:' : '🗑️ 发现以下可清理的临时文件:');
228
+ logger_1.logger.info('');
229
+ if (results.timestampBackups.length > 0) {
230
+ logger_1.logger.info(`📦 时间戳备份文件: ${results.timestampBackups.length} 个`);
231
+ for (const p of results.timestampBackups.slice(0, 5)) {
232
+ logger_1.logger.info(` ${p.replace(cwd + '/', '')}`);
233
+ }
234
+ if (results.timestampBackups.length > 5) {
235
+ logger_1.logger.info(` ... 还有 ${results.timestampBackups.length - 5} 个`);
236
+ }
237
+ }
238
+ if (results.bakFiles.length > 0) {
239
+ logger_1.logger.info(`📦 .bak 备份文件: ${results.bakFiles.length} 个`);
240
+ for (const p of results.bakFiles.slice(0, 5)) {
241
+ logger_1.logger.info(` ${p.replace(cwd + '/', '')}`);
242
+ }
243
+ if (results.bakFiles.length > 5) {
244
+ logger_1.logger.info(` ... 还有 ${results.bakFiles.length - 5} 个`);
245
+ }
246
+ }
247
+ if (results.archiveFiles.length > 0) {
248
+ logger_1.logger.info(`📦 散落归档文件: ${results.archiveFiles.length} 个`);
249
+ for (const p of results.archiveFiles.slice(0, 5)) {
250
+ logger_1.logger.info(` ${p.replace(cwd + '/', '')}`);
251
+ }
252
+ if (results.archiveFiles.length > 5) {
253
+ logger_1.logger.info(` ... 还有 ${results.archiveFiles.length - 5} 个`);
254
+ }
255
+ }
256
+ if (results.archiveDirs.length > 0) {
257
+ logger_1.logger.info(`📁 归档目录: ${results.archiveDirs.length} 个`);
258
+ for (const p of results.archiveDirs.slice(0, 5)) {
259
+ logger_1.logger.info(` ${p.replace(cwd + '/', '')}/`);
260
+ }
261
+ if (results.archiveDirs.length > 5) {
262
+ logger_1.logger.info(` ... 还有 ${results.archiveDirs.length - 5} 个`);
263
+ }
264
+ }
265
+ if (results.tempFiles.length > 0) {
266
+ logger_1.logger.info(`📝 临时文件: ${results.tempFiles.length} 个`);
267
+ for (const p of results.tempFiles.slice(0, 5)) {
268
+ logger_1.logger.info(` ${p.replace(cwd + '/', '')}`);
269
+ }
270
+ if (results.tempFiles.length > 5) {
271
+ logger_1.logger.info(` ... 还有 ${results.tempFiles.length - 5} 个`);
272
+ }
273
+ }
274
+ if (results.staleCacheFiles.length > 0) {
275
+ logger_1.logger.info(`💾 过期缓存: ${results.staleCacheFiles.length} 个`);
276
+ for (const p of results.staleCacheFiles.slice(0, 5)) {
277
+ logger_1.logger.info(` ${p.replace(cwd + '/', '')}`);
278
+ }
279
+ if (results.staleCacheFiles.length > 5) {
280
+ logger_1.logger.info(` ... 还有 ${results.staleCacheFiles.length - 5} 个`);
281
+ }
282
+ }
283
+ logger_1.logger.info('');
284
+ logger_1.logger.info(`总计: ${totalItems} 项,预估释放 ${formatSize(totalSize)}`);
285
+ if (options.dryRun) {
286
+ logger_1.logger.info('');
287
+ logger_1.logger.info('💡 去掉 --dry-run 即可实际清理');
288
+ return;
289
+ }
290
+ // 执行清理
291
+ logger_1.logger.info('');
292
+ const actionSpinner = new logger_1.Spinner('正在清理...');
293
+ actionSpinner.start();
294
+ const { deleted, skipped } = await performCleanup(results, false);
295
+ actionSpinner.stop('清理完成');
296
+ logger_1.logger.success(`✅ 已清理 ${deleted} 个临时文件/目录`);
297
+ if (skipped > 0) {
298
+ logger_1.logger.warn(`⚠️ ${skipped} 个文件删除失败(可能已被占用)`);
299
+ }
300
+ logger_1.logger.info(` 预估释放空间: ${formatSize(totalSize)}`);
301
+ // 提示
302
+ logger_1.logger.info('');
303
+ logger_1.logger.info('💡 提示:');
304
+ logger_1.logger.info(' • 被清理的是「临时」文件,不影响迭代/任务/Spec 内容');
305
+ logger_1.logger.info(' • 活跃缓存(knowledge-graph.json、rag-index.json)不会被清理');
306
+ logger_1.logger.info(' • 使用 --dry-run 可预览清理内容');
307
+ logger_1.logger.info(' • 使用 --all 可清理所有可清理的(不限天数)');
308
+ }
309
+ /**
310
+ * v8.3.14+: 按类型自动清理(供 analyze/split/execute 等命令调用)
311
+ * 只清理指定的类型,静默执行,不影响用户体验
312
+ */
313
+ async function cleanupByType(options) {
314
+ const { cwd, types, days = 7, silent = true } = options;
315
+ const cutoffTime = Date.now() - days * 24 * 60 * 60 * 1000;
316
+ const results = {
317
+ timestampBackups: [],
318
+ bakFiles: [],
319
+ archiveFiles: [],
320
+ archiveDirs: [],
321
+ tempFiles: [],
322
+ staleCacheFiles: [],
323
+ };
324
+ // 扫描项目根目录和 .speccore/ 目录
325
+ await scanForCleanup(cwd, cutoffTime, results);
326
+ await scanForCleanup((0, path_1.join)(cwd, '.speccore'), cutoffTime, results);
327
+ // 过滤只保留指定类型
328
+ const filteredResults = {
329
+ timestampBackups: types.includes('timestampBackups') ? results.timestampBackups : [],
330
+ bakFiles: types.includes('bakFiles') ? results.bakFiles : [],
331
+ archiveFiles: types.includes('archiveFiles') ? results.archiveFiles : [],
332
+ archiveDirs: types.includes('archiveDirs') ? results.archiveDirs : [],
333
+ tempFiles: types.includes('tempFiles') ? results.tempFiles : [],
334
+ staleCacheFiles: types.includes('staleCacheFiles') ? results.staleCacheFiles : [],
335
+ };
336
+ const totalItems = filteredResults.timestampBackups.length +
337
+ filteredResults.bakFiles.length +
338
+ filteredResults.archiveFiles.length +
339
+ filteredResults.archiveDirs.length +
340
+ filteredResults.tempFiles.length +
341
+ filteredResults.staleCacheFiles.length;
342
+ if (totalItems === 0)
343
+ return;
344
+ const { deleted, skipped, totalSize } = await performCleanup(filteredResults, false);
345
+ if (!silent) {
346
+ logger_1.logger.info(`🧹 自动清理: ${deleted} 个临时文件/目录已清理`);
347
+ if (skipped > 0) {
348
+ logger_1.logger.warn(` ⚠️ ${skipped} 个文件删除失败`);
349
+ }
350
+ }
351
+ else {
352
+ logger_1.logger.debug(`🧹 自动清理完成: ${deleted} 个文件/目录,释放 ${formatSize(totalSize)}`);
353
+ }
354
+ }
355
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAiDA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAeD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4S3E"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAkDA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAeD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4S3E"}
@@ -50,6 +50,7 @@ const spec_rules_1 = require("../core/spec-rules");
50
50
  const spec_paths_1 = require("../core/spec-paths");
51
51
  const operation_log_1 = require("../core/operation-log");
52
52
  const next_steps_1 = require("../core/next-steps");
53
+ const cleanup_1 = require("./cleanup");
53
54
  const question_checklist_1 = require("../core/question-checklist");
54
55
  const platform_registry_1 = require("../core/platform-registry");
55
56
  const task_paths_1 = require("../core/task-paths");
@@ -2106,6 +2107,13 @@ async function runApplyMode(iteration, options) {
2106
2107
  await (0, change_detection_1.recordAnalysisSnapshot)(`Task-${task}`);
2107
2108
  // ── 执行后总结 ──
2108
2109
  outputPostSummary(iteration, task, writtenCount, parsed.files.map(f => f.path));
2110
+ // v8.3.14+: execute 后自动清理 .bak 文件
2111
+ await (0, cleanup_1.cleanupByType)({
2112
+ cwd: process.cwd(),
2113
+ types: ['bakFiles'],
2114
+ days: 0, // 不限天数,清理所有 .bak
2115
+ silent: true,
2116
+ });
2109
2117
  logger_1.logger.info(` 📋 下一步: speccore pr --task ${task}`);
2110
2118
  }
2111
2119
  function outputPostSummary(iteration, task, fileCount, filePaths) {