tanmi-dock 1.0.3 → 1.0.4

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 (114) hide show
  1. package/README.md +18 -0
  2. package/dist/commands/calibrate.d.ts +10 -0
  3. package/dist/commands/calibrate.d.ts.map +1 -0
  4. package/dist/commands/calibrate.js +158 -0
  5. package/dist/commands/calibrate.js.map +1 -0
  6. package/dist/commands/check.d.ts +9 -1
  7. package/dist/commands/check.d.ts.map +1 -1
  8. package/dist/commands/check.js +261 -94
  9. package/dist/commands/check.js.map +1 -1
  10. package/dist/commands/clean.d.ts +2 -6
  11. package/dist/commands/clean.d.ts.map +1 -1
  12. package/dist/commands/clean.js +224 -209
  13. package/dist/commands/clean.js.map +1 -1
  14. package/dist/commands/dashboard.d.ts.map +1 -1
  15. package/dist/commands/dashboard.js +56 -28
  16. package/dist/commands/dashboard.js.map +1 -1
  17. package/dist/commands/link.d.ts +6 -6
  18. package/dist/commands/link.d.ts.map +1 -1
  19. package/dist/commands/link.js +417 -196
  20. package/dist/commands/link.js.map +1 -1
  21. package/dist/commands/migrate.d.ts +11 -0
  22. package/dist/commands/migrate.d.ts.map +1 -1
  23. package/dist/commands/migrate.js +277 -57
  24. package/dist/commands/migrate.js.map +1 -1
  25. package/dist/commands/reset.d.ts.map +1 -1
  26. package/dist/commands/reset.js +19 -24
  27. package/dist/commands/reset.js.map +1 -1
  28. package/dist/commands/status.d.ts +4 -0
  29. package/dist/commands/status.d.ts.map +1 -1
  30. package/dist/commands/status.js +37 -20
  31. package/dist/commands/status.js.map +1 -1
  32. package/dist/commands/unavailable.js.map +1 -1
  33. package/dist/commands/unlink.d.ts.map +1 -1
  34. package/dist/commands/unlink.js +43 -39
  35. package/dist/commands/unlink.js.map +1 -1
  36. package/dist/core/config.d.ts +3 -1
  37. package/dist/core/config.d.ts.map +1 -1
  38. package/dist/core/config.js +6 -3
  39. package/dist/core/config.js.map +1 -1
  40. package/dist/core/parser.js +1 -1
  41. package/dist/core/parser.js.map +1 -1
  42. package/dist/core/registry.d.ts +11 -29
  43. package/dist/core/registry.d.ts.map +1 -1
  44. package/dist/core/registry.js +46 -113
  45. package/dist/core/registry.js.map +1 -1
  46. package/dist/core/space/calibration-executor.d.ts +16 -0
  47. package/dist/core/space/calibration-executor.d.ts.map +1 -0
  48. package/dist/core/space/calibration-executor.js +142 -0
  49. package/dist/core/space/calibration-executor.js.map +1 -0
  50. package/dist/core/space/calibration-planner.d.ts +5 -0
  51. package/dist/core/space/calibration-planner.d.ts.map +1 -0
  52. package/dist/core/space/calibration-planner.js +157 -0
  53. package/dist/core/space/calibration-planner.js.map +1 -0
  54. package/dist/core/space/cleanup-executor.d.ts +15 -0
  55. package/dist/core/space/cleanup-executor.d.ts.map +1 -0
  56. package/dist/core/space/cleanup-executor.js +188 -0
  57. package/dist/core/space/cleanup-executor.js.map +1 -0
  58. package/dist/core/space/cleanup-journal.d.ts +43 -0
  59. package/dist/core/space/cleanup-journal.d.ts.map +1 -0
  60. package/dist/core/space/cleanup-journal.js +96 -0
  61. package/dist/core/space/cleanup-journal.js.map +1 -0
  62. package/dist/core/space/cleanup-planner.d.ts +14 -0
  63. package/dist/core/space/cleanup-planner.d.ts.map +1 -0
  64. package/dist/core/space/cleanup-planner.js +166 -0
  65. package/dist/core/space/cleanup-planner.js.map +1 -0
  66. package/dist/core/space/cleanup-selection.d.ts +10 -0
  67. package/dist/core/space/cleanup-selection.d.ts.map +1 -0
  68. package/dist/core/space/cleanup-selection.js +84 -0
  69. package/dist/core/space/cleanup-selection.js.map +1 -0
  70. package/dist/core/space/estimator.d.ts +11 -0
  71. package/dist/core/space/estimator.d.ts.map +1 -0
  72. package/dist/core/space/estimator.js +142 -0
  73. package/dist/core/space/estimator.js.map +1 -0
  74. package/dist/core/space/inventory.d.ts +15 -0
  75. package/dist/core/space/inventory.d.ts.map +1 -0
  76. package/dist/core/space/inventory.js +587 -0
  77. package/dist/core/space/inventory.js.map +1 -0
  78. package/dist/core/space/meter.d.ts +5 -0
  79. package/dist/core/space/meter.d.ts.map +1 -0
  80. package/dist/core/space/meter.js +87 -0
  81. package/dist/core/space/meter.js.map +1 -0
  82. package/dist/core/space/migration-journal.d.ts +31 -0
  83. package/dist/core/space/migration-journal.d.ts.map +1 -0
  84. package/dist/core/space/migration-journal.js +121 -0
  85. package/dist/core/space/migration-journal.js.map +1 -0
  86. package/dist/core/space/service.d.ts +26 -0
  87. package/dist/core/space/service.d.ts.map +1 -0
  88. package/dist/core/space/service.js +54 -0
  89. package/dist/core/space/service.js.map +1 -0
  90. package/dist/core/space/types.d.ts +241 -0
  91. package/dist/core/space/types.d.ts.map +1 -0
  92. package/dist/core/space/types.js +13 -0
  93. package/dist/core/space/types.js.map +1 -0
  94. package/dist/core/store.d.ts.map +1 -1
  95. package/dist/core/store.js +12 -6
  96. package/dist/core/store.js.map +1 -1
  97. package/dist/index.js +2 -0
  98. package/dist/index.js.map +1 -1
  99. package/dist/types/index.d.ts +2 -0
  100. package/dist/types/index.d.ts.map +1 -1
  101. package/dist/utils/atomic-file.d.ts +6 -0
  102. package/dist/utils/atomic-file.d.ts.map +1 -0
  103. package/dist/utils/atomic-file.js +37 -0
  104. package/dist/utils/atomic-file.js.map +1 -0
  105. package/dist/utils/fs-utils.d.ts +18 -1
  106. package/dist/utils/fs-utils.d.ts.map +1 -1
  107. package/dist/utils/fs-utils.js +150 -2
  108. package/dist/utils/fs-utils.js.map +1 -1
  109. package/dist/utils/logger.d.ts +1 -1
  110. package/dist/utils/logger.js +2 -2
  111. package/dist/utils/prompt.d.ts.map +1 -1
  112. package/dist/utils/prompt.js +4 -4
  113. package/dist/utils/prompt.js.map +1 -1
  114. package/package.json +1 -1
