@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.
@@ -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 (claude|openai|ollama|lmstudio)', 'claude')
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 (kebab-case|snake_case|camelCase|PascalCase|lowercase|UPPERCASE)', 'kebab-case')
10
- .option('-t, --template <category>', 'File category template (document|movie|music|series|photo|book|general|auto)', 'general')
11
- .option('-n, --name <personalName>', 'Personal name to include in filenames (for document/photo templates)')
12
- .option('-d, --date <format>', 'Date format to include (YYYY-MM-DD|YYYY|YYYYMMDD|none)', 'none')
13
- .option('--dry-run', 'Preview changes without actually renaming files (RECOMMENDED first!)', false)
14
- .option('--max-size <size>', 'Maximum file size in MB to process', '10')
15
- .option('--base-url <url>', 'Base URL for local LLM providers (default: ollama=http://localhost:11434, lmstudio=http://localhost:1234)')
16
- .option('--model <name>', 'Model name for local LLM providers (default: ollama=llama3.1, lmstudio=local-model)')
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. Scans directory for supported files (PDF, DOCX, XLSX, TXT, MD, RTF)
21
- 2. Extracts content and metadata from each file
22
- 3. For scanned PDFs with no text, converts to image for AI vision analysis
23
- 4. Uses AI to analyze content and generate descriptive names
24
- 5. Applies your chosen template and naming convention
25
- 6. Renames files (or shows preview with --dry-run)
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 'auto' template for smart file type detection
30
- Personal templates work great for documents and photos
31
- Scanned PDFs are automatically handled via AI vision (Claude/OpenAI/Ollama)
32
- • Set API keys as environment variables for cloud providers
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
- # Specific directory
45
- namewise rename ./documents --dry-run
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
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,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,6CAA6C,EAAE,QAAQ,CAAC;SAC5F,MAAM,CAAC,qBAAqB,EAAE,oEAAoE,CAAC;SACnG,MAAM,CAAC,yBAAyB,EAAE,oFAAoF,EAAE,YAAY,CAAC;SACrI,MAAM,CAAC,2BAA2B,EAAE,8EAA8E,EAAE,SAAS,CAAC;SAC9H,MAAM,CAAC,2BAA2B,EAAE,sEAAsE,CAAC;SAC3G,MAAM,CAAC,qBAAqB,EAAE,wDAAwD,EAAE,MAAM,CAAC;SAC/F,MAAM,CAAC,WAAW,EAAE,sEAAsE,EAAE,KAAK,CAAC;SAClG,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,IAAI,CAAC;SACvE,MAAM,CAAC,kBAAkB,EAAE,2GAA2G,CAAC;SACvI,MAAM,CAAC,gBAAgB,EAAE,qFAAqF,CAAC;SAC/G,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;AACP,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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FhF"}
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"}
@@ -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(options.provider);
22
+ const requiresApiKey = ['claude', 'openai'].includes(provider);
17
23
  if (requiresApiKey && !apiKey) {
18
24
  // Check environment variables first
19
- if (options.provider === 'claude' && process.env.CLAUDE_API_KEY) {
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 (options.provider === 'openai' && process.env.OPENAI_API_KEY) {
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 ${options.provider} API key:`,
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: options.provider,
45
+ aiProvider: provider,
40
46
  apiKey,
41
- maxFileSize: parseInt(options.maxSize) * 1024 * 1024, // Convert MB to bytes
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
- if (entry.isFile()) {
99
- const filePath = path.join(directory, entry.name);
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(filePath);
103
- // Extract folder context
147
+ const stats = await fs.stat(entryPath);
104
148
  const parentFolder = path.basename(directory);
105
- const fullPath = path.resolve(filePath);
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: filePath,
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), // Last 3 folder levels for context
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);
@@ -1 +1 @@
1
- {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/cli/rename.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function undoRename(sessionId?: string, options?: {
2
+ list?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=undo.d.ts.map
@@ -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"}
@@ -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 checkForConflicts;
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;YA8C/C,UAAU;YAqEV,iBAAiB;CAYhC"}
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
- for (let i = 0; i < files.length; i++) {
17
- const file = files[i];
18
- // Create progress message with better formatting
19
- const progressBar = `[${i + 1}/${files.length}]`;
20
- const truncatedName = file.name.length > 50 ? file.name.substring(0, 47) + '...' : file.name;
21
- const progressMessage = `🔄 Processing ${progressBar} ${truncatedName}`;
22
- // Clear the previous line completely by using the actual length
23
- const clearLine = '\r' + ' '.repeat(Math.max(lastProgressLength, progressMessage.length)) + '\r';
24
- process.stdout.write(clearLine + progressMessage);
25
- // Store the length for next iteration
26
- lastProgressLength = progressMessage.length;
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
- const result = await this.renameFile(file);
29
- results.push(result);
38
+ results[index] = await this.renameFile(file);
30
39
  }
31
40
  catch (error) {
32
- results.push({
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
- // Clear the final processing line completely and show completion
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
- // Check if new filename would conflict with existing file
87
- if (newPath !== file.path) {
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 && newPath !== file.path) {
92
- await fs.rename(file.path, newPath);
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: newFileName,
115
+ newPath: finalPath,
116
+ suggestedName: path.basename(finalPath),
98
117
  success: true
99
118
  };
100
119
  }
101
- async checkForConflicts(newPath) {
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
- // If the error is ENOENT (file doesn't exist), that's what we want
109
- if (error.code !== 'ENOENT') {
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":"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"}
1
+ {"version":3,"file":"file-renamer.js","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,10 @@ export interface Config {
53
53
  baseUrl?: string;
54
54
  model?: string;
55
55
  };
56
+ recursive?: boolean;
57
+ depth?: number;
58
+ concurrency?: number;
59
+ outputPath?: string;
56
60
  }
57
61
  export interface ParseResult {
58
62
  content: string;