@git.zone/tsdisk 1.1.0 → 1.3.0
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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/index.d.ts +7 -1
- package/dist_ts/index.js +6 -2
- package/dist_ts/tsdisk.cleanup.d.ts +26 -0
- package/dist_ts/tsdisk.cleanup.js +128 -0
- package/dist_ts/tsdisk.cli.d.ts +44 -8
- package/dist_ts/tsdisk.cli.js +247 -176
- package/dist_ts/tsdisk.plugins.d.ts +2 -2
- package/dist_ts/tsdisk.plugins.js +3 -3
- package/dist_ts/tsdisk.progress.d.ts +31 -0
- package/dist_ts/tsdisk.progress.js +64 -0
- package/dist_ts/tsdisk.scan.d.ts +22 -0
- package/dist_ts/tsdisk.scan.js +147 -0
- package/dist_ts/tsdisk.toolcaches.js +27 -9
- package/dist_ts/tsdisk.usage.d.ts +50 -0
- package/dist_ts/tsdisk.usage.js +194 -0
- package/package.json +4 -4
- package/readme.md +45 -20
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +9 -0
- package/ts/tsdisk.cleanup.ts +120 -0
- package/ts/tsdisk.cli.ts +216 -199
- package/ts/tsdisk.plugins.ts +2 -1
- package/ts/tsdisk.progress.ts +78 -0
- package/ts/tsdisk.scan.ts +151 -0
- package/ts/tsdisk.toolcaches.ts +28 -8
- package/ts/tsdisk.usage.ts +199 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tsdisk',
|
|
6
|
-
version: '1.
|
|
6
|
+
version: '1.3.0',
|
|
7
7
|
description: 'A disk usage diagnostic CLI for finding large files, caches, logs, and Docker storage.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHdGQUF3RjtDQUN0RyxDQUFBIn0=
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export { commitinfo } from './00_commitinfo_data.js';
|
|
2
|
-
export { formatBytes, main, parseDuOutput, runCli, } from './tsdisk.cli.js';
|
|
2
|
+
export { formatBytes, collectDiskReport, collectProjectToolCacheReport, diagnosticCommandComplete, main, parseDuOutput, runCli, } from './tsdisk.cli.js';
|
|
3
3
|
export * from './tsdisk.toolcaches.js';
|
|
4
|
+
export * from './tsdisk.scan.js';
|
|
5
|
+
export * from './tsdisk.cleanup.js';
|
|
6
|
+
export * from './tsdisk.usage.js';
|
|
7
|
+
export { DiskProgressReporter, estimateReclaimableSpace } from './tsdisk.progress.js';
|
|
8
|
+
export type { IDiskProgress, IReclaimEstimate } from './tsdisk.progress.js';
|
|
9
|
+
export type { IRuntimeContext, IDiagnosticSection } from './tsdisk.cli.js';
|
package/dist_ts/index.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export { commitinfo } from './00_commitinfo_data.js';
|
|
2
|
-
export { formatBytes, main, parseDuOutput, runCli, } from './tsdisk.cli.js';
|
|
2
|
+
export { formatBytes, collectDiskReport, collectProjectToolCacheReport, diagnosticCommandComplete, main, parseDuOutput, runCli, } from './tsdisk.cli.js';
|
|
3
3
|
export * from './tsdisk.toolcaches.js';
|
|
4
|
-
|
|
4
|
+
export * from './tsdisk.scan.js';
|
|
5
|
+
export * from './tsdisk.cleanup.js';
|
|
6
|
+
export * from './tsdisk.usage.js';
|
|
7
|
+
export { DiskProgressReporter, estimateReclaimableSpace } from './tsdisk.progress.js';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6QixJQUFJLEVBQ0osYUFBYSxFQUNiLE1BQU0sR0FDUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUMifQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type TCleanupCategory = 'rust' | 'docker' | 'pnpm';
|
|
2
|
+
export interface ICleanupAction {
|
|
3
|
+
category: TCleanupCategory;
|
|
4
|
+
cwd: string;
|
|
5
|
+
command: string;
|
|
6
|
+
previewArgs?: string[];
|
|
7
|
+
applyArgs: string[];
|
|
8
|
+
scope: string;
|
|
9
|
+
blocked?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ICleanupPlan {
|
|
12
|
+
dryRun: boolean;
|
|
13
|
+
actions: ICleanupAction[];
|
|
14
|
+
}
|
|
15
|
+
export interface ICliOptions {
|
|
16
|
+
command: 'diagnose' | 'scan' | 'cleanup' | 'help' | 'version';
|
|
17
|
+
roots: string[];
|
|
18
|
+
categories: TCleanupCategory[];
|
|
19
|
+
json: boolean;
|
|
20
|
+
apply: boolean;
|
|
21
|
+
yes: boolean;
|
|
22
|
+
days: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function parseCliOptions(args: string[]): ICliOptions;
|
|
25
|
+
/** Build project-scoped owner commands. No discovered marker authorizes deletion. */
|
|
26
|
+
export declare function createCleanupPlan(options: ICliOptions): Promise<ICleanupPlan>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import * as plugins from './tsdisk.plugins.js';
|
|
2
|
+
export function parseCliOptions(args) {
|
|
3
|
+
const options = { command: 'diagnose', roots: [], categories: ['rust', 'docker'], json: false, apply: false, yes: false, days: 14 };
|
|
4
|
+
let commandSeen = false;
|
|
5
|
+
let dryRun = false;
|
|
6
|
+
let cleanupOption = false;
|
|
7
|
+
for (let index = 0; index < args.length; index++) {
|
|
8
|
+
const arg = args[index];
|
|
9
|
+
if (arg === '--help' || arg === '-h') {
|
|
10
|
+
options.command = 'help';
|
|
11
|
+
return options;
|
|
12
|
+
}
|
|
13
|
+
if (arg === '--version' || arg === '-v') {
|
|
14
|
+
options.command = 'version';
|
|
15
|
+
return options;
|
|
16
|
+
}
|
|
17
|
+
if (arg === 'scan' || arg === 'cleanup') {
|
|
18
|
+
if (commandSeen)
|
|
19
|
+
throw new Error('Specify one command: scan or cleanup.');
|
|
20
|
+
options.command = arg;
|
|
21
|
+
commandSeen = true;
|
|
22
|
+
}
|
|
23
|
+
else if (arg === '--json')
|
|
24
|
+
options.json = true;
|
|
25
|
+
else if (arg === '--apply') {
|
|
26
|
+
options.apply = true;
|
|
27
|
+
cleanupOption = true;
|
|
28
|
+
}
|
|
29
|
+
else if (arg === '--yes' || arg === '-y') {
|
|
30
|
+
options.yes = true;
|
|
31
|
+
cleanupOption = true;
|
|
32
|
+
}
|
|
33
|
+
else if (arg === '--dry-run' || arg === '-n') {
|
|
34
|
+
dryRun = true;
|
|
35
|
+
cleanupOption = true;
|
|
36
|
+
}
|
|
37
|
+
else if (['--root', '--only', '--days'].some((flag) => arg === flag || arg.startsWith(`${flag}=`))) {
|
|
38
|
+
const separator = arg.indexOf('=');
|
|
39
|
+
const name = separator < 0 ? arg : arg.slice(0, separator);
|
|
40
|
+
const value = separator < 0 ? args[++index] : arg.slice(separator + 1);
|
|
41
|
+
if (!value || value.startsWith('--'))
|
|
42
|
+
throw new Error(`Missing value for ${name}.`);
|
|
43
|
+
if (name === '--root')
|
|
44
|
+
options.roots.push(plugins.path.resolve(value));
|
|
45
|
+
else if (name === '--only') {
|
|
46
|
+
cleanupOption = true;
|
|
47
|
+
const values = value.split(',');
|
|
48
|
+
if (values.some((category) => !['rust', 'docker', 'pnpm'].includes(category)))
|
|
49
|
+
throw new Error('Cleanup categories: rust,docker,pnpm.');
|
|
50
|
+
options.categories = [...new Set(values)];
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
cleanupOption = true;
|
|
54
|
+
options.days = Number(value);
|
|
55
|
+
if (!Number.isSafeInteger(options.days) || options.days < 1)
|
|
56
|
+
throw new Error('--days must be a positive integer.');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else
|
|
60
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
61
|
+
}
|
|
62
|
+
if (cleanupOption && options.command !== 'cleanup')
|
|
63
|
+
throw new Error('Cleanup options require the cleanup command.');
|
|
64
|
+
if (dryRun && options.apply)
|
|
65
|
+
throw new Error('--dry-run and --apply cannot be combined.');
|
|
66
|
+
if (options.yes && !options.apply)
|
|
67
|
+
throw new Error('--yes requires --apply.');
|
|
68
|
+
if (options.command === 'diagnose' && (options.roots.length || options.json))
|
|
69
|
+
options.command = 'scan';
|
|
70
|
+
options.roots = [...new Set(options.roots)];
|
|
71
|
+
return options;
|
|
72
|
+
}
|
|
73
|
+
/** Build project-scoped owner commands. No discovered marker authorizes deletion. */
|
|
74
|
+
export async function createCleanupPlan(options) {
|
|
75
|
+
if (options.command !== 'cleanup')
|
|
76
|
+
throw new Error('Cleanup command required.');
|
|
77
|
+
if (!Number.isSafeInteger(options.days) || options.days < 1)
|
|
78
|
+
throw new Error('Invalid retention period.');
|
|
79
|
+
if (!options.categories.length || options.categories.some((category) => !['rust', 'docker', 'pnpm'].includes(category)))
|
|
80
|
+
throw new Error('Invalid cleanup category.');
|
|
81
|
+
const plan = { dryRun: !options.apply, actions: [] };
|
|
82
|
+
for (const root of new Set(options.roots.length ? options.roots : [process.cwd()])) {
|
|
83
|
+
const cwd = plugins.path.resolve(root);
|
|
84
|
+
const stat = await plugins.fs.lstat(cwd);
|
|
85
|
+
if (!stat.isDirectory() || stat.isSymbolicLink() || await plugins.fs.realpath(cwd) !== cwd || cwd === plugins.path.parse(cwd).root) {
|
|
86
|
+
throw new Error(`Cleanup requires a real project directory: ${cwd}`);
|
|
87
|
+
}
|
|
88
|
+
// Running project-installed tools as root would grant project code host-wide authority.
|
|
89
|
+
if (process.getuid?.() === 0)
|
|
90
|
+
throw new Error('Run cleanup as the project owner, without sudo.');
|
|
91
|
+
if (process.getuid && stat.uid !== process.getuid())
|
|
92
|
+
throw new Error(`Cleanup root is not owned by the current user: ${cwd}`);
|
|
93
|
+
for (const category of new Set(options.categories)) {
|
|
94
|
+
if (category === 'pnpm') {
|
|
95
|
+
plan.actions.push({ category, cwd, command: 'pnpm', applyArgs: ['store', 'prune'], scope: 'Prune unreferenced packages from the pnpm store configured for this project. The store may be shared. pnpm provides no prune dry-run.' });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const binary = category === 'rust' ? 'tsrust' : 'tsdocker';
|
|
99
|
+
const command = plugins.path.join(cwd, 'node_modules', '.bin', binary);
|
|
100
|
+
const args = category === 'rust' ? ['prune', '--days', String(options.days)] : ['prune'];
|
|
101
|
+
const action = {
|
|
102
|
+
category, cwd, command, previewArgs: args, applyArgs: [...args, '--apply'],
|
|
103
|
+
scope: category === 'rust'
|
|
104
|
+
? `Project's marked managed Rust targets; newest-file retention ${options.days} days, revalidated by tsrust.`
|
|
105
|
+
: 'Project registry caches and tsdocker-owned abandoned containers in the current Docker context; container scope may include other projects. tsdocker revalidates owner identity and active mounts.',
|
|
106
|
+
};
|
|
107
|
+
try {
|
|
108
|
+
await plugins.fs.access(command, plugins.constants.X_OK);
|
|
109
|
+
const packagePath = plugins.path.join(cwd, 'node_modules', '@git.zone', binary, 'package.json');
|
|
110
|
+
const manifest = JSON.parse(await plugins.fs.readFile(packagePath, 'utf8'));
|
|
111
|
+
if (manifest.name !== `@git.zone/${binary}`)
|
|
112
|
+
throw new Error('Unexpected owning package.');
|
|
113
|
+
const version = /^(\d+)\.(\d+)\.(\d+)$/.exec(manifest.version ?? '')?.slice(1).map(Number);
|
|
114
|
+
const minimum = category === 'docker' ? [3, 6, 0] : [1, 13, 2];
|
|
115
|
+
const different = version?.findIndex((part, index) => part !== minimum[index]);
|
|
116
|
+
if (!version || (different !== undefined && different !== -1 && version[different] < minimum[different])) {
|
|
117
|
+
action.blocked = `@git.zone/${binary} ${minimum.join('.')} or later is required for the documented prune contract.`;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
action.blocked = `Install a current @git.zone/${binary} in this project before cleanup. No tool is downloaded automatically.`;
|
|
122
|
+
}
|
|
123
|
+
plan.actions.push(action);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return plan;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkaXNrLmNsZWFudXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c2Rpc2suY2xlYW51cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBNkIvQyxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWM7SUFDNUMsTUFBTSxPQUFPLEdBQWdCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakosSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDMUIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQUMsT0FBTyxPQUFPLENBQUM7UUFBQyxDQUFDO1FBQ25GLElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFBQyxPQUFPLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztZQUFDLE9BQU8sT0FBTyxDQUFDO1FBQUMsQ0FBQztRQUN6RixJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFD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
|
package/dist_ts/tsdisk.cli.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
import { type IWorkspaceScanOptions, type IScanIssue } from './tsdisk.scan.js';
|
|
2
|
+
import { type IUsageReport } from './tsdisk.usage.js';
|
|
3
|
+
import { type IDiskProgress } from './tsdisk.progress.js';
|
|
4
|
+
export { formatBytes } from './tsdisk.progress.js';
|
|
5
|
+
export type { IWorkspaceScanOptions } from './tsdisk.scan.js';
|
|
1
6
|
import { type IToolCacheFinding } from './tsdisk.toolcaches.js';
|
|
7
|
+
interface ICommandResult {
|
|
8
|
+
code: number;
|
|
9
|
+
stdout: string;
|
|
10
|
+
stderr: string;
|
|
11
|
+
truncated?: boolean;
|
|
12
|
+
}
|
|
2
13
|
export interface IRuntimeContext {
|
|
14
|
+
onProgress?: (progress: Partial<IDiskProgress>) => void;
|
|
3
15
|
runningAsRoot: boolean;
|
|
4
16
|
sudoAvailable: boolean;
|
|
5
17
|
sudoChecked: boolean;
|
|
@@ -15,15 +27,39 @@ interface IDuEntry {
|
|
|
15
27
|
bytes: number;
|
|
16
28
|
path: string;
|
|
17
29
|
}
|
|
18
|
-
export interface IWorkspaceScanOptions {
|
|
19
|
-
maxDepth: number;
|
|
20
|
-
timeoutMs: number;
|
|
21
|
-
maxEntries: number;
|
|
22
|
-
}
|
|
23
|
-
export declare function formatBytes(bytes: number): string;
|
|
24
30
|
export declare function parseDuOutput(output: string): IDuEntry[];
|
|
25
|
-
export declare function collectToolCachePathsFromRoot(
|
|
31
|
+
export declare function collectToolCachePathsFromRoot(root: string, options: IWorkspaceScanOptions): Promise<IToolCacheFinding[]>;
|
|
32
|
+
export declare function collectProjectToolCacheReport(ctx: IRuntimeContext, roots?: string[]): Promise<{
|
|
33
|
+
roots: string[];
|
|
34
|
+
toolCaches: IToolCacheFinding[];
|
|
35
|
+
usagePriorityPaths: string[];
|
|
36
|
+
issues: IScanIssue[];
|
|
37
|
+
issueCounts: Partial<Record<"timeout" | "read-error" | "invalid-marker" | "depth-limit" | "entry-limit" | "mount-boundary" | "symlink" | "size-unavailable", number>>;
|
|
38
|
+
complete: boolean;
|
|
39
|
+
}>;
|
|
26
40
|
export declare function collectProjectToolCacheDiagnostics(ctx: IRuntimeContext): Promise<IToolCacheFinding[]>;
|
|
27
41
|
export declare function main(): Promise<void>;
|
|
42
|
+
export interface IDiagnosticSection {
|
|
43
|
+
name: string;
|
|
44
|
+
kind?: 'command' | 'derived';
|
|
45
|
+
derivedFrom?: 'usage.entries';
|
|
46
|
+
command: string;
|
|
47
|
+
args: string[];
|
|
48
|
+
result: ICommandResult;
|
|
49
|
+
complete: boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare function diagnosticCommandComplete(command: string, result: ICommandResult): boolean;
|
|
52
|
+
export declare function collectDiskReport(ctx: IRuntimeContext, roots?: string[]): Promise<{
|
|
53
|
+
usage: IUsageReport;
|
|
54
|
+
reclaim: import("./tsdisk.progress.js").IReclaimEstimate;
|
|
55
|
+
sections: IDiagnosticSection[];
|
|
56
|
+
complete: boolean;
|
|
57
|
+
roots: string[];
|
|
58
|
+
toolCaches: IToolCacheFinding[];
|
|
59
|
+
usagePriorityPaths: string[];
|
|
60
|
+
issues: IScanIssue[];
|
|
61
|
+
issueCounts: Partial<Record<"timeout" | "read-error" | "invalid-marker" | "depth-limit" | "entry-limit" | "mount-boundary" | "symlink" | "size-unavailable", number>>;
|
|
62
|
+
schemaVersion: number;
|
|
63
|
+
generatedAt: string;
|
|
64
|
+
}>;
|
|
28
65
|
export declare function runCli(args?: string[]): Promise<void>;
|
|
29
|
-
export {};
|