@amirdaraee/namewise 1.0.1 → 1.1.1

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 (100) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +6 -6
  3. package/dist/cli/clean-empty.d.ts.map +1 -1
  4. package/dist/cli/clean-empty.js +2 -3
  5. package/dist/cli/clean-empty.js.map +1 -1
  6. package/dist/cli/commands.d.ts.map +1 -1
  7. package/dist/cli/commands.js +1 -20
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/config-cmd.d.ts.map +1 -1
  10. package/dist/cli/config-cmd.js +4 -3
  11. package/dist/cli/config-cmd.js.map +1 -1
  12. package/dist/cli/dedup.d.ts.map +1 -1
  13. package/dist/cli/dedup.js +3 -11
  14. package/dist/cli/dedup.js.map +1 -1
  15. package/dist/cli/diff.d.ts.map +1 -1
  16. package/dist/cli/diff.js +3 -7
  17. package/dist/cli/diff.js.map +1 -1
  18. package/dist/cli/find.d.ts.map +1 -1
  19. package/dist/cli/find.js +2 -3
  20. package/dist/cli/find.js.map +1 -1
  21. package/dist/cli/flatten.d.ts.map +1 -1
  22. package/dist/cli/flatten.js +4 -11
  23. package/dist/cli/flatten.js.map +1 -1
  24. package/dist/cli/handle-cli-error.d.ts +7 -0
  25. package/dist/cli/handle-cli-error.d.ts.map +1 -0
  26. package/dist/cli/handle-cli-error.js +25 -0
  27. package/dist/cli/handle-cli-error.js.map +1 -0
  28. package/dist/cli/init.js +2 -2
  29. package/dist/cli/init.js.map +1 -1
  30. package/dist/cli/organize.d.ts.map +1 -1
  31. package/dist/cli/organize.js +4 -11
  32. package/dist/cli/organize.js.map +1 -1
  33. package/dist/cli/rename.d.ts +4 -2
  34. package/dist/cli/rename.d.ts.map +1 -1
  35. package/dist/cli/rename.js +166 -227
  36. package/dist/cli/rename.js.map +1 -1
  37. package/dist/cli/sanitize.d.ts.map +1 -1
  38. package/dist/cli/sanitize.js +4 -12
  39. package/dist/cli/sanitize.js.map +1 -1
  40. package/dist/cli/shared-config.d.ts +60 -0
  41. package/dist/cli/shared-config.d.ts.map +1 -0
  42. package/dist/cli/shared-config.js +64 -0
  43. package/dist/cli/shared-config.js.map +1 -0
  44. package/dist/cli/stats.d.ts.map +1 -1
  45. package/dist/cli/stats.js +2 -4
  46. package/dist/cli/stats.js.map +1 -1
  47. package/dist/cli/tree.d.ts.map +1 -1
  48. package/dist/cli/tree.js +2 -3
  49. package/dist/cli/tree.js.map +1 -1
  50. package/dist/cli/watch.d.ts +3 -1
  51. package/dist/cli/watch.d.ts.map +1 -1
  52. package/dist/cli/watch.js +19 -63
  53. package/dist/cli/watch.js.map +1 -1
  54. package/dist/parsers/pdf-parser.d.ts.map +1 -1
  55. package/dist/parsers/pdf-parser.js +39 -24
  56. package/dist/parsers/pdf-parser.js.map +1 -1
  57. package/dist/services/base-cloud-service.d.ts +32 -0
  58. package/dist/services/base-cloud-service.d.ts.map +1 -0
  59. package/dist/services/base-cloud-service.js +73 -0
  60. package/dist/services/base-cloud-service.js.map +1 -0
  61. package/dist/services/base-local-service.d.ts +18 -0
  62. package/dist/services/base-local-service.d.ts.map +1 -0
  63. package/dist/services/base-local-service.js +81 -0
  64. package/dist/services/base-local-service.js.map +1 -0
  65. package/dist/services/claude-service.d.ts +8 -6
  66. package/dist/services/claude-service.d.ts.map +1 -1
  67. package/dist/services/claude-service.js +40 -98
  68. package/dist/services/claude-service.js.map +1 -1
  69. package/dist/services/lmstudio-service.d.ts +35 -9
  70. package/dist/services/lmstudio-service.d.ts.map +1 -1
  71. package/dist/services/lmstudio-service.js +23 -101
  72. package/dist/services/lmstudio-service.js.map +1 -1
  73. package/dist/services/ollama-service.d.ts +23 -9
  74. package/dist/services/ollama-service.d.ts.map +1 -1
  75. package/dist/services/ollama-service.js +16 -87
  76. package/dist/services/ollama-service.js.map +1 -1
  77. package/dist/services/openai-service.d.ts +8 -6
  78. package/dist/services/openai-service.d.ts.map +1 -1
  79. package/dist/services/openai-service.js +36 -94
  80. package/dist/services/openai-service.js.map +1 -1
  81. package/dist/utils/ai-name-sanitizer.d.ts +14 -0
  82. package/dist/utils/ai-name-sanitizer.d.ts.map +1 -0
  83. package/dist/utils/ai-name-sanitizer.js +39 -0
  84. package/dist/utils/ai-name-sanitizer.js.map +1 -0
  85. package/dist/utils/assert-directory.d.ts +9 -0
  86. package/dist/utils/assert-directory.d.ts.map +1 -0
  87. package/dist/utils/assert-directory.js +15 -0
  88. package/dist/utils/assert-directory.js.map +1 -0
  89. package/dist/utils/file-info.d.ts +8 -0
  90. package/dist/utils/file-info.d.ts.map +1 -0
  91. package/dist/utils/file-info.js +25 -0
  92. package/dist/utils/file-info.js.map +1 -0
  93. package/dist/utils/record-session.d.ts +18 -0
  94. package/dist/utils/record-session.d.ts.map +1 -0
  95. package/dist/utils/record-session.js +24 -0
  96. package/dist/utils/record-session.js.map +1 -0
  97. package/dist/utils/ui.d.ts.map +1 -1
  98. package/dist/utils/ui.js +1 -7
  99. package/dist/utils/ui.js.map +1 -1
  100. package/package.json +17 -18
