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
package/README.md CHANGED
@@ -72,6 +72,7 @@ td status
72
72
  | `td status` | 查看当前项目状态 |
73
73
  | `td projects` | 列出所有已链接项目 |
74
74
  | `td clean` | 清理无引用的库 |
75
+ | `td calibrate` | 按 Store 实际状态校准空间登记 |
75
76
  | `td unlink` | 解除链接,恢复为目录 |
76
77
  | `td config` | 交互式配置 |
77
78
  | `td check` | 环境诊断和数据一致性检查 |
@@ -135,6 +136,21 @@ td config set <key> <value> # 设置配置
135
136
  | `capacity` | 无引用库超过阈值时提示清理 |
136
137
  | `manual` | 不自动清理 |
137
138
 
139
+ ### 空间数据含义
140
+
141
+ - **实际占用**来自当前 Store 目录的磁盘测量。
142
+ - **登记容量**来自 StoreEntry 最近一次记录,可能与当前磁盘存在差异。
143
+ - **预计释放**在清理确认前按本次计划目标重新测量,包含同版本 `_shared`,且只计算一次。
144
+ - **项目依赖容量**按项目实际引用的平台和共享内容去重计算。
145
+ - **共享节省与下载容量**属于估算值;历史依据不足时显示容量未知。
146
+
147
+ `td check --json` 可以查看测量依据、结果质量和磁盘与登记容量差异。
148
+
149
+ 当检查发现登记容量过期、目录缺失、重复共享登记或未登记平台时,运行
150
+ `td calibrate` 统一处理。命令会更新容量、移除失效登记并合并重复共享记录;
151
+ 未登记平台只提供整体“暂不处理”或“删除无项目引用内容”两种选择,默认保留。
152
+ `td calibrate --dry-run` 完全只读,`td calibrate --yes` 使用默认保留策略并跳过确认。
153
+
138
154
  ## 工作原理
139
155
 
140
156
  ```
@@ -189,6 +205,8 @@ td projects --tree # 树状显示库引用关系
189
205
  td migrate /Volumes/Data/.tanmi-dock/store
190
206
  ```
191
207
 
208
+ 迁移要求目标目录为空。复制先进入专用暂存目录,保留符号链接并更新指向旧 Store 内部的绝对链接;验证通过后才切换配置和项目链接。进程中断后,再次运行 `td migrate` 会根据迁移日志继续执行。
209
+
192
210
  ## 更多文档
193
211
 
194
212
  - [CLI 完整文档](docs/CLI.md) - 所有命令的详细参数和示例