@@ -1,21 +1,18 @@
1
1
  /**
2
- * clean 命令 - 清理无引用库
2
+ * clean 命令 - 使用统一空间清单和清理计划删除 Store 内容。
3
3
  */
4
4
  import fs from 'fs/promises';
5
- import path from 'path';
6
5
  import { Command } from 'commander';
7
6
  import { ensureInitialized } from '../core/guard.js';
8
7
  import { getRegistry } from '../core/registry.js';
9
- import * as store from '../core/store.js';
10
8
  import * as config from '../core/config.js';
11
- import { SHARED_PLATFORM } from '../core/platform.js';
9
+ import { SpaceService } from '../core/space/service.js';
10
+ import { buildUnreferencedSelectionSummary } from '../core/space/cleanup-selection.js';
12
11
  import { formatSize } from '../utils/disk.js';
13
- import { info, warn, success, hint, blank, separator, title, error } from '../utils/logger.js';
12
+ import { debug, error, info, warn, success, hint, blank, separator, title } from '../utils/logger.js';
14
13
  import { withGlobalLock } from '../utils/global-lock.js';
15
14
  import { confirmAction, checkboxSelect, PROMPT_CANCELLED } from '../utils/prompt.js';
16
- /**
17
- * 创建 clean 命令
18
- */
15
+ /** 创建 clean 命令。 */
19
16
  export function createCleanCommand() {
20
17
  return new Command('clean')
21
18
  .description('清理无引用的库')
@@ -32,51 +29,194 @@ export function createCleanCommand() {
32
29
  }
33
30
  });
