tanmi-dock 1.0.3 → 1.0.5-beta

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 (116) 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 +38 -4
  7. package/dist/commands/check.d.ts.map +1 -1
  8. package/dist/commands/check.js +704 -168
  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 +10 -6
  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 +17 -0
  47. package/dist/core/space/calibration-executor.d.ts.map +1 -0
  48. package/dist/core/space/calibration-executor.js +144 -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 +16 -0
  75. package/dist/core/space/inventory.d.ts.map +1 -0
  76. package/dist/core/space/inventory.js +610 -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 +248 -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 +7 -1
  110. package/dist/utils/logger.d.ts.map +1 -1
  111. package/dist/utils/logger.js +45 -5
  112. package/dist/utils/logger.js.map +1 -1
  113. package/dist/utils/prompt.d.ts.map +1 -1
  114. package/dist/utils/prompt.js +4 -4
  115. package/dist/utils/prompt.js.map +1 -1
  116. 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 { SpaceCalibrationPlan, SpaceIssue, SpaceSnapshotProgress, StoreSpaceTotals } from '../core/space/types.js';
3
4
  interface EnvironmentCheck {
4
5
  codepac: {
5
6
  ok: boolean;
@@ -33,6 +34,9 @@ interface IntegrityIssue {
33
34
  dep: {
34
35
  libName: string;
35
36
  commit: string;
37
+ platform: string;
38
+ linkedPath: string;
39
+ scope?: string;
36
40
  };
37
41
  }[];
38
42
  orphanLibraries: {
@@ -56,7 +60,7 @@ interface IntegrityIssue {
56
60
  commit: string;
57
61
  platform: string;
58
62
  reason: string;
59
- kind?: 'integrity_mismatch' | 'shared_platform_conflict';
63
+ kind?: 'integrity_mismatch' | 'shared_platform_conflict' | 'missing_integrity_record';
60
64
  conflictPlatforms?: string[];
61
65
  expected: {
62
66
  fileCount?: number;
@@ -73,21 +77,51 @@ interface IntegrityIssue {
73
77
  interface CheckResult {
74
78
  environment: EnvironmentCheck;
75
79
  integrity: IntegrityIssue;
80
+ space: {
81
+ snapshotId?: string;
82
+ totals?: StoreSpaceTotals;
83
+ issues: SpaceIssue[];
84
+ calibrationPlan?: SpaceCalibrationPlan;
85
+ error?: string;
86
+ };
76
87
  summary: {
77
88
  envErrors: number;
78
89
  envWarnings: number;
79
90
  integrityIssues: number;
91
+ uncachedDependencies: number;
80
92
  reclaimableSize: number;
93
+ spaceIssues: number;
81
94
  };
82
95
  }
96
+ interface CheckOptions {
97
+ fix: boolean;
98
+ dryRun: boolean;
99
+ json: boolean;
100
+ force: boolean;
101
+ integrity: boolean;
102
+ }
103
+ type CheckCollectionProgress = {
104
+ stage: 'environment' | 'integrity' | 'space';
105
+ state: 'started' | 'completed' | 'failed';
106
+ error?: string;
107
+ } | {
108
+ stage: 'space';
109
+ state: 'progress';
110
+ progress: SpaceSnapshotProgress;
111
+ };
112
+ interface CollectOptions {
113
+ integrity?: boolean;
114
+ readOnly?: boolean;
115
+ onProgress?: (progress: CheckCollectionProgress) => void;
116
+ }
83
117
  export declare function createCheckCommand(): Command;
84
118
  /**
85
119
  * 验证完整性(兼容旧 verify 命令)
86
120
  */
87
121
  export declare function verifyIntegrity(): Promise<void>;
88
- export declare function collectCheckResultForTest(options?: {
89
- integrity?: boolean;
90
- }): Promise<CheckResult>;
122
+ export declare function collectCheckResultForTest(options?: CollectOptions): Promise<CheckResult>;
123
+ export declare function runCheckForTest(options: CheckOptions): Promise<void>;
124
+ export declare function interactiveCheckForTest(result: CheckResult, options: CheckOptions): Promise<void>;
91
125
  /**
92
126
  * 修复问题(兼容旧 repair 命令)
93
127
  */
@@ -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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"}