@@ -0,0 +1,10 @@
1
+ import { Command } from 'commander';
2
+ interface CalibrateOptions {
3
+ dryRun: boolean;
4
+ yes: boolean;
5
+ }
6
+ /** 执行一次空间校准。非 dry-run 调用方必须持有全局锁。 */
7
+ export declare function calibrateStore(options: CalibrateOptions): Promise<void>;
8
+ export declare function createCalibrateCommand(): Command;
9
+ export default createCalibrateCommand;
10
+ //# sourceMappingURL=calibrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calibrate.d.ts","sourceRoot":"","sources":["../../src/commands/calibrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,UAAU,gBAAgB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAgED,qCAAqC;AACrC,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F7E;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAehD;AAED,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,158 @@
1
+ import { Command } from 'commander';
2
+ import { ensureInitialized } from '../core/guard.js';
3
+ import * as config from '../core/config.js';
4
+ import { getRegistry } from '../core/registry.js';
5
+ import { SpaceService } from '../core/space/service.js';
6
+ import { formatSize } from '../utils/disk.js';
7
+ import { withGlobalLock } from '../utils/global-lock.js';
8
+ import { blank, debug, error, hint, info, separator, success, title, verboseJson, warn, } from '../utils/logger.js';
9
+ import { confirmAction, PROMPT_CANCELLED, selectOption } from '../utils/prompt.js';
10
+ function formatSignedSize(bytes) {
11
+ const sign = bytes > 0 ? '+' : bytes < 0 ? '-' : '';
12
+ return `${sign}${formatSize(Math.abs(bytes))}`;
13
+ }
14
+ function renderPlan(plan, choice) {
15
+ title('空间校准检查:');
16
+ info(` 登记容量变化 ${plan.summary.changedCount} 项,合计 ${formatSignedSize(plan.summary.changedDifferenceBytes)}`);
17
+ info(` 目录缺失 ${plan.summary.missingCount} 项,登记容量 ${formatSize(plan.summary.missingRegisteredBytes)}`);
18
+ info(` 重复共享登记 ${plan.summary.duplicateSharedCount} 项`);
19
+ info(` 未登记平台 ${plan.unregistered.totalCount} 项,合计 ${formatSize(plan.unregistered.totalBytes)}`);
20
+ if (plan.unregistered.protectedCount > 0) {
21
+ info(` 引用保护 ${plan.unregistered.protectedCount} 项`);
22
+ }
23
+ info(` 系统文件 ${plan.summary.ignoredArtifactCount} 项,将忽略并保留`);
24
+ blank();
25
+ if (choice === 'delete-unreferenced') {
26
+ info(`未登记平台处理: 删除 ${plan.unregistered.deletableCount} 项无项目引用内容,预计释放 ${formatSize(plan.unregistered.deletableBytes)}`);
27
+ }
28
+ else {
29
+ info('未登记平台处理: 暂不处理');
30
+ }
31
+ }
32
+ function hasMetadataActions(plan) {
33
+ return plan.actions.length > 0;
34
+ }
35
+ async function chooseUnregisteredAction(plan, options) {
36
+ if (plan.unregistered.totalCount === 0 || options.dryRun || options.yes)
37
+ return 'keep';
38
+ blank();
39
+ const choice = await selectOption('未登记平台如何处理?', [
40
+ {
41
+ name: '暂不处理',
42
+ value: 'keep',
43
+ description: `保留全部 ${plan.unregistered.totalCount} 项内容`,
44
+ },
45
+ {
46
+ name: '删除无项目引用的内容',
47
+ value: 'delete-unreferenced',
48
+ description: `删除 ${plan.unregistered.deletableCount} 项,保留 ${plan.unregistered.protectedCount} 项`,
49
+ },
50
+ ]);
51
+ if (choice === PROMPT_CANCELLED) {
52
+ info('已取消校准');
53
+ return null;
54
+ }
55
+ return choice;
56
+ }
57
+ /** 执行一次空间校准。非 dry-run 调用方必须持有全局锁。 */
58
+ export async function calibrateStore(options) {
59
+ debug(`[space] 校准命令输入: dryRun=${options.dryRun}, yes=${options.yes}, source=td-calibrate`);
60
+ const cfg = await config.load({ migrate: !options.dryRun });
61
+ if (!cfg)
62
+ throw new Error('配置文件不存在,请先运行 tanmi-dock init');
63
+ if (options.dryRun && config.checkConfigVersion(cfg) === 'migrate') {
64
+ throw new Error('配置需要迁移;dry-run 不会修改配置,请先运行一次普通命令完成迁移');
65
+ }
66
+ const registry = getRegistry();
67
+ await registry.load({ migrate: !options.dryRun });
68
+ const service = new SpaceService(registry, cfg.storePath);
69
+ const cleanupExecutor = service.createCleanupExecutor();
70
+ if (!options.dryRun) {
71
+ const recovered = await cleanupExecutor.recoverPending();
72
+ if (recovered > 0)
73
+ info(`恢复了 ${recovered} 个中断清理记录`);
74
+ }
75
+ else {
76
+ debug('[space] 校准 dry-run 跳过配置迁移、登记迁移、清理恢复和全局写锁');
77
+ }
78
+ info('扫描 Store 并核对登记数据...');
79
+ const snapshot = await service.buildSnapshot('audit');
80
+ const plan = service.buildCalibrationPlan(snapshot);
81
+ debug(`[space] 校准审计完成: plan=${plan.id}, snapshot=${snapshot.id}, changed=${plan.summary.changedCount}, changedDifference=${plan.summary.changedDifferenceBytes}, missing=${plan.summary.missingCount}, missingBytes=${plan.summary.missingRegisteredBytes}, duplicates=${plan.summary.duplicateSharedCount}, unregistered=${plan.unregistered.totalCount}, unregisteredBytes=${plan.unregistered.totalBytes}, deletable=${plan.unregistered.deletableCount}, protected=${plan.unregistered.protectedCount}, ignored=${plan.summary.ignoredArtifactCount}`);
82
+ verboseJson('[space] 校准计划 JSON', plan);
83
+ const choice = await chooseUnregisteredAction(plan, options);
84
+ if (!choice)
85
+ return;
86
+ blank();
87
+ renderPlan(plan, choice);
88
+ const willDelete = choice === 'delete-unreferenced' && plan.unregistered.deletableCount > 0;
89
+ if (!hasMetadataActions(plan) && !willDelete) {
90
+ if (plan.unregistered.totalCount > 0) {
91
+ success('登记数据无需调整,未登记平台按选择保留');
92
+ }
93
+ else {
94
+ success('空间登记与 Store 实际状态一致');
95
+ }
96
+ return;
97
+ }
98
+ if (options.dryRun) {
99
+ blank();
100
+ hint('dry-run 仅检查,不修改登记数据或 Store 内容');
101
+ return;
102
+ }
103
+ if (!options.yes) {
104
+ blank();
105
+ const confirmed = await confirmAction(`确认执行 ${plan.actions.length} 项登记校准${willDelete ? `并删除 ${plan.unregistered.deletableCount} 项未登记平台` : ''}?`, false);
106
+ if (confirmed === PROMPT_CANCELLED || !confirmed) {
107
+ info('已取消校准');
108
+ return;
109
+ }
110
+ }
111
+ blank();
112
+ separator();
113
+ info(`正在执行空间校准计划 ${plan.id}...`);
114
+ const result = await service.createCalibrationExecutor().execute(plan, {
115
+ deleteUnregistered: choice === 'delete-unreferenced',
116
+ });
117
+ const remainingPlan = service.buildCalibrationPlan(result.finalSnapshot);
118
+ blank();
119
+ const cleanupFailed = result.cleanup != null && result.cleanup.status !== 'completed';
120
+ if (cleanupFailed) {
121
+ warn(`空间校准部分完成: 更新 ${result.metadataActionCount} 项登记数据,未登记平台删除成功 ${result.cleanup.succeeded.length} 项、失败 ${result.cleanup.failed.length} 项`);
122
+ }
123
+ else {
124
+ success(`空间校准完成: 更新 ${result.metadataActionCount} 项登记数据`);
125
+ }
126
+ if (result.cleanup && !cleanupFailed) {
127
+ info(`未登记平台清理: 删除 ${result.cleanup.succeeded.length} 项,释放 ${formatSize(result.cleanup.released.bytes)}`);
128
+ }
129
+ if (remainingPlan.unregistered.totalCount > 0) {
130
+ info(`保留未登记平台: ${remainingPlan.unregistered.totalCount} 项`);
131
+ }
132
+ const remainingMetadataIssues = remainingPlan.actions.length;
133
+ if (remainingMetadataIssues > 0) {
134
+ warn(`重新检查仍发现 ${remainingMetadataIssues} 项登记差异,请查看详细日志`);
135
+ }
136
+ debug(`[space] 校准最终输出: plan=${plan.id}, finalSnapshot=${result.finalSnapshot.id}, remainingMetadata=${remainingMetadataIssues}, remainingUnregistered=${remainingPlan.unregistered.totalCount}, finalDifference=${result.finalSnapshot.totals.differenceBytes}`);
137
+ }
138
+ export function createCalibrateCommand() {
139
+ return new Command('calibrate')
140
+ .description('校准 Store 空间登记数据')
141
+ .option('--dry-run', '只检查并显示校准内容')
142
+ .option('--yes', '使用默认选项并跳过最终确认')
143
+ .action(async (options) => {
144
+ await ensureInitialized();
145
+ try {
146
+ if (options.dryRun)
147
+ await calibrateStore(options);
148
+ else
149
+ await withGlobalLock(() => calibrateStore(options));
150
+ }
151
+ catch (err) {
152
+ error(err.message);
153
+ process.exitCode = 1;
154
+ }
155
+ });
156
+ }
157
+ export default createCalibrateCommand;
158
+ //# sourceMappingURL=calibrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calibrate.js","sourceRoot":"","sources":["../../src/commands/calibrate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import type { CodepacEnvironmentCheck } from '../core/codepac.js';
3
+ import type { SpaceIssue, StoreSpaceTotals } from '../core/space/types.js';
3
4
  interface EnvironmentCheck {
4
5
  codepac: {
5
6
  ok: boolean;
@@ -56,7 +57,7 @@ interface IntegrityIssue {
56
57
  commit: string;
57
58
  platform: string;
58
59
  reason: string;
59
- kind?: 'integrity_mismatch' | 'shared_platform_conflict';
60
+ kind?: 'integrity_mismatch' | 'shared_platform_conflict' | 'missing_integrity_record';
60
61
  conflictPlatforms?: string[];
61
62
  expected: {
62
63
  fileCount?: number;
@@ -73,11 +74,18 @@ interface IntegrityIssue {
73
74
  interface CheckResult {
74
75
  environment: EnvironmentCheck;
75
76
  integrity: IntegrityIssue;
77
+ space: {
78
+ snapshotId?: string;
79
+ totals?: StoreSpaceTotals;
80
+ issues: SpaceIssue[];
81
+ error?: string;
82
+ };
76
83
  summary: {
77
84
  envErrors: number;
78
85
  envWarnings: number;
79
86
  integrityIssues: number;
80
87
  reclaimableSize: number;
88
+ spaceIssues: number;
81
89
  };
82
90
  }
83
91
  export declare function createCheckCommand(): Command;
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}