@@ -5,14 +5,17 @@ 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
7
  import { loadConfig } from '../utils/config-loader.js';
8
- import { appendHistory } from '../utils/history.js';
8
+ import { recordSession } from '../utils/record-session.js';
9
9
  import { applyPatterns } from '../utils/pattern-rename.js';
10
10
  import { applyNamingConvention } from '../utils/naming-conventions.js';
11
11
  import { collectFiles } from '../utils/fs-collect.js';
12
+ import { statToFileInfo } from '../utils/file-info.js';
13
+ import { assertDirectory } from '../utils/assert-directory.js';
12
14
  import { applySequence, applyPrefix, applySuffix, applyDateStamp, applyStrip, applyTruncate } from '../utils/batch-rename.js';
13
15
  import * as ui from '../utils/ui.js';
14
- import { NamewiseError } from '../errors.js';
15
16
  import { createLogger, logger } from '../utils/logger.js';
17
+ import { handleCliError } from './handle-cli-error.js';
18
+ import { resolveProvider, resolveApiKey, providerRequiresApiKey, buildConfig } from './shared-config.js';
16
19
  export async function renameFiles(directory, options) {
17
20
  // Load config early so the logger can respect the `log` setting from config file.
18
21
  // Errors here (e.g. invalid JSON) are caught by the outer catch below.
@@ -21,10 +24,7 @@ export async function renameFiles(directory, options) {
21
24
  log.session({ command: 'rename', directory, provider: options.provider, dryRun: options.dryRun ?? false });
22
25
  try {
23
26
  // Validate directory exists
24
- const stats = await fs.stat(directory);
25
- if (!stats.isDirectory()) {
26
- throw new Error(`${directory} is not a directory`);
27
- }
27
+ await assertDirectory(directory);
28
28
  // Short-circuit for batch rename flags (no AI needed)
29
29
  const hasBatchFlags = options.sequence || options.prefix || options.suffix ||
30
30
  options.dateStamp || options.strip || options.truncate;
@@ -41,64 +41,15 @@ export async function renameFiles(directory, options) {
41
41
  }, options.dryRun ?? false, options.recursive ?? false);
42
42
  return;
43
43
  }
44
- // Resolve provider (CLI flag > config file > default)
45
- const provider = (options.provider ?? fileConfig.provider ?? 'claude');
46
- // Get API key for cloud providers only
47
- let apiKey = options.apiKey ?? fileConfig.apiKey;
48
- const requiresApiKey = ['claude', 'openai'].includes(provider) && options.ai !== false;
49
- if (requiresApiKey && !apiKey) {
50
- // Check environment variables first
51
- if (provider === 'claude' && (process.env.CLAUDE_API_KEY ?? process.env.ANTHROPIC_API_KEY)) {
52
- apiKey = process.env.CLAUDE_API_KEY ?? process.env.ANTHROPIC_API_KEY;
53
- }
54
- else if (provider === 'openai' && process.env.OPENAI_API_KEY) {
55
- apiKey = process.env.OPENAI_API_KEY;
56
- }
57
- else {
58
- const keyPrompt = await inquirer.prompt([
59
- {
60
- type: 'password',
61
- name: 'apiKey',
62
- message: `Enter your ${provider} API key:`,
63
- mask: '*'
64
- }
65
- ]);
66
- apiKey = keyPrompt.apiKey;
67
- }
68
- }
69
- // Create config (CLI flags override file config which overrides defaults)
70
- const config = {
71
- aiProvider: provider,
72
- apiKey,
73
- maxFileSize: parseInt(options.maxSize ?? String(fileConfig.maxSize ?? '10')) * 1024 * 1024,
74
- supportedExtensions: new DocumentParserFactory().getSupportedExtensions(),
75
- dryRun: options.dryRun ?? fileConfig.dryRun ?? false,
76
- namingConvention: (options.case ?? fileConfig.case ?? 'kebab-case'),
77
- templateOptions: {
78
- category: (options.template ?? fileConfig.template ?? 'general'),
79
- personalName: options.name ?? fileConfig.name,
80
- dateFormat: (options.date ?? fileConfig.date ?? 'none')
81
- },
82
- localLLMConfig: {
83
- baseUrl: options.baseUrl ?? fileConfig.baseUrl,
84
- model: options.model ?? fileConfig.model
85
- },
86
- recursive: options.recursive ?? fileConfig.recursive ?? false,
87
- depth: options.depth !== undefined ? parseInt(options.depth) : fileConfig.depth,
88
- concurrency: parseInt(options.concurrency ?? String(fileConfig.concurrency ?? '3')),
89
- outputPath: options.output ?? fileConfig.output,
90
- patterns: Array.isArray(options.pattern) ? options.pattern : (options.pattern ? [options.pattern] : []),
91
- noAi: options.ai === false,
92
- language: options.language ?? fileConfig.language,
93
- context: options.context ?? fileConfig.context
94
- };
44
+ // Resolve provider, API key (env vars + interactive prompt) and config
45
+ const config = await resolveRenameConfig(options, fileConfig);
95
46
  // Initialize services
96
47
  const parserFactory = new DocumentParserFactory(config);
97
48
  // --no-ai never touches an AI provider, so don't construct one (cloud
98
49
  // providers throw without an API key, which --no-ai must not require)
99
50
  const aiService = config.noAi
100
51
  ? undefined
101
- : AIServiceFactory.create(config.aiProvider, apiKey, config.localLLMConfig);
52
+ : AIServiceFactory.create(config.aiProvider, config.apiKey, config.localLLMConfig);
102
53
  const fileRenamer = new FileRenamer(parserFactory, aiService, config);
103
54
  // Get files to process
104
55
  const files = await getFilesToProcess(directory, config.supportedExtensions, config.recursive, config.depth ?? Infinity);
@@ -113,70 +64,14 @@ export async function renameFiles(directory, options) {
113
64
  }
114
65
  // Pre-flight token estimate so cloud users see the cost before confirming
115
66
  if (!config.noAi) {
116
- const IMAGE_EXT = new Set(['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.heic', '.webp']);
117
- const VISION_IMAGE_TOKENS = 1600; // ~1024px image via vision API
118
- const PROMPT_OVERHEAD_TOKENS = 300; // instructions + template guidance
119
- const MAX_CONTENT_CHARS = 5000; // content cap sent to the AI
120
- const estTokens = files.reduce((sum, f) => {
121
- if (IMAGE_EXT.has(f.extension.toLowerCase()))
122
- return sum + VISION_IMAGE_TOKENS;
123
- return sum + Math.ceil(Math.min(f.size, MAX_CONTENT_CHARS) / 4) + PROMPT_OVERHEAD_TOKENS;
124
- }, 0);
125
- ui.dim(`Estimated AI usage: ~${estTokens.toLocaleString('en-US')} input tokens for ${files.length} file${files.length === 1 ? '' : 's'} (cloud providers bill per token)`);
67
+ printTokenEstimate(files);
126
68
  }
127
69
  // Confirm before processing
128
- if (!config.dryRun) {
129
- const confirm = await inquirer.prompt([
130
- {
131
- type: 'confirm',
132
- name: 'proceed',
133
- message: 'Proceed with renaming these files?',
134
- default: false
135
- }
136
- ]);
137
- if (!confirm.proceed) {
138
- ui.info('Cancelled.');
139
- return;
140
- }
70
+ if (!config.dryRun && !(await confirmProceed())) {
71
+ ui.info('Cancelled.');
72
+ return;
141
73
  }
142
- // Process files use \r-overwrite for progress (ora animation is unreliable
143
- // when pdfjs/canvas blocks the event loop between files).
144
- // Session-level noise suppression covers the entire rename session so that
145
- // concurrent PDF parsers (concurrency: 3) cannot race their per-call
146
- // save/restore and let the pdfjs "TT: undefined function" warning escape.
147
- const startTime = Date.now();
148
- let lastProgressLen = 0;
149
- const origConsoleWarn = console.warn;
150
- const origConsoleLog = console.log;
151
- const origStdoutWrite = process.stdout.write.bind(process.stdout);
152
- console.warn = () => { };
153
- console.log = () => { };
154
- // Filter stdout writes that match known library noise patterns
155
- process.stdout.write = (chunk, ...args) => {
156
- if (typeof chunk === 'string' && /Warning: TT:/.test(chunk))
157
- return true;
158
- return origStdoutWrite(chunk, ...args);
159
- };
160
- ui.suppressStderr();
161
- const { results, tokenUsage } = await fileRenamer.renameFiles(files, (completed, total) => {
162
- const BAR_WIDTH = 28;
163
- const filled = Math.round((completed / total) * BAR_WIDTH);
164
- const empty = BAR_WIDTH - filled;
165
- const bar = '█'.repeat(filled) + '░'.repeat(empty);
166
- const pct = String(Math.round((completed / total) * 100)).padStart(3);
167
- const line = ` [${bar}] ${pct}% ${completed}/${total}`;
168
- const pad = ' '.repeat(Math.max(0, lastProgressLen - line.length));
169
- origStdoutWrite('\r' + line + pad);
170
- lastProgressLen = line.length;
171
- }).finally(() => {
172
- ui.restoreStderr();
173
- console.warn = origConsoleWarn;
174
- console.log = origConsoleLog;
175
- process.stdout.write = origStdoutWrite;
176
- });
177
- // Clear the progress line
178
- process.stdout.write('\r' + ' '.repeat(lastProgressLen) + '\r');
179
- const elapsed = Date.now() - startTime;
74
+ const { results, tokenUsage, elapsed } = await processFilesWithProgress(fileRenamer, files);
180
75
  const successCount = results.filter(r => r.success).length;
181
76
  const failCount = results.filter(r => !r.success).length;
182
77
  const elapsedStr = elapsed < 1000 ? elapsed + 'ms' : (elapsed / 1000).toFixed(1) + 's';
@@ -186,30 +81,9 @@ export async function renameFiles(directory, options) {
186
81
  // to apply the already-computed renames so the user doesn't need a second invocation.
187
82
  const dryRunFromCli = options.dryRun === true;
188
83
  if (config.dryRun && !dryRunFromCli) {
189
- const applicableRenames = results.filter(r => r.success && r.originalPath !== r.newPath);
190
- if (applicableRenames.length > 0) {
191
- const { apply } = await inquirer.prompt([{
192
- type: 'confirm',
193
- name: 'apply',
194
- message: `Apply ${applicableRenames.length} rename${applicableRenames.length === 1 ? '' : 's'}?`,
195
- default: false
196
- }]);
197
- if (apply) {
198
- for (const result of applicableRenames) {
199
- await fs.rename(result.originalPath, result.newPath);
200
- }
201
- ui.success(`Applied ${applicableRenames.length} rename${applicableRenames.length === 1 ? '' : 's'}.`);
202
- await appendHistory({
203
- id: new Date().toISOString(),
204
- timestamp: new Date().toISOString(),
205
- directory: path.resolve(directory),
206
- dryRun: false,
207
- renames: applicableRenames.map(r => ({ originalPath: r.originalPath, newPath: r.newPath })),
208
- tokenUsage
209
- });
210
- return;
211
- }
212
- }
84
+ const applied = await offerToApplyPreview(results, directory, tokenUsage);
85
+ if (applied)
86
+ return;
213
87
  }
214
88
  logger.summary({
215
89
  total: files.length,
@@ -222,86 +96,163 @@ export async function renameFiles(directory, options) {
222
96
  const successfulRenames = results
223
97
  .filter(r => r.success && r.originalPath !== r.newPath)
224
98
  .map(r => ({ originalPath: r.originalPath, newPath: r.newPath }));
225
- await appendHistory({
226
- id: new Date().toISOString(),
227
- timestamp: new Date().toISOString(),
228
- directory: path.resolve(directory),
229
- dryRun: config.dryRun,
230
- renames: successfulRenames,
231
- tokenUsage
232
- });
99
+ await recordSession(directory, config.dryRun, successfulRenames, tokenUsage);
233
100
  // Write JSON report if --output was provided
234
101
  if (config.outputPath) {
235
- const report = {
236
- timestamp: new Date().toISOString(),
237
- directory: path.resolve(directory),
238
- dryRun: config.dryRun,
239
- summary: {
240
- total: results.length,
241
- succeeded: results.filter(r => r.success).length,
242
- failed: results.filter(r => !r.success).length
243
- },
244
- results
245
- };
246
- try {
247
- await fs.writeFile(config.outputPath, JSON.stringify(report, null, 2), 'utf-8');
248
- ui.success(`Report saved to: ${config.outputPath}`);
249
- }
250
- catch (err) {
251
- logger.warn('Failed to write report', { path: config.outputPath, error: err instanceof Error ? err.message : String(err) });
252
- ui.warn(`Failed to write report: ${err instanceof Error ? err.message : 'Unknown error'}`);
253
- }
102
+ await writeJsonReport(config.outputPath, directory, config.dryRun, results);
254
103
  }
255
104
  }
256
105
  catch (error) {
257
- log.error(error);
258
- if (error instanceof NamewiseError) {
259
- ui.error(error.message);
260
- if (error.hint)
261
- ui.hint(error.hint);
262
- }
263
- else {
264
- ui.error('An unexpected error occurred.');
265
- if (log.enabled) {
266
- ui.hint(`See log: ${log.currentLogPath}`);
267
- }
268
- else {
269
- ui.hint('Run with --log for detailed error information.');
106
+ handleCliError(error, log);
107
+ }
108
+ }
109
+ /**
110
+ * Resolve provider and API key, prompting interactively for the key when a
111
+ * cloud provider has none configured (env vars are checked first), then build
112
+ * the runtime Config. Only `rename` prompts — `watch` never does.
113
+ */
114
+ async function resolveRenameConfig(options, fileConfig) {
115
+ // Resolve provider (CLI flag > config file > default)
116
+ const provider = resolveProvider(options, fileConfig);
117
+ const aiDisabled = options.ai === false;
118
+ // Get API key for cloud providers only (CLI flag > config file > env vars)
119
+ let apiKey = resolveApiKey(provider, options.apiKey ?? fileConfig.apiKey, aiDisabled);
120
+ if (providerRequiresApiKey(provider, aiDisabled) && !apiKey) {
121
+ const keyPrompt = await inquirer.prompt([
122
+ {
123
+ type: 'password',
124
+ name: 'apiKey',
125
+ message: `Enter your ${provider} API key:`,
126
+ mask: '*'
270
127
  }
128
+ ]);
129
+ apiKey = keyPrompt.apiKey;
130
+ }
131
+ // Create config (CLI flags override file config which overrides defaults)
132
+ return buildConfig(options, fileConfig, provider, apiKey);
133
+ }
134
+ /** Print the pre-flight input-token estimate for the files about to be sent to the AI. */
135
+ function printTokenEstimate(files) {
136
+ const IMAGE_EXT = new Set(['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.heic', '.webp']);
137
+ const VISION_IMAGE_TOKENS = 1600; // ~1024px image via vision API
138
+ const PROMPT_OVERHEAD_TOKENS = 300; // instructions + template guidance
139
+ const MAX_CONTENT_CHARS = 5000; // content cap sent to the AI
140
+ const estTokens = files.reduce((sum, f) => {
141
+ if (IMAGE_EXT.has(f.extension.toLowerCase()))
142
+ return sum + VISION_IMAGE_TOKENS;
143
+ return sum + Math.ceil(Math.min(f.size, MAX_CONTENT_CHARS) / 4) + PROMPT_OVERHEAD_TOKENS;
144
+ }, 0);
145
+ ui.dim(`Estimated AI usage: ~${estTokens.toLocaleString('en-US')} input tokens for ${files.length} file${files.length === 1 ? '' : 's'} (cloud providers bill per token)`);
146
+ }
147
+ /** Ask the user to confirm before renaming files (skipped in dry-run mode). */
148
+ async function confirmProceed() {
149
+ const confirm = await inquirer.prompt([
150
+ {
151
+ type: 'confirm',
152
+ name: 'proceed',
153
+ message: 'Proceed with renaming these files?',
154
+ default: false
271
155
  }
272
- process.exit(1);
156
+ ]);
157
+ return confirm.proceed;
158
+ }
159
+ /**
160
+ * Run the rename pipeline with a \r-overwrite progress bar while suppressing
161
+ * library noise (ora animation is unreliable when pdfjs/canvas blocks the
162
+ * event loop between files).
163
+ *
164
+ * Session-level noise suppression covers the entire rename session so that
165
+ * concurrent PDF parsers (concurrency: 3) cannot race their per-call
166
+ * save/restore and let the pdfjs "TT: undefined function" warning escape.
167
+ */
168
+ async function processFilesWithProgress(fileRenamer, files) {
169
+ const startTime = Date.now();
170
+ let lastProgressLen = 0;
171
+ const origConsoleWarn = console.warn;
172
+ const origConsoleLog = console.log;
173
+ const origStdoutWrite = process.stdout.write.bind(process.stdout);
174
+ console.warn = () => { };
175
+ console.log = () => { };
176
+ // Filter stdout writes that match known library noise patterns
177
+ process.stdout.write = (chunk, ...args) => {
178
+ if (typeof chunk === 'string' && /Warning: TT:/.test(chunk))
179
+ return true;
180
+ return origStdoutWrite(chunk, ...args);
181
+ };
182
+ ui.suppressStderr();
183
+ const { results, tokenUsage } = await fileRenamer.renameFiles(files, (completed, total) => {
184
+ const BAR_WIDTH = 28;
185
+ const filled = Math.round((completed / total) * BAR_WIDTH);
186
+ const empty = BAR_WIDTH - filled;
187
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
188
+ const pct = String(Math.round((completed / total) * 100)).padStart(3);
189
+ const line = ` [${bar}] ${pct}% ${completed}/${total}`;
190
+ const pad = ' '.repeat(Math.max(0, lastProgressLen - line.length));
191
+ origStdoutWrite('\r' + line + pad);
192
+ lastProgressLen = line.length;
193
+ }).finally(() => {
194
+ ui.restoreStderr();
195
+ console.warn = origConsoleWarn;
196
+ console.log = origConsoleLog;
197
+ process.stdout.write = origStdoutWrite;
198
+ });
199
+ // Clear the progress line
200
+ process.stdout.write('\r' + ' '.repeat(lastProgressLen) + '\r');
201
+ return { results, tokenUsage, elapsed: Date.now() - startTime };
202
+ }
203
+ /**
204
+ * Offer to apply the previewed renames when dry-run came from the config file
205
+ * (not the CLI flag). Returns true when the renames were applied.
206
+ */
207
+ async function offerToApplyPreview(results, directory, tokenUsage) {
208
+ const applicableRenames = results.filter(r => r.success && r.originalPath !== r.newPath);
209
+ if (applicableRenames.length === 0)
210
+ return false;
211
+ const { apply } = await inquirer.prompt([{
212
+ type: 'confirm',
213
+ name: 'apply',
214
+ message: `Apply ${applicableRenames.length} rename${applicableRenames.length === 1 ? '' : 's'}?`,
215
+ default: false
216
+ }]);
217
+ if (!apply)
218
+ return false;
219
+ for (const result of applicableRenames) {
220
+ await fs.rename(result.originalPath, result.newPath);
273
221
  }
222
+ ui.success(`Applied ${applicableRenames.length} rename${applicableRenames.length === 1 ? '' : 's'}.`);
223
+ await recordSession(directory, false, applicableRenames.map(r => ({ originalPath: r.originalPath, newPath: r.newPath })), tokenUsage);
224
+ return true;
274
225
  }
275
- async function getFilesToProcess(directory, supportedExtensions, recursive = false, maxDepth = Infinity, _currentDepth = 0) {
226
+ /** Write the JSON rename report requested via --output. */
227
+ async function writeJsonReport(outputPath, directory, dryRun, results) {
228
+ const report = {
229
+ timestamp: new Date().toISOString(),
230
+ directory: path.resolve(directory),
231
+ dryRun,
232
+ summary: {
233
+ total: results.length,
234
+ succeeded: results.filter(r => r.success).length,
235
+ failed: results.filter(r => !r.success).length
236
+ },
237
+ results
238
+ };
239
+ try {
240
+ await fs.writeFile(outputPath, JSON.stringify(report, null, 2), 'utf-8');
241
+ ui.success(`Report saved to: ${outputPath}`);
242
+ }
243
+ catch (err) {
244
+ logger.warn('Failed to write report', { path: outputPath, error: err instanceof Error ? err.message : String(err) });
245
+ ui.warn(`Failed to write report: ${err instanceof Error ? err.message : 'Unknown error'}`);
246
+ }
247
+ }
248
+ async function getFilesToProcess(directory, supportedExtensions, recursive = false, maxDepth = Infinity) {
249
+ const filePaths = await collectFiles(directory, { recursive, maxDepth });
276
250
  const files = [];
277
- const entries = await fs.readdir(directory, { withFileTypes: true });
278
- for (const entry of entries) {
279
- const entryPath = path.join(directory, entry.name);
280
- if (entry.isDirectory() && recursive && _currentDepth < maxDepth) {
281
- const subFiles = await getFilesToProcess(entryPath, supportedExtensions, recursive, maxDepth, _currentDepth + 1);
282
- files.push(...subFiles);
283
- }
284
- else if (entry.isFile()) {
285
- const extension = path.extname(entry.name).toLowerCase();
286
- if (supportedExtensions.includes(extension)) {
287
- const stats = await fs.stat(entryPath);
288
- const parentFolder = path.basename(directory);
289
- const fullPath = path.resolve(entryPath);
290
- const folderPath = path.dirname(fullPath).split(path.sep).filter(p => p);
291
- files.push({
292
- path: entryPath,
293
- name: entry.name,
294
- extension,
295
- size: stats.size,
296
- createdAt: stats.birthtime,
297
- modifiedAt: stats.mtime,
298
- accessedAt: stats.atime,
299
- parentFolder,
300
- folderPath: folderPath.slice(-3),
301
- documentMetadata: undefined
302
- });
303
- }
304
- }
251
+ for (const filePath of filePaths) {
252
+ const extension = path.extname(filePath).toLowerCase();
253
+ if (!supportedExtensions.includes(extension))
254
+ continue;
255
+ files.push(await statToFileInfo(filePath));
305
256
  }
306
257
  return files;
307
258
  }
@@ -333,13 +284,7 @@ async function runPatternRenames(files, config) {
333
284
  }
334
285
  }
335
286
  if (!config.dryRun && renames.length > 0) {
336
- await appendHistory({
337
- id: new Date().toISOString(),
338
- timestamp: new Date().toISOString(),
339
- directory: path.resolve(path.dirname(files[0].path)),
340
- dryRun: false,
341
- renames
342
- });
287
+ await recordSession(path.dirname(files[0].path), false, renames);
343
288
  }
344
289
  const count = config.dryRun ? previewCount : renames.length;
345
290
  ui.info(`\n${config.dryRun ? 'Would rename' : 'Renamed'} ${count} file(s) using pattern(s).`);
@@ -400,13 +345,7 @@ export async function runBatchRenames(directory, flags, dryRun, recursive) {
400
345
  }
401
346
  }
402
347
  if (!dryRun && renames.length > 0) {
403
- await appendHistory({
404
- id: new Date().toISOString(),
405
- timestamp: new Date().toISOString(),
406
- directory: path.resolve(directory),
407
- dryRun: false,
408
- renames
409
- });
348
+ await recordSession(directory, false, renames);
410
349
  }
411
350
  const count = dryRun ? previewCount : renames.length;
412
351
  ui.info(`\n${dryRun ? 'Would rename' : 'Renamed'} ${count} file(s).`);
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/cli/sanitize.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAC1E,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/cli/sanitize.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAKrD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAC1E,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
@@ -1,14 +1,12 @@
1
1
  import { promises as fs } from 'fs';
2
2
  import path from 'path';
3
- import { appendHistory } from '../utils/history.js';
3
+ import { recordSession } from '../utils/record-session.js';
4
4
  import { sanitizeFilename } from '../utils/sanitizer.js';
5
5
  import { collectFiles } from '../utils/fs-collect.js';
6
+ import { assertDirectory } from '../utils/assert-directory.js';
6
7
  import * as ui from '../utils/ui.js';
7
8
  export async function sanitizeFiles(directory, options) {
8
- const stats = await fs.stat(directory);
9
- if (!stats.isDirectory()) {
10
- throw new Error(`${directory} is not a directory`);
11
- }
9
+ await assertDirectory(directory);
12
10
  const filePaths = await collectFiles(directory, { recursive: options.recursive ?? false });
13
11
  if (filePaths.length === 0) {
14
12
  ui.info('No files found.');
@@ -40,13 +38,7 @@ export async function sanitizeFiles(directory, options) {
40
38
  }
41
39
  }
42
40
  if (!options.dryRun && renames.length > 0) {
43
- await appendHistory({
44
- id: new Date().toISOString(),
45
- timestamp: new Date().toISOString(),
46
- directory: path.resolve(directory),
47
- dryRun: false,
48
- renames
49
- });
41
+ await recordSession(directory, false, renames);
50
42
  }
51
43
  const count = options.dryRun ? previewCount : renames.length;
52
44
  const verb = options.dryRun ? 'would be sanitized' : 'sanitized';
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/cli/sanitize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/cli/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,OAA2E;IAE3E,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;IAC3F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAChD,MAAM,OAAO,GAAqD,EAAE,CAAC;IACrE,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;QAEhC,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAS;QAElD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC;IACjE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,GAAG,CAAC,CAAC;AACzC,CAAC"}