34
31
  }
35
- /**
36
- * 清理 commit 目录和空的 library 目录
37
- * @param storePath Store 根路径
38
- * @param libName 库名
39
- * @param commit commit hash
40
- */
41
- async function cleanCommitDirectory(storePath, libName, commit) {
42
- // 删除整个 commit 目录(包括 _shared)
43
- const commitPath = path.join(storePath, libName, commit);
44
- await fs.rm(commitPath, { recursive: true, force: true }).catch(() => { });
45
- // 检查 library 目录是否为空,如果是则删除
46
- const libPath = path.join(storePath, libName);
47
- const entries = await fs.readdir(libPath).catch(() => []);
48
- if (entries.length === 0) {
49
- await fs.rm(libPath, { recursive: true, force: true }).catch(() => { });
32
+ function candidateKey(candidate) {
33
+ return JSON.stringify([candidate.id.libName, candidate.id.commit]);
34
+ }
35
+ function formatAmount(amount) {
36
+ if (amount.quality === 'partial' && amount.bytes === 0)
37
+ return '容量未知';
38
+ const prefix = amount.quality === 'exact' ? '' : '约 ';
39
+ return `${prefix}${formatSize(amount.bytes)}`;
40
+ }
41
+ function groupSelections(candidates, selectedPlatforms) {
42
+ const grouped = new Map();
43
+ for (const selected of selectedPlatforms) {
44
+ const key = candidateKey(selected.candidate);
45
+ const group = grouped.get(key) ?? {
46
+ candidate: selected.candidate,
47
+ platforms: new Set(),
48
+ all: false,
49
+ };
50
+ if (selected.platform == null)
51
+ group.all = true;
52
+ else
53
+ group.platforms.add(selected.platform);
54
+ grouped.set(key, group);
50
55
  }
56
+ return [...grouped.values()].map(({ candidate, platforms, all }) => ({
57
+ id: candidate.id,
58
+ platforms: all || platforms.size === candidate.platforms.length ? 'all' : [...platforms],
59
+ }));
51
60
  }
52
- /**
53
- * 格式化无引用时间显示
54
- */
55
- function formatUnreferencedTime(entry) {
56
- if (entry.unlinkedAt) {
57
- const daysAgo = Math.floor((Date.now() - entry.unlinkedAt) / 86400000);
58
- return `无引用 ${daysAgo} 天`;
61
+ function automaticSelections(candidates, predicate) {
62
+ const selected = [];
63
+ for (const candidate of candidates) {
64
+ const matched = candidate.platforms.filter(predicate);
65
+ for (const platform of matched)
66
+ selected.push({ candidate, platform: platform.platform });
67
+ // 保留旧版孤立 LibraryInfo 的登记清理能力;有未知磁盘内容时 Planner 会安全跳过。
68
+ if (candidate.platforms.length === 0 && candidate.libraryRecordPresent) {
69
+ selected.push({ candidate });
70
+ }
59
71
  }
60
- // 没有 unlinkedAt,说明从未被引用过,使用 createdAt 计算
61
- const createdAt = new Date(entry.createdAt).getTime();
62
- const daysAgo = Math.floor((Date.now() - createdAt) / 86400000);
63
- return `从未引用 (${daysAgo} 天前创建)`;
72
+ return groupSelections(candidates, selected);
64
73
  }
65
- /**
66
- * 清理库
67
- */
74
+ async function buildManualSelections(candidates) {
75
+ const targets = [];
76
+ const choices = [];
77
+ for (const candidate of candidates) {
78
+ if (candidate.platforms.length === 0) {
79
+ const index = targets.push({ candidate }) - 1;
80
+ choices.push({
81
+ name: `${candidate.id.libName}/${candidate.id.commit.slice(0, 7)} (登记记录或未登记目录)`,
82
+ value: String(index),
83
+ checked: false,
84
+ });
85
+ continue;
86
+ }
87
+ for (let platformIndex = 0; platformIndex < candidate.platforms.length; platformIndex++) {
88
+ const platform = candidate.platforms[platformIndex];
89
+ const index = targets.push({ candidate, platform: platform.platform }) - 1;
90
+ const sharedHint = platformIndex === 0 && candidate.sharedBytes > 0
91
+ ? `,版本共享 ${formatSize(candidate.sharedBytes)} 随最后一个平台处理`
92
+ : '';
93
+ const status = platform.referencedBy.length === 0
94
+ ? '无引用'
95
+ : `被 ${platform.referencedBy.length} 个项目使用`;
96
+ choices.push({
97
+ name: `${candidate.id.libName}/${candidate.id.commit.slice(0, 7)}/${platform.platform} ${formatSize(platform.registeredBytes)} (${status}${sharedHint})`,
98
+ value: String(index),
99
+ checked: platform.referencedBy.length === 0,
100
+ });
101
+ }
102
+ }
103
+ if (choices.length === 0)
104
+ return null;
105
+ blank();
106
+ const selectedValues = await checkboxSelect('选择要清理的库:', choices);
107
+ if (selectedValues === PROMPT_CANCELLED) {
108
+ info('已取消');
109
+ return null;
110
+ }
111
+ const selectedTargets = selectedValues
112
+ .map((value) => targets[Number(value)])
113
+ .filter((target) => Boolean(target));
114
+ if (selectedTargets.length === 0)
115
+ return { selections: [], strategyName: 'manual', allowUnknownContent: false };
116
+ const referenced = selectedTargets.filter((target) => {
117
+ if (!target.platform)
118
+ return false;
119
+ return target.candidate.platforms
120
+ .find((platform) => platform.platform === target.platform)
121
+ .referencedBy.length > 0;
122
+ });
123
+ if (referenced.length > 0) {
124
+ blank();
125
+ warn(`注意: ${referenced.length} 个平台仍被项目引用,删除后链接将失效`);
126
+ const confirmed = await confirmAction('确定继续?', false);
127
+ if (confirmed === PROMPT_CANCELLED || !confirmed)
128
+ return null;
129
+ }
130
+ const selectedCandidates = new Set(selectedTargets.map((target) => candidateKey(target.candidate)));
131
+ const containsUnknown = candidates.some((candidate) => selectedCandidates.has(candidateKey(candidate)) && candidate.unknownChildren.length > 0);
132
+ let allowUnknownContent = false;
133
+ if (containsUnknown) {
134
+ warn('选择中包含未登记内容,整版本删除会同时移除这些内容');
135
+ const confirmed = await confirmAction('确认删除选中版本中的未登记内容?', false);
136
+ if (confirmed === PROMPT_CANCELLED || !confirmed)
137
+ return null;
138
+ allowUnknownContent = true;
139
+ }
140
+ return {
141
+ selections: groupSelections(candidates, selectedTargets),
142
+ strategyName: 'manual',
143
+ allowUnknownContent,
144
+ };
145
+ }
146
+ async function buildSelections(candidates, cleanStrategy, unusedDays) {
147
+ if (cleanStrategy === 'manual')
148
+ return buildManualSelections(candidates);
149
+ if (cleanStrategy === 'unused') {
150
+ const threshold = Date.now() - unusedDays * 86400000;
151
+ const pending = candidates.flatMap((candidate) => candidate.platforms)
152
+ .filter((platform) => platform.referencedBy.length === 0 && platform.unlinkedAt != null && platform.unlinkedAt >= threshold);
153
+ if (pending.length > 0) {
154
+ blank();
155
+ info(`无引用但尚未达到清理条件的库 (${pending.length} 个):`);
156
+ for (const platform of pending) {
157
+ const daysLeft = Math.ceil((platform.unlinkedAt + unusedDays * 86400000 - Date.now()) / 86400000);
158
+ hint(` - ${platform.platform} - 还剩 ${daysLeft} 天`);
159
+ }
160
+ }
161
+ return {
162
+ selections: automaticSelections(candidates, (platform) => platform.referencedBy.length === 0
163
+ && platform.unlinkedAt != null
164
+ && platform.unlinkedAt < threshold),
165
+ strategyName: `unused (超过 ${unusedDays} 天)`,
166
+ allowUnknownContent: false,
167
+ };
168
+ }
169
+ const unreferenced = buildUnreferencedSelectionSummary(candidates);
170
+ return {
171
+ selections: unreferenced.selections,
172
+ strategyName: cleanStrategy === 'capacity' ? 'capacity' : 'unreferenced',
173
+ allowUnknownContent: false,
174
+ };
175
+ }
176
+ function renderPlan(plan, strategyName) {
177
+ blank();
178
+ title(`将清理 (${strategyName} 策略):`);
179
+ for (const group of plan.groups) {
180
+ const target = group.deleteKind === 'commit'
181
+ ? `${group.id.libName}/${group.id.commit.slice(0, 7)} (完整版本)`
182
+ : group.deleteKind === 'platform'
183
+ ? `${group.id.libName}/${group.id.commit.slice(0, 7)}/${group.platform}`
184
+ : group.deleteKind === 'shared'
185
+ ? `${group.id.libName}/${group.id.commit.slice(0, 7)}/_shared`
186
+ : `${group.id.libName}/${group.id.commit.slice(0, 7)} (失效记录)`;
187
+ info(` - ${target} (${formatAmount(group.expectedRelease)})`);
188
+ }
189
+ for (const warning of plan.warnings)
190
+ warn(`[space] ${warning}`);
191
+ blank();
192
+ info(`预计释放: ${formatAmount(plan.expectedRelease)}`);
193
+ debug(`[space] 清理计划: plan=${plan.id}, reason=${plan.reason}, groups=${plan.groups.length}, expected=${plan.expectedRelease.bytes}, quality=${plan.expectedRelease.quality}`);
194
+ }
195
+ /** 执行清理。调用方必须持有全局锁。 */
68
196
  export async function cleanLibraries(options) {
197
+ const cfg = await config.load({ migrate: !options.dryRun });
198
+ if (!cfg)
199
+ throw new Error('配置文件不存在,请先运行 tanmi-dock init');
200
+ if (options.dryRun && config.checkConfigVersion(cfg) === 'migrate') {
201
+ throw new Error('配置需要迁移;dry-run 不会修改配置,请先运行一次普通命令完成迁移');
202
+ }
69
203
  const registry = getRegistry();
70
- await registry.load();
71
- // 获取清理策略配置
72
- const cleanStrategy = await config.get('cleanStrategy');
73
- const unusedDays = (await config.get('unusedDays')) ?? 30;
74
- const storePath = await store.getStorePath();
204
+ await registry.load({ migrate: !options.dryRun });
205
+ const cleanStrategy = cfg.cleanStrategy ?? 'unreferenced';
206
+ const unusedDays = cfg.unusedDays ?? 30;
207
+ const storePath = cfg.storePath;
208
+ const spaceService = new SpaceService(registry, storePath);
209
+ const executor = spaceService.createCleanupExecutor();
75
210
  info('扫描 Store...');
76
- // 元数据清理:清理无效项目和失效引用
77
- // dry-run 模式下只统计不实际清理
211
+ if (!options.dryRun) {
212
+ const recovered = await executor.recoverPending();
213
+ if (recovered > 0)
214
+ info(`恢复了 ${recovered} 个中断清理记录`);
215
+ }
216
+ else {
217
+ debug('[space] dry-run 跳过清理日志恢复,保证预演过程无写入');
218
+ }
78
219
  if (options.dryRun) {
79
- // dry-run: 只统计会清理多少,不实际修改
80
220
  const projects = registry.listProjects();
81
221
  let staleProjectCount = 0;
82
222
  for (const project of projects) {
@@ -87,196 +227,71 @@ export async function cleanLibraries(options) {
87
227
  staleProjectCount++;
88
228
  }
89
229
  }
90
- if (staleProjectCount > 0) {
230
+ if (staleProjectCount > 0)
91
231
  info(`将清理 ${staleProjectCount} 个无效项目记录`);
92
- }
93
232
  }
94
233
  else {
95
- // 实际清理无效项目
96
234
  const staleHashes = await registry.cleanStaleProjects();
97
- if (staleHashes.length > 0) {
98
- info(`清理了 ${staleHashes.length} 个无效项目记录`);
99
- }
100
- // 实际清理失效引用
101
235
  const staleRefs = await registry.cleanStaleReferences();
102
- if (staleRefs > 0) {
236
+ if (staleHashes.length > 0)
237
+ info(`清理了 ${staleHashes.length} 个无效项目记录`);
238
+ if (staleRefs > 0)
103
239
  info(`清理了 ${staleRefs} 个失效引用`);
104
- }
105
- // 保存元数据清理结果
106
- if (staleHashes.length > 0 || staleRefs > 0) {
240
+ if (staleHashes.length > 0 || staleRefs > 0)
107
241
  await registry.save();
108
- }
109
242
  }
110
- // 获取孤立的 LibraryInfo(没有对应 StoreEntry 的库记录)
111
- const orphanLibraries = registry.getOrphanLibraries();
112
- // 根据策略获取待清理的 StoreEntry 列表
113
- let toCleanStores = [];
114
- let strategyName;
115
- if (cleanStrategy === 'unused') {
116
- // unused 策略:基于 StoreEntry unlinkedAt
117
- toCleanStores = registry.getUnusedStores(unusedDays);
118
- strategyName = `unused (超过 ${unusedDays} 天)`;
119
- // 显示待清理的库
120
- const pending = registry.getPendingUnusedStores(unusedDays);
121
- if (pending.length > 0) {
122
- blank();
123
- info(`无引用但尚未达到清理条件的库 (${pending.length} 个):`);
124
- for (const { entry, daysLeft } of pending) {
125
- hint(` - ${entry.libName}/${entry.commit.slice(0, 7)}/${entry.platform} - 还剩 ${daysLeft} 天`);
126
- }
127
- }
128
- }
129
- else if (cleanStrategy === 'manual') {
130
- // manual 策略:交互式选择要清理的库
131
- const allStores = registry.listStores();
132
- if (allStores.length === 0 && orphanLibraries.length === 0) {
133
- success('Store 为空');
134
- return;
135
- }
136
- // 构建选项列表
137
- const choices = allStores.map((entry) => {
138
- const key = registry.getStoreKey(entry.libName, entry.commit, entry.platform);
139
- const status = entry.usedBy.length === 0
140
- ? '(无引用)'
141
- : `(被 ${entry.usedBy.length} 个项目使用)`;
142
- const size = formatSize(entry.size);
143
- return {
144
- name: `${entry.libName}/${entry.commit.slice(0, 7)}/${entry.platform} ${size} ${status}`,
145
- value: key,
146
- checked: entry.usedBy.length === 0, // 无引用的默认勾选
147
- };
148
- });
149
- blank();
150
- const selected = await checkboxSelect('选择要清理的库:', choices);
151
- // ESC 取消
152
- if (selected === PROMPT_CANCELLED) {
153
- info('已取消');
154
- return;
155
- }
156
- if (selected.length === 0) {
157
- info('未选择任何库');
158
- return;
159
- }
160
- // 警告有引用的库
161
- const withRefs = selected.filter((key) => {
162
- const entry = registry.getStore(key);
163
- return entry && entry.usedBy.length > 0;
164
- });
165
- if (withRefs.length > 0) {
166
- blank();
167
- warn(`注意: ${withRefs.length} 个库仍被项目引用,删除后链接将失效`);
168
- const confirmed = await confirmAction('确定继续?', false);
169
- // ESC 取消或确认 No
170
- if (confirmed === PROMPT_CANCELLED || !confirmed) {
171
- info('已取消清理');
172
- return;
173
- }
174
- }
175
- // 将选中的转为 StoreEntry
176
- for (const key of selected) {
177
- const entry = registry.getStore(key);
178
- if (entry) {
179
- toCleanStores.push(entry);
180
- }
181
- }
182
- strategyName = 'manual';
183
- }
184
- else {
185
- // unreferenced 或 capacity 策略:基于 StoreEntry 清理所有无引用库
186
- toCleanStores = registry.getUnreferencedStores();
187
- strategyName = cleanStrategy === 'capacity' ? 'capacity' : 'unreferenced';
188
- }
189
- // 检查是否有需要清理的内容
190
- if (toCleanStores.length === 0 && orphanLibraries.length === 0) {
191
- success('没有需要清理的库');
243
+ const summary = await spaceService.buildSnapshot('summary');
244
+ const candidates = spaceService.getCleanupCandidates(summary);
245
+ const selectionResult = await buildSelections(candidates, cleanStrategy, unusedDays);
246
+ if (!selectionResult)
247
+ return;
248
+ if (selectionResult.selections.length === 0) {
249
+ success(cleanStrategy === 'manual' ? '未选择任何库' : '没有需要清理的库');
192
250
  return;
193
251
  }
194
- // 计算总大小
195
- let totalSize = 0;
196
- for (const entry of toCleanStores) {
197
- totalSize += entry.size;
198
- }
199
- for (const lib of orphanLibraries) {
200
- totalSize += lib.size;
201
- }
202
- blank();
203
- title(`将清理 (${strategyName} 策略):`);
204
- // 显示待清理的 StoreEntry
205
- for (const entry of toCleanStores) {
206
- info(` - ${entry.libName}/${entry.commit.slice(0, 7)}/${entry.platform} (${formatSize(entry.size)}) - ${formatUnreferencedTime(entry)}`);
207
- }
208
- // 显示待清理的孤立 LibraryInfo
209
- if (orphanLibraries.length > 0) {
210
- for (const lib of orphanLibraries) {
211
- info(` - ${lib.libName}/${lib.commit.slice(0, 7)} (${formatSize(lib.size)}) - 孤立记录`);
212
- }
252
+ const plan = await spaceService.buildCleanupPlan({
253
+ reason: cleanStrategy === 'manual'
254
+ ? 'manual'
255
+ : cleanStrategy === 'unused'
256
+ ? 'unused'
257
+ : cleanStrategy === 'capacity'
258
+ ? 'capacity'
259
+ : 'unreferenced',
260
+ selections: selectionResult.selections,
261
+ requireUnreferenced: cleanStrategy !== 'manual',
262
+ allowUnknownContent: selectionResult.allowUnknownContent,
263
+ });
264
+ if (plan.groups.length === 0) {
265
+ for (const warning of plan.warnings)
266
+ warn(`[space] ${warning}`);
267
+ success('没有可安全清理的库');
268
+ return;
213
269
  }
214
- blank();
215
- info(`总计释放: ${formatSize(totalSize)}`);
270
+ renderPlan(plan, selectionResult.strategyName);
216
271
  if (options.dryRun) {
217
272
  blank();
218
273
  hint('运行 tanmi-dock clean 执行清理');
219
274
  return;
220
275
  }
221
- const cleanCount = toCleanStores.length + orphanLibraries.length;
222
276
  if (!options.force) {
223
277
  blank();
224
- const confirmed = await confirmAction(`确认清理以上 ${cleanCount} 个库 (${formatSize(totalSize)})?`, false);
225
- if (!confirmed) {
278
+ const confirmed = await confirmAction(`确认执行计划 ${plan.id} ${plan.groups.length} 项清理 (${formatAmount(plan.expectedRelease)})?`, false);
279
+ if (confirmed === PROMPT_CANCELLED || !confirmed) {
226
280
  info('已取消清理');
227
281
  return;
228
282
  }
229
283
  }
230
- // 执行清理
231
284
  blank();
232
285
  separator();
233
- info('正在清理...');
234
- let cleaned = 0;
235
- let freedSize = 0;
236
- // 清理 StoreEntry
237
- for (const entry of toCleanStores) {
238
- try {
239
- await store.remove(entry.libName, entry.commit, entry.platform);
240
- const storeKey = registry.getStoreKey(entry.libName, entry.commit, entry.platform);
241
- registry.removeStore(storeKey);
242
- // 检查是否还有该库的其他平台,如果没有则清理整个 commit 目录
243
- const remainingPlatforms = registry.getLibraryPlatforms(entry.libName, entry.commit);
244
- if (remainingPlatforms.length === 0) {
245
- // 删除 _shared 的 StoreEntry(如果存在)
246
- const sharedKey = registry.getStoreKey(entry.libName, entry.commit, SHARED_PLATFORM);
247
- const sharedEntry = registry.getStore(sharedKey);
248
- if (sharedEntry) {
249
- registry.removeStore(sharedKey);
250
- freedSize += sharedEntry.size;
251
- }
252
- await cleanCommitDirectory(storePath, entry.libName, entry.commit);
253
- // 移除 LibraryInfo
254
- const libKey = registry.getLibraryKey(entry.libName, entry.commit);
255
- registry.removeLibrary(libKey);
256
- }
257
- freedSize += entry.size;
258
- cleaned++;
259
- }
260
- catch (err) {
261
- warn(`清理 ${entry.libName}/${entry.platform} 失败: ${err.message}`);
262
- }
286
+ info(`正在执行清理计划 ${plan.id}...`);
287
+ const result = await executor.execute(plan);
288
+ blank();
289
+ if (result.status === 'completed') {
290
+ success(`清理完成: 删除 ${result.succeeded.length} 项,释放 ${formatAmount(result.released)}`);
263
291
  }
264
- // 清理孤立的 LibraryInfo
265
- for (const lib of orphanLibraries) {
266
- try {
267
- const libKey = registry.getLibraryKey(lib.libName, lib.commit);
268
- registry.removeLibrary(libKey);
269
- await cleanCommitDirectory(storePath, lib.libName, lib.commit);
270
- freedSize += lib.size;
271
- cleaned++;
272
- }
273
- catch (err) {
274
- warn(`清理孤立记录 ${lib.libName} 失败: ${err.message}`);
275
- }
292
+ else {
293
+ warn(`清理部分完成: 成功 ${result.succeeded.length} 项,失败 ${result.failed.length} 项,释放 ${formatAmount(result.released)}`);
276
294
  }
277
- await registry.save();
278
- blank();
279
- success(`清理完成: 删除 ${cleaned} 个库,释放 ${formatSize(freedSize)}`);
280
295
  }
281
296
  export default createCleanCommand;
282
297
  //# sourceMappingURL=clean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA+CnD"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDnD"}