@amirdaraee/namewise 0.5.5 → 0.6.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/CHANGELOG.md +70 -19
- package/README.md +128 -115
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +46 -27
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/rename.d.ts +3 -0
- package/dist/cli/rename.d.ts.map +1 -1
- package/dist/cli/rename.js +73 -30
- package/dist/cli/rename.js.map +1 -1
- package/dist/cli/undo.d.ts +4 -0
- package/dist/cli/undo.d.ts.map +1 -0
- package/dist/cli/undo.js +66 -0
- package/dist/cli/undo.js.map +1 -0
- package/dist/services/file-renamer.d.ts +1 -1
- package/dist/services/file-renamer.d.ts.map +1 -1
- package/dist/services/file-renamer.js +60 -30
- package/dist/services/file-renamer.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config-loader.d.ts +16 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +25 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/history.d.ts +13 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js +21 -0
- package/dist/utils/history.js.map +1 -0
- package/package.json +1 -1
- package/RELEASE.md +0 -167
package/dist/cli/commands.js
CHANGED
|
@@ -1,36 +1,42 @@
|
|
|
1
1
|
import { renameFiles } from './rename.js';
|
|
2
|
+
import { undoRename } from './undo.js';
|
|
2
3
|
export function setupCommands(program) {
|
|
3
4
|
program
|
|
4
5
|
.command('rename')
|
|
5
6
|
.description('🚀 Rename files in a directory based on their content using AI analysis')
|
|
6
7
|
.argument('[directory]', 'Directory containing files to rename (default: current directory)', '.')
|
|
7
|
-
.option('-p, --provider <provider>', 'AI provider
|
|
8
|
-
.option('-k, --api-key <key>', 'API key for cloud providers (or set CLAUDE_API_KEY/OPENAI_API_KEY)')
|
|
9
|
-
.option('-c, --case <convention>', 'Naming convention
|
|
10
|
-
.option('-t, --template <category>', 'File category
|
|
11
|
-
.option('-n, --name <personalName>', 'Personal name
|
|
12
|
-
.option('-d, --date <format>', 'Date format
|
|
13
|
-
.option('--dry-run', 'Preview changes without
|
|
14
|
-
.option('--max-size <size>', 'Maximum file size in MB
|
|
15
|
-
.option('--base-url <url>', 'Base URL for local LLM providers
|
|
16
|
-
.option('--model <name>', 'Model name for local LLM providers
|
|
8
|
+
.option('-p, --provider <provider>', 'AI provider: claude|openai|ollama|lmstudio (default: claude)')
|
|
9
|
+
.option('-k, --api-key <key>', 'API key for cloud providers (or set CLAUDE_API_KEY/ANTHROPIC_API_KEY/OPENAI_API_KEY)')
|
|
10
|
+
.option('-c, --case <convention>', 'Naming convention: kebab-case|snake_case|camelCase|PascalCase|lowercase|UPPERCASE (default: kebab-case)')
|
|
11
|
+
.option('-t, --template <category>', 'File category: document|movie|music|series|photo|book|general|auto (default: general)')
|
|
12
|
+
.option('-n, --name <personalName>', 'Personal name for document/photo templates')
|
|
13
|
+
.option('-d, --date <format>', 'Date format: YYYY-MM-DD|YYYY|YYYYMMDD|none (default: none)')
|
|
14
|
+
.option('--dry-run', 'Preview changes without renaming files (RECOMMENDED first!)', false)
|
|
15
|
+
.option('--max-size <size>', 'Maximum file size in MB (default: 10)')
|
|
16
|
+
.option('--base-url <url>', 'Base URL for local LLM providers')
|
|
17
|
+
.option('--model <name>', 'Model name for local LLM providers')
|
|
18
|
+
.option('-r, --recursive', 'Recursively scan subdirectories', false)
|
|
19
|
+
.option('--depth <n>', 'Maximum recursion depth when using --recursive')
|
|
20
|
+
.option('--concurrency <n>', 'Files to process in parallel (default: 3)')
|
|
21
|
+
.option('--output <path>', 'Save rename report as JSON to this path')
|
|
17
22
|
.addHelpText('after', `
|
|
18
23
|
|
|
19
24
|
🔍 How it works:
|
|
20
|
-
1.
|
|
21
|
-
2.
|
|
22
|
-
3.
|
|
23
|
-
4.
|
|
24
|
-
5.
|
|
25
|
-
6.
|
|
25
|
+
1. Loads settings from ~/.namewise.json and <dir>/.namewise.json (CLI flags override)
|
|
26
|
+
2. Scans directory for supported files (PDF, DOCX, XLSX, TXT, MD, RTF)
|
|
27
|
+
3. Extracts content and metadata from each file
|
|
28
|
+
4. For scanned PDFs with no text, converts to image for AI vision analysis
|
|
29
|
+
5. Uses AI to analyze content and generate descriptive names
|
|
30
|
+
6. Applies your chosen template and naming convention
|
|
31
|
+
7. Renames files (or shows preview with --dry-run)
|
|
32
|
+
8. Saves session to ~/.namewise/history.json for later undo
|
|
26
33
|
|
|
27
34
|
💡 Pro Tips:
|
|
28
35
|
• Always use --dry-run first to preview changes
|
|
29
|
-
• Use
|
|
30
|
-
•
|
|
31
|
-
•
|
|
32
|
-
• Set API keys as environment variables
|
|
33
|
-
• Local LLMs (Ollama/LMStudio) require running servers first
|
|
36
|
+
• Use --recursive to process nested folders
|
|
37
|
+
• Set common options in ~/.namewise.json to avoid repeating flags
|
|
38
|
+
• Use namewise undo to reverse the last rename session
|
|
39
|
+
• Set API keys as environment variables: ANTHROPIC_API_KEY or OPENAI_API_KEY
|
|
34
40
|
|
|
35
41
|
🖥️ Local LLM Setup:
|
|
36
42
|
• Ollama: Start with 'ollama serve' (default: http://localhost:11434)
|
|
@@ -41,8 +47,11 @@ export function setupCommands(program) {
|
|
|
41
47
|
namewise rename --dry-run
|
|
42
48
|
namewise rename --provider claude --template document --name "alice"
|
|
43
49
|
|
|
44
|
-
#
|
|
45
|
-
namewise rename ./
|
|
50
|
+
# Recursive with depth limit
|
|
51
|
+
namewise rename ./projects --recursive --depth 2 --dry-run
|
|
52
|
+
|
|
53
|
+
# With concurrency and report output
|
|
54
|
+
namewise rename ./documents --concurrency 5 --output ./report.json
|
|
46
55
|
|
|
47
56
|
# Cloud providers (require API keys)
|
|
48
57
|
namewise rename ./docs --provider claude --template document --name "alice"
|
|
@@ -50,14 +59,24 @@ export function setupCommands(program) {
|
|
|
50
59
|
|
|
51
60
|
# Local LLMs (no API key needed)
|
|
52
61
|
namewise rename --provider ollama --model llama3.1 --dry-run
|
|
53
|
-
namewise rename ./documents --provider ollama --model llama3.1
|
|
54
62
|
namewise rename ./contracts --provider lmstudio --base-url http://localhost:1234
|
|
55
|
-
|
|
56
|
-
# Custom Ollama setup
|
|
57
|
-
namewise rename ./files --provider ollama --base-url http://192.168.1.100:11434 --model codellama
|
|
58
63
|
`)
|
|
59
64
|
.action(async (directory, options) => {
|
|
60
65
|
await renameFiles(directory, options);
|
|
61
66
|
});
|
|
67
|
+
program
|
|
68
|
+
.command('undo')
|
|
69
|
+
.description('↩️ Undo the most recent rename session')
|
|
70
|
+
.argument('[session-id]', 'Session ID to undo (use --list to see IDs)')
|
|
71
|
+
.option('--list', 'List recent rename sessions with their IDs')
|
|
72
|
+
.action(async (sessionId, options) => {
|
|
73
|
+
try {
|
|
74
|
+
await undoRename(sessionId, { list: options.list });
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
62
81
|
}
|
|
63
82
|
//# sourceMappingURL=commands.js.map
|
package/dist/cli/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yEAAyE,CAAC;SACtF,QAAQ,CAAC,aAAa,EAAE,mEAAmE,EAAE,GAAG,CAAC;SACjG,MAAM,CAAC,2BAA2B,EAAE,8DAA8D,CAAC;SACnG,MAAM,CAAC,qBAAqB,EAAE,sFAAsF,CAAC;SACrH,MAAM,CAAC,yBAAyB,EAAE,yGAAyG,CAAC;SAC5I,MAAM,CAAC,2BAA2B,EAAE,uFAAuF,CAAC;SAC5H,MAAM,CAAC,2BAA2B,EAAE,4CAA4C,CAAC;SACjF,MAAM,CAAC,qBAAqB,EAAE,4DAA4D,CAAC;SAC3F,MAAM,CAAC,WAAW,EAAE,6DAA6D,EAAE,KAAK,CAAC;SACzF,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;SACpE,MAAM,CAAC,kBAAkB,EAAE,kCAAkC,CAAC;SAC9D,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC;SAC9D,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,EAAE,KAAK,CAAC;SACnE,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;SACxE,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;SACpE,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCzB,CAAC;SACG,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QACnC,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,cAAc,EAAE,4CAA4C,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli/rename.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
+
import { FileInfo } from '../types/index.js';
|
|
1
2
|
export declare function renameFiles(directory: string, options: any): Promise<void>;
|
|
3
|
+
declare function getFilesToProcess(directory: string, supportedExtensions: string[], recursive?: boolean, maxDepth?: number, _currentDepth?: number): Promise<FileInfo[]>;
|
|
4
|
+
export { getFilesToProcess as getFilesToProcessForTest };
|
|
2
5
|
//# sourceMappingURL=rename.d.ts.map
|
package/dist/cli/rename.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAkD,MAAM,mBAAmB,CAAC;AAO7F,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IhF;AAED,iBAAe,iBAAiB,CAC9B,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,SAAS,GAAE,OAAe,EAC1B,QAAQ,GAAE,MAAiB,EAC3B,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAsCrB;AAGD,OAAO,EAAE,iBAAiB,IAAI,wBAAwB,EAAE,CAAC"}
|
package/dist/cli/rename.js
CHANGED
|
@@ -4,6 +4,8 @@ import inquirer from 'inquirer';
|
|
|
4
4
|
import { DocumentParserFactory } from '../parsers/factory.js';
|
|
5
5
|
import { AIServiceFactory } from '../services/ai-factory.js';
|
|
6
6
|
import { FileRenamer } from '../services/file-renamer.js';
|
|
7
|
+
import { loadConfig } from '../utils/config-loader.js';
|
|
8
|
+
import { appendHistory } from '../utils/history.js';
|
|
7
9
|
export async function renameFiles(directory, options) {
|
|
8
10
|
try {
|
|
9
11
|
// Validate directory exists
|
|
@@ -11,15 +13,19 @@ export async function renameFiles(directory, options) {
|
|
|
11
13
|
if (!stats.isDirectory()) {
|
|
12
14
|
throw new Error(`${directory} is not a directory`);
|
|
13
15
|
}
|
|
16
|
+
// Load cascading config file (project overrides user-home)
|
|
17
|
+
const fileConfig = await loadConfig(directory);
|
|
18
|
+
// Resolve provider (CLI flag > config file > default)
|
|
19
|
+
const provider = (options.provider ?? fileConfig.provider ?? 'claude');
|
|
14
20
|
// Get API key for cloud providers only
|
|
15
21
|
let apiKey = options.apiKey;
|
|
16
|
-
const requiresApiKey = ['claude', 'openai'].includes(
|
|
22
|
+
const requiresApiKey = ['claude', 'openai'].includes(provider);
|
|
17
23
|
if (requiresApiKey && !apiKey) {
|
|
18
24
|
// Check environment variables first
|
|
19
|
-
if (
|
|
20
|
-
apiKey = process.env.CLAUDE_API_KEY;
|
|
25
|
+
if (provider === 'claude' && (process.env.CLAUDE_API_KEY ?? process.env.ANTHROPIC_API_KEY)) {
|
|
26
|
+
apiKey = process.env.CLAUDE_API_KEY ?? process.env.ANTHROPIC_API_KEY;
|
|
21
27
|
}
|
|
22
|
-
else if (
|
|
28
|
+
else if (provider === 'openai' && process.env.OPENAI_API_KEY) {
|
|
23
29
|
apiKey = process.env.OPENAI_API_KEY;
|
|
24
30
|
}
|
|
25
31
|
else {
|
|
@@ -27,38 +33,41 @@ export async function renameFiles(directory, options) {
|
|
|
27
33
|
{
|
|
28
34
|
type: 'password',
|
|
29
35
|
name: 'apiKey',
|
|
30
|
-
message: `Enter your ${
|
|
36
|
+
message: `Enter your ${provider} API key:`,
|
|
31
37
|
mask: '*'
|
|
32
38
|
}
|
|
33
39
|
]);
|
|
34
40
|
apiKey = keyPrompt.apiKey;
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
|
-
// Create config
|
|
43
|
+
// Create config (CLI flags override file config which overrides defaults)
|
|
38
44
|
const config = {
|
|
39
|
-
aiProvider:
|
|
45
|
+
aiProvider: provider,
|
|
40
46
|
apiKey,
|
|
41
|
-
maxFileSize: parseInt(options.maxSize) * 1024 * 1024,
|
|
42
|
-
supportedExtensions: ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.txt'],
|
|
43
|
-
dryRun: options.dryRun,
|
|
44
|
-
namingConvention: options.case,
|
|
47
|
+
maxFileSize: parseInt(options.maxSize ?? String(fileConfig.maxSize ?? '10')) * 1024 * 1024,
|
|
48
|
+
supportedExtensions: ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.txt', '.md', '.rtf'],
|
|
49
|
+
dryRun: options.dryRun ?? false,
|
|
50
|
+
namingConvention: (options.case ?? fileConfig.case ?? 'kebab-case'),
|
|
45
51
|
templateOptions: {
|
|
46
|
-
category: options.template,
|
|
47
|
-
personalName: options.name,
|
|
48
|
-
dateFormat: options.date
|
|
52
|
+
category: (options.template ?? fileConfig.template ?? 'general'),
|
|
53
|
+
personalName: options.name ?? fileConfig.name,
|
|
54
|
+
dateFormat: (options.date ?? fileConfig.date ?? 'none')
|
|
49
55
|
},
|
|
50
|
-
// Local LLM specific configuration
|
|
51
56
|
localLLMConfig: {
|
|
52
|
-
baseUrl: options.baseUrl,
|
|
53
|
-
model: options.model
|
|
54
|
-
}
|
|
57
|
+
baseUrl: options.baseUrl ?? fileConfig.baseUrl,
|
|
58
|
+
model: options.model ?? fileConfig.model
|
|
59
|
+
},
|
|
60
|
+
recursive: options.recursive ?? fileConfig.recursive ?? false,
|
|
61
|
+
depth: options.depth !== undefined ? parseInt(options.depth) : fileConfig.depth,
|
|
62
|
+
concurrency: parseInt(options.concurrency ?? String(fileConfig.concurrency ?? '3')),
|
|
63
|
+
outputPath: options.output ?? fileConfig.output
|
|
55
64
|
};
|
|
56
65
|
// Initialize services
|
|
57
66
|
const parserFactory = new DocumentParserFactory(config);
|
|
58
67
|
const aiService = AIServiceFactory.create(config.aiProvider, apiKey, config.localLLMConfig);
|
|
59
68
|
const fileRenamer = new FileRenamer(parserFactory, aiService, config);
|
|
60
69
|
// Get files to process
|
|
61
|
-
const files = await getFilesToProcess(directory, config.supportedExtensions);
|
|
70
|
+
const files = await getFilesToProcess(directory, config.supportedExtensions, config.recursive ?? false, config.depth ?? Infinity);
|
|
62
71
|
if (files.length === 0) {
|
|
63
72
|
console.log('No supported files found in the directory.');
|
|
64
73
|
return;
|
|
@@ -85,38 +94,70 @@ export async function renameFiles(directory, options) {
|
|
|
85
94
|
const results = await fileRenamer.renameFiles(files);
|
|
86
95
|
// Display results
|
|
87
96
|
displayResults(results, config.dryRun);
|
|
97
|
+
// Save session to history (~/.namewise/history.json)
|
|
98
|
+
const successfulRenames = results
|
|
99
|
+
.filter(r => r.success && r.originalPath !== r.newPath)
|
|
100
|
+
.map(r => ({ originalPath: r.originalPath, newPath: r.newPath }));
|
|
101
|
+
await appendHistory({
|
|
102
|
+
id: new Date().toISOString(),
|
|
103
|
+
timestamp: new Date().toISOString(),
|
|
104
|
+
directory: path.resolve(directory),
|
|
105
|
+
dryRun: config.dryRun,
|
|
106
|
+
renames: successfulRenames
|
|
107
|
+
});
|
|
108
|
+
// Write JSON report if --output was provided
|
|
109
|
+
if (config.outputPath) {
|
|
110
|
+
const report = {
|
|
111
|
+
timestamp: new Date().toISOString(),
|
|
112
|
+
directory: path.resolve(directory),
|
|
113
|
+
dryRun: config.dryRun,
|
|
114
|
+
summary: {
|
|
115
|
+
total: results.length,
|
|
116
|
+
succeeded: results.filter(r => r.success).length,
|
|
117
|
+
failed: results.filter(r => !r.success).length
|
|
118
|
+
},
|
|
119
|
+
results
|
|
120
|
+
};
|
|
121
|
+
try {
|
|
122
|
+
await fs.writeFile(config.outputPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
123
|
+
console.log(`📄 Report saved to: ${config.outputPath}`);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
console.warn(`⚠️ Failed to write report: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
88
129
|
}
|
|
89
130
|
catch (error) {
|
|
90
131
|
console.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
91
132
|
process.exit(1);
|
|
92
133
|
}
|
|
93
134
|
}
|
|
94
|
-
async function getFilesToProcess(directory, supportedExtensions) {
|
|
135
|
+
async function getFilesToProcess(directory, supportedExtensions, recursive = false, maxDepth = Infinity, _currentDepth = 0) {
|
|
95
136
|
const files = [];
|
|
96
137
|
const entries = await fs.readdir(directory, { withFileTypes: true });
|
|
97
138
|
for (const entry of entries) {
|
|
98
|
-
|
|
99
|
-
|
|
139
|
+
const entryPath = path.join(directory, entry.name);
|
|
140
|
+
if (entry.isDirectory() && recursive && _currentDepth < maxDepth) {
|
|
141
|
+
const subFiles = await getFilesToProcess(entryPath, supportedExtensions, recursive, maxDepth, _currentDepth + 1);
|
|
142
|
+
files.push(...subFiles);
|
|
143
|
+
}
|
|
144
|
+
else if (entry.isFile()) {
|
|
100
145
|
const extension = path.extname(entry.name).toLowerCase();
|
|
101
146
|
if (supportedExtensions.includes(extension)) {
|
|
102
|
-
const stats = await fs.stat(
|
|
103
|
-
// Extract folder context
|
|
147
|
+
const stats = await fs.stat(entryPath);
|
|
104
148
|
const parentFolder = path.basename(directory);
|
|
105
|
-
const fullPath = path.resolve(
|
|
149
|
+
const fullPath = path.resolve(entryPath);
|
|
106
150
|
const folderPath = path.dirname(fullPath).split(path.sep).filter(p => p);
|
|
107
151
|
files.push({
|
|
108
|
-
path:
|
|
152
|
+
path: entryPath,
|
|
109
153
|
name: entry.name,
|
|
110
154
|
extension,
|
|
111
155
|
size: stats.size,
|
|
112
|
-
// File system metadata
|
|
113
156
|
createdAt: stats.birthtime,
|
|
114
157
|
modifiedAt: stats.mtime,
|
|
115
158
|
accessedAt: stats.atime,
|
|
116
|
-
// Context metadata
|
|
117
159
|
parentFolder,
|
|
118
|
-
folderPath: folderPath.slice(-3),
|
|
119
|
-
// Document metadata will be populated by parsers
|
|
160
|
+
folderPath: folderPath.slice(-3),
|
|
120
161
|
documentMetadata: undefined
|
|
121
162
|
});
|
|
122
163
|
}
|
|
@@ -124,6 +165,8 @@ async function getFilesToProcess(directory, supportedExtensions) {
|
|
|
124
165
|
}
|
|
125
166
|
return files;
|
|
126
167
|
}
|
|
168
|
+
// Exported for integration testing only
|
|
169
|
+
export { getFilesToProcess as getFilesToProcessForTest };
|
|
127
170
|
function displayResults(results, dryRun) {
|
|
128
171
|
const successful = results.filter(r => r.success);
|
|
129
172
|
const failed = results.filter(r => !r.success);
|
package/dist/cli/rename.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../../src/cli/undo.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAC9B,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|
package/dist/cli/undo.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { readHistory, appendHistory } from '../utils/history.js';
|
|
4
|
+
export async function undoRename(sessionId, options = {}) {
|
|
5
|
+
if (options.list) {
|
|
6
|
+
const history = await readHistory();
|
|
7
|
+
const recent = history.slice(-10).reverse();
|
|
8
|
+
if (recent.length === 0) {
|
|
9
|
+
console.log('No rename history found.');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
console.log('Recent rename sessions:');
|
|
13
|
+
recent.forEach(entry => {
|
|
14
|
+
const label = entry.dryRun ? ' [dry-run]' : '';
|
|
15
|
+
console.log(` ${entry.id}${label} — ${entry.renames.length} file(s) in ${entry.directory}`);
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const history = await readHistory();
|
|
20
|
+
let entry;
|
|
21
|
+
if (sessionId) {
|
|
22
|
+
entry = history.find(e => e.id === sessionId);
|
|
23
|
+
if (!entry)
|
|
24
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
entry = [...history].reverse().find(e => !e.dryRun);
|
|
28
|
+
if (!entry) {
|
|
29
|
+
console.log('No undo-able rename sessions found.');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (entry.dryRun) {
|
|
34
|
+
console.log(`Session ${entry.id} was a dry run — nothing to undo.`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const reversed = [...entry.renames].reverse();
|
|
38
|
+
let succeeded = 0;
|
|
39
|
+
let skipped = 0;
|
|
40
|
+
for (const rename of reversed) {
|
|
41
|
+
try {
|
|
42
|
+
await fs.access(rename.newPath);
|
|
43
|
+
await fs.rename(rename.newPath, rename.originalPath);
|
|
44
|
+
console.log(`✅ Restored: ${path.basename(rename.newPath)} → ${path.basename(rename.originalPath)}`);
|
|
45
|
+
succeeded++;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error.code === 'ENOENT') {
|
|
49
|
+
console.warn(`⚠️ Skipped: ${path.basename(rename.newPath)} not found`);
|
|
50
|
+
skipped++;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
await appendHistory({
|
|
58
|
+
id: new Date().toISOString(),
|
|
59
|
+
timestamp: new Date().toISOString(),
|
|
60
|
+
directory: entry.directory,
|
|
61
|
+
dryRun: false,
|
|
62
|
+
renames: reversed.map(r => ({ originalPath: r.newPath, newPath: r.originalPath }))
|
|
63
|
+
});
|
|
64
|
+
console.log(`\nUndo complete: ${succeeded} restored, ${skipped} skipped.`);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=undo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo.js","sourceRoot":"","sources":["../../src/cli/undo.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,6 @@ export declare class FileRenamer {
|
|
|
7
7
|
constructor(parserFactory: DocumentParserFactory, aiService: AIProvider, config: Config);
|
|
8
8
|
renameFiles(files: FileInfo[]): Promise<RenameResult[]>;
|
|
9
9
|
private renameFile;
|
|
10
|
-
private
|
|
10
|
+
private resolveConflict;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=file-renamer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-renamer.d.ts","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,qBAAa,WAAW;IAEpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;gBAFN,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,MAAM;IAGlB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"file-renamer.d.ts","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,qBAAa,WAAW;IAEpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;gBAFN,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,MAAM;IAGlB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAkE/C,UAAU;YAmEV,eAAe;CAuB9B"}
|
|
@@ -11,34 +11,55 @@ export class FileRenamer {
|
|
|
11
11
|
this.config = config;
|
|
12
12
|
}
|
|
13
13
|
async renameFiles(files) {
|
|
14
|
-
const results =
|
|
14
|
+
const results = new Array(files.length);
|
|
15
|
+
const concurrency = this.config.concurrency ?? 3;
|
|
16
|
+
let completedCount = 0;
|
|
15
17
|
let lastProgressLength = 0;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
let progressChain = Promise.resolve();
|
|
19
|
+
let active = 0;
|
|
20
|
+
const pending = [];
|
|
21
|
+
const acquire = () => {
|
|
22
|
+
if (active < concurrency) {
|
|
23
|
+
active++;
|
|
24
|
+
return Promise.resolve();
|
|
25
|
+
}
|
|
26
|
+
return new Promise(resolve => pending.push(resolve));
|
|
27
|
+
};
|
|
28
|
+
const release = () => {
|
|
29
|
+
active--;
|
|
30
|
+
if (pending.length > 0) {
|
|
31
|
+
active++;
|
|
32
|
+
pending.shift()();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
await Promise.all(files.map(async (file, index) => {
|
|
36
|
+
await acquire();
|
|
27
37
|
try {
|
|
28
|
-
|
|
29
|
-
results.push(result);
|
|
38
|
+
results[index] = await this.renameFile(file);
|
|
30
39
|
}
|
|
31
40
|
catch (error) {
|
|
32
|
-
results
|
|
41
|
+
results[index] = {
|
|
33
42
|
originalPath: file.path,
|
|
34
43
|
newPath: file.path,
|
|
35
44
|
suggestedName: file.name,
|
|
36
45
|
success: false,
|
|
37
46
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
completedCount++;
|
|
51
|
+
const count = completedCount;
|
|
52
|
+
const truncatedName = file.name.length > 50 ? file.name.substring(0, 47) + '...' : file.name;
|
|
53
|
+
const msg = `🔄 Processing [${count}/${files.length}] ${truncatedName}`;
|
|
54
|
+
progressChain = progressChain.then(() => {
|
|
55
|
+
const clearLine = '\r' + ' '.repeat(Math.max(lastProgressLength, msg.length)) + '\r';
|
|
56
|
+
process.stdout.write(clearLine + msg);
|
|
57
|
+
lastProgressLength = msg.length;
|
|
38
58
|
});
|
|
59
|
+
release();
|
|
39
60
|
}
|
|
40
|
-
}
|
|
41
|
-
|
|
61
|
+
}));
|
|
62
|
+
await progressChain;
|
|
42
63
|
const clearFinal = '\r' + ' '.repeat(lastProgressLength) + '\r';
|
|
43
64
|
if (files.length > 0) {
|
|
44
65
|
const successCount = results.filter(r => r.success).length;
|
|
@@ -83,33 +104,42 @@ export class FileRenamer {
|
|
|
83
104
|
// Create new filename with original extension
|
|
84
105
|
const newFileName = `${templatedName}${file.extension}`;
|
|
85
106
|
const newPath = path.join(path.dirname(file.path), newFileName);
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
await this.checkForConflicts(newPath);
|
|
89
|
-
}
|
|
107
|
+
// Resolve final path, auto-numbering if target already exists
|
|
108
|
+
const finalPath = newPath === file.path ? newPath : await this.resolveConflict(newPath);
|
|
90
109
|
// Perform the rename (or simulate if dry run)
|
|
91
|
-
if (!this.config.dryRun &&
|
|
92
|
-
await fs.rename(file.path,
|
|
110
|
+
if (!this.config.dryRun && finalPath !== file.path) {
|
|
111
|
+
await fs.rename(file.path, finalPath);
|
|
93
112
|
}
|
|
94
113
|
return {
|
|
95
114
|
originalPath: file.path,
|
|
96
|
-
newPath,
|
|
97
|
-
suggestedName:
|
|
115
|
+
newPath: finalPath,
|
|
116
|
+
suggestedName: path.basename(finalPath),
|
|
98
117
|
success: true
|
|
99
118
|
};
|
|
100
119
|
}
|
|
101
|
-
async
|
|
120
|
+
async resolveConflict(newPath) {
|
|
121
|
+
const ext = path.extname(newPath);
|
|
122
|
+
const base = path.join(path.dirname(newPath), path.basename(newPath, ext));
|
|
102
123
|
try {
|
|
103
124
|
await fs.access(newPath);
|
|
104
|
-
// If we reach here, the file exists
|
|
105
|
-
throw new Error(`Target filename already exists: ${path.basename(newPath)}`);
|
|
106
125
|
}
|
|
107
126
|
catch (error) {
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
if (error.code === 'ENOENT')
|
|
128
|
+
return newPath;
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
for (let i = 2; i <= 99; i++) {
|
|
132
|
+
const candidate = `${base}-${i}${ext}`;
|
|
133
|
+
try {
|
|
134
|
+
await fs.access(candidate);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error.code === 'ENOENT')
|
|
138
|
+
return candidate;
|
|
110
139
|
throw error;
|
|
111
140
|
}
|
|
112
141
|
}
|
|
142
|
+
throw new Error(`Could not find an available filename for: ${path.basename(newPath)} (tried -2 through -99)`);
|
|
113
143
|
}
|
|
114
144
|
}
|
|
115
145
|
//# sourceMappingURL=file-renamer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-renamer.js","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3E,MAAM,OAAO,WAAW;IAEZ;IACA;IACA;IAHV,YACU,aAAoC,EACpC,SAAqB,EACrB,MAAc;QAFd,kBAAa,GAAb,aAAa,CAAuB;QACpC,cAAS,GAAT,SAAS,CAAY;QACrB,WAAM,GAAN,MAAM,CAAQ;IACrB,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,KAAiB;QACjC,MAAM,OAAO,GAAmB,
|
|
1
|
+
{"version":3,"file":"file-renamer.js","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED