@amirdaraee/namewise 0.6.0 → 0.6.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.
- package/CHANGELOG.md +63 -226
- package/README.md +12 -10
- package/dist/cli/commands.js +1 -1
- package/dist/cli/commands.js.map +1 -1
- package/dist/parsers/factory.d.ts.map +1 -1
- package/dist/parsers/factory.js +2 -11
- package/dist/parsers/factory.js.map +1 -1
- package/dist/services/ai-factory.js +2 -2
- package/dist/services/ai-factory.js.map +1 -1
- package/dist/services/claude-service.d.ts +2 -1
- package/dist/services/claude-service.d.ts.map +1 -1
- package/dist/services/claude-service.js +6 -6
- package/dist/services/claude-service.js.map +1 -1
- package/dist/services/file-renamer.d.ts.map +1 -1
- package/dist/services/file-renamer.js +1 -1
- package/dist/services/file-renamer.js.map +1 -1
- package/dist/services/openai-service.d.ts +2 -1
- package/dist/services/openai-service.d.ts.map +1 -1
- package/dist/services/openai-service.js +6 -6
- package/dist/services/openai-service.js.map +1 -1
- package/dist/utils/ai-prompts.js +2 -2
- package/dist/utils/file-templates.d.ts +1 -1
- package/dist/utils/file-templates.d.ts.map +1 -1
- package/dist/utils/file-templates.js +25 -11
- package/dist/utils/file-templates.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,284 +7,121 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [0.6.
|
|
10
|
+
## [0.6.1] - 2026-04-02
|
|
11
11
|
|
|
12
|
-
###
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
- Example: `namewise rename ./projects --recursive --depth 2 --dry-run`
|
|
16
|
-
- **Undo Command**: New `namewise undo` reverses the most recent rename session
|
|
17
|
-
- Sessions stored in `~/.namewise/history.json` (append-only audit log)
|
|
18
|
-
- `namewise undo --list` shows the last 10 sessions with their IDs
|
|
19
|
-
- `namewise undo <session-id>` undoes a specific past session
|
|
20
|
-
- Warns and skips (without erroring) if a file has already been moved
|
|
21
|
-
- **Cascading Config File**: Project- and user-level config support
|
|
22
|
-
- `~/.namewise.json` sets user-wide defaults
|
|
23
|
-
- `<targetDir>/.namewise.json` overrides per project
|
|
24
|
-
- CLI flags override both; all keys are optional
|
|
25
|
-
- Supports: `provider`, `case`, `template`, `name`, `date`, `maxSize`, `model`, `baseUrl`, `concurrency`, `recursive`, `depth`, `output`
|
|
26
|
-
- **Concurrency Control**: New `--concurrency <n>` flag (default: 3)
|
|
27
|
-
- Files are processed in parallel up to the configured limit
|
|
28
|
-
- Implemented with a zero-dependency semaphore
|
|
29
|
-
- **JSON Rename Report**: New `--output <path>` flag writes a full report after each run
|
|
30
|
-
- Includes timestamp, directory, dry-run flag, summary counts, and per-file results
|
|
12
|
+
### Fixed
|
|
13
|
+
- Movie, music, series, and book templates now produce correct filenames; the AI is explicitly instructed to include the release year, artist name, season/episode, or author in the output rather than leaving unfilled `{year}`, `{artist}`, `{author}`, `{season}`, `{episode}` placeholders that were silently stripped
|
|
14
|
+
- `--date` flag for document and photo templates now uses the document's own creation date from file metadata when available, instead of always substituting today's date
|
|
31
15
|
|
|
32
16
|
### Changed
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
- Example: `report.pdf` → `report-2.pdf` if `report.pdf` already exists
|
|
36
|
-
|
|
37
|
-
### Technical
|
|
38
|
-
- Added `src/utils/config-loader.ts` and `src/utils/history.ts` as thin, focused modules
|
|
39
|
-
- Added `src/cli/undo.ts` for undo command logic
|
|
40
|
-
- 103 new tests across 11 new/updated test files; total now 428 tests (36 files)
|
|
41
|
-
|
|
42
|
-
### Examples
|
|
43
|
-
```bash
|
|
44
|
-
# Recursive scan with depth limit
|
|
45
|
-
namewise rename ./projects --recursive --depth 2 --dry-run
|
|
17
|
+
- `--model` flag now works for all providers (Claude, OpenAI, Ollama, LMStudio), not just local LLMs; defaults are `claude-sonnet-4-5-20250929` for Claude and `gpt-4o` for OpenAI
|
|
18
|
+
- Content sent to AI increased from 2000 to 5000 characters for more accurate filename generation on longer documents
|
|
46
19
|
|
|
47
|
-
|
|
48
|
-
echo '{"provider":"claude","case":"snake_case","concurrency":5}' > ~/.namewise.json
|
|
49
|
-
|
|
50
|
-
# Save a rename report
|
|
51
|
-
namewise rename ./documents --output ./report.json
|
|
20
|
+
## [0.6.0] - 2026-04-02
|
|
52
21
|
|
|
53
|
-
|
|
54
|
-
|
|
22
|
+
### Added
|
|
23
|
+
- `--recursive` / `-r` flag to scan subdirectories, with optional `--depth <n>` to limit depth
|
|
24
|
+
- `namewise undo [session-id]` command to reverse any previous rename session
|
|
25
|
+
- `namewise undo --list` to view recent sessions with their IDs
|
|
26
|
+
- Cascading config file support: `~/.namewise.json` (user) and `<dir>/.namewise.json` (project); CLI flags take highest priority
|
|
27
|
+
- `--concurrency <n>` flag to process files in parallel (default: 3)
|
|
28
|
+
- `--output <path>` flag to save a full JSON rename report after each run
|
|
55
29
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
namewise
|
|
59
|
-
```
|
|
30
|
+
### Changed
|
|
31
|
+
- Conflict handling: instead of erroring when a target filename already exists, the tool now auto-numbers the new file (`report-2.pdf`, `report-3.pdf`, etc.)
|
|
32
|
+
- Rename history is now saved to `~/.namewise/history.json` after every run
|
|
60
33
|
|
|
61
34
|
## [0.5.4] - 2026-03-31
|
|
62
35
|
|
|
63
|
-
###
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
- Added tests for all error branches including non-Error exception paths
|
|
67
|
-
- Full coverage for scanned PDF handling, folder-based categorization, and naming convention truncation
|
|
68
|
-
- Added polyfill tests for `process.getBuiltinModule` in Node.js < 22.3.0 environments
|
|
36
|
+
### Changed
|
|
37
|
+
- Achieved 100% test coverage across all metrics (statements, branches, functions, lines)
|
|
38
|
+
- Expanded test suite to 325 tests across 26 test files
|
|
69
39
|
|
|
70
40
|
## [0.5.0] - 2025-11-10
|
|
71
41
|
|
|
72
42
|
### Added
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- Smart size calculation to ensure API compatibility
|
|
80
|
-
|
|
81
|
-
### Enhanced
|
|
82
|
-
- **PDF Processing**: Replaced PDF.js with pdf-to-png-converter for better Node.js compatibility
|
|
83
|
-
- Resolves canvas rendering issues in Node.js environment
|
|
84
|
-
- More reliable PDF-to-image conversion
|
|
85
|
-
- Better error handling and debugging
|
|
86
|
-
- **AI Model**: Updated to Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
|
|
87
|
-
- Latest Claude model with enhanced vision capabilities
|
|
88
|
-
- Improved accuracy for document analysis
|
|
89
|
-
- Better understanding of complex document layouts
|
|
90
|
-
|
|
91
|
-
### Technical
|
|
92
|
-
- Replaced `pdfjs-dist` with `pdf-to-png-converter` package
|
|
93
|
-
- Enhanced PDFToImageConverter with size optimization algorithms
|
|
94
|
-
- Added comprehensive test suite for PDF-to-image conversion (12 new tests)
|
|
95
|
-
- Improved error logging with detailed stack traces
|
|
43
|
+
- Scanned PDF support: image-only PDFs are automatically detected and sent to vision AI for analysis
|
|
44
|
+
- Automatic image optimization to stay within the Claude 5MB API limit (progressive JPEG compression and dimension scaling)
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
- Replaced `pdfjs-dist` with `pdf-to-png-converter` for more reliable PDF-to-image conversion in Node.js
|
|
48
|
+
- Updated default Claude model to claude-sonnet-4-5-20250929
|
|
96
49
|
|
|
97
50
|
### Fixed
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
### Examples
|
|
103
|
-
```bash
|
|
104
|
-
# Process directory with scanned PDFs
|
|
105
|
-
namewise rename ./documents --dry-run
|
|
106
|
-
|
|
107
|
-
# Scanned PDFs are automatically detected and processed:
|
|
108
|
-
# Input: Iran-criminal-record-2.pdf (scanned, no text)
|
|
109
|
-
# Output: iran-criminal-record-certificate.pdf
|
|
110
|
-
#
|
|
111
|
-
# Input: Luxembourg-identity-2025.pdf (scanned, 14.7MB image)
|
|
112
|
-
# Output: luxembourg-identity-card-2025.pdf (optimized to <5MB)
|
|
113
|
-
```
|
|
51
|
+
- "Image or Canvas expected" errors when processing scanned PDFs
|
|
52
|
+
- "image exceeds 5 MB maximum" errors with large scanned documents
|
|
53
|
+
- Deprecated model warnings from the Anthropic API
|
|
114
54
|
|
|
115
55
|
## [0.4.1] - 2025-09-15
|
|
116
56
|
|
|
117
|
-
###
|
|
118
|
-
-
|
|
119
|
-
- **Documentation**: Improved examples and usage documentation
|
|
57
|
+
### Changed
|
|
58
|
+
- Improved stability and consistency across all AI providers
|
|
120
59
|
|
|
121
60
|
## [0.4.0] - 2025-09-15
|
|
122
61
|
|
|
123
62
|
### Added
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
|
|
133
|
-
- Smart folder name filtering to ignore irrelevant names like "no", "temp", "downloads"
|
|
134
|
-
- Enhanced prompts that focus on document content rather than metadata
|
|
135
|
-
- Support for detecting visa applications, contracts, medical records, certificates
|
|
136
|
-
|
|
137
|
-
### Architecture
|
|
138
|
-
- **Centralized Prompt System**: Single source of truth for all AI prompts
|
|
139
|
-
- Model-agnostic prompting that works across Claude, OpenAI, LMStudio, and Ollama
|
|
140
|
-
- Consolidated prompt building in `/src/utils/ai-prompts.ts`
|
|
141
|
-
- Consistent behavior across all AI providers
|
|
142
|
-
- Easier maintenance and updates
|
|
143
|
-
|
|
144
|
-
### Examples
|
|
145
|
-
```bash
|
|
146
|
-
# Use local Ollama service
|
|
147
|
-
namewise rename ./documents --provider ollama --dry-run
|
|
148
|
-
|
|
149
|
-
# Use LMStudio with custom model
|
|
150
|
-
namewise rename ./files --provider lmstudio --base-url http://localhost:1234 --model codellama
|
|
151
|
-
|
|
152
|
-
# Enhanced person name detection (Sarah example)
|
|
153
|
-
# Input: visitor-visa-application-for-family-in-canada.pdf (in folder "no")
|
|
154
|
-
# Output: sarah-visitor-visa-application-for-family-members-in-canada.pdf
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Technical
|
|
158
|
-
- Enhanced CLI with new provider options and base URL configuration
|
|
159
|
-
- Added availability checking and model discovery for local providers
|
|
63
|
+
- Ollama provider support for local LLM inference (`--provider ollama`)
|
|
64
|
+
- LMStudio provider support with OpenAI-compatible API (`--provider lmstudio`)
|
|
65
|
+
- `--base-url` flag to configure a custom endpoint for local LLM providers
|
|
66
|
+
- `--model` flag to specify the model for local LLM providers
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
- AI prompts now extract person names from document content and include them at the start of the filename
|
|
70
|
+
- Folder name hints are filtered to ignore common irrelevant names (e.g., "no", "temp", "downloads")
|
|
71
|
+
- Centralized all AI prompt logic into `src/utils/ai-prompts.ts` for consistency across providers
|
|
160
72
|
|
|
161
73
|
## [0.3.1] - 2025-09-05
|
|
162
74
|
|
|
163
75
|
### Security
|
|
164
|
-
-
|
|
165
|
-
- Enhanced Excel file parsing with improved security and reliability
|
|
76
|
+
- Replaced vulnerable `xlsx` package with `exceljs` for Excel file parsing
|
|
166
77
|
|
|
167
|
-
###
|
|
168
|
-
-
|
|
169
|
-
- Updated Node.js versions in CI pipelines
|
|
170
|
-
- Improved test workflow reliability and build process
|
|
78
|
+
### Changed
|
|
79
|
+
- Updated CI pipelines to test against Node.js 20, 22, and 24
|
|
171
80
|
|
|
172
81
|
## [0.3.0] - 2025-09-05
|
|
173
82
|
|
|
174
83
|
### Added
|
|
175
|
-
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
- `photo`: Photos with personal info (e.g., `vacation-paris-john-20240715.jpg`)
|
|
181
|
-
- `book`: Books with author names (e.g., `george-orwell-1984.pdf`)
|
|
182
|
-
- `general`: General files without special formatting
|
|
183
|
-
- **Smart File Categorization**: Automatically detects file type based on extension and content
|
|
184
|
-
- **Personal Name Integration**: `-n, --name` option to include your name in documents
|
|
185
|
-
- **Flexible Date Formats**: `-d, --date` option with formats:
|
|
186
|
-
- `YYYY-MM-DD`: 2025-09-05
|
|
187
|
-
- `YYYY`: 2025
|
|
188
|
-
- `YYYYMMDD`: 20250905
|
|
189
|
-
- `none`: No date (default)
|
|
190
|
-
- **Category Templates**: `-t, --template` option to specify file category or use auto-detection
|
|
191
|
-
|
|
192
|
-
### Enhanced
|
|
193
|
-
- AI prompts now include category-specific instructions for better filename generation
|
|
194
|
-
- File processing pipeline includes template application after AI generation
|
|
195
|
-
- Comprehensive test coverage with 131 tests (23 new tests for templates)
|
|
196
|
-
|
|
197
|
-
### Examples
|
|
198
|
-
```bash
|
|
199
|
-
# Personal documents with your name and date
|
|
200
|
-
namewise rename ./documents -t document -n "amirhossein" -d "YYYYMMDD" --dry-run
|
|
201
|
-
# Result: driving-license-amirhossein-20250905.pdf
|
|
202
|
-
|
|
203
|
-
# Movies with auto-detection
|
|
204
|
-
namewise rename ./movies --dry-run
|
|
205
|
-
# Result: the-dark-knight-2008.mkv
|
|
206
|
-
|
|
207
|
-
# Series with season/episode detection
|
|
208
|
-
namewise rename ./shows --dry-run
|
|
209
|
-
# Result: breaking-bad-s01e01.mkv
|
|
210
|
-
|
|
211
|
-
# Music with artist names
|
|
212
|
-
namewise rename ./music -t music --dry-run
|
|
213
|
-
# Result: the-beatles-hey-jude.mp3
|
|
214
|
-
```
|
|
84
|
+
- File category templates: `document`, `movie`, `music`, `series`, `photo`, `book`, `general`, `auto`
|
|
85
|
+
- `-t, --template` flag to select a category template
|
|
86
|
+
- `-n, --name` flag to include a personal name in filenames
|
|
87
|
+
- `-d, --date` flag with format options: `YYYY-MM-DD`, `YYYY`, `YYYYMMDD`, `none`
|
|
88
|
+
- Auto-categorization based on file extension, folder path, and content keywords
|
|
215
89
|
|
|
216
90
|
## [0.2.0] - 2025-09-05
|
|
217
91
|
|
|
218
92
|
### Added
|
|
219
|
-
-
|
|
220
|
-
- `kebab-case`: lowercase-with-hyphens (default)
|
|
221
|
-
- `snake_case`: lowercase_with_underscores
|
|
222
|
-
- `camelCase`: camelCaseFormat
|
|
223
|
-
- `PascalCase`: PascalCaseFormat
|
|
224
|
-
- `lowercase`: lowercaseformat
|
|
225
|
-
- `UPPERCASE`: UPPERCASEFORMAT
|
|
226
|
-
- AI services now receive naming convention instructions and generate appropriately formatted filenames
|
|
227
|
-
- Enhanced filename sanitization with convention-aware processing
|
|
228
|
-
|
|
229
|
-
### Example Usage
|
|
230
|
-
```bash
|
|
231
|
-
# Use snake_case naming
|
|
232
|
-
namewise rename ./docs --case snake_case --dry-run
|
|
233
|
-
|
|
234
|
-
# Use camelCase naming
|
|
235
|
-
namewise rename ./docs --case camelCase --provider openai
|
|
236
|
-
```
|
|
93
|
+
- `-c, --case` flag for naming convention: `kebab-case`, `snake_case`, `camelCase`, `PascalCase`, `lowercase`, `UPPERCASE`
|
|
237
94
|
|
|
238
95
|
## [0.1.5] - 2025-09-05
|
|
239
96
|
|
|
240
|
-
###
|
|
241
|
-
-
|
|
242
|
-
-
|
|
243
|
-
- Added progress counter showing current file being processed `(3/7)`
|
|
244
|
-
- Cleaner console output with proper line clearing after processing
|
|
97
|
+
### Changed
|
|
98
|
+
- Progress display now updates in place on a single line with a `[current/total]` counter
|
|
99
|
+
- Results output changed to `original-name -> new-name` format for clarity
|
|
245
100
|
|
|
246
101
|
## [0.1.4] - 2025-09-05
|
|
247
102
|
|
|
248
103
|
### Fixed
|
|
249
|
-
-
|
|
250
|
-
- Console output now properly displays line breaks for better readability
|
|
104
|
+
- Console output was printing literal `\n` instead of newlines
|
|
251
105
|
|
|
252
106
|
## [0.1.3] - 2025-09-05
|
|
253
107
|
|
|
254
108
|
### Changed
|
|
255
|
-
-
|
|
256
|
-
- CLI binary
|
|
257
|
-
- All documentation and references updated to reflect new name
|
|
109
|
+
- Renamed package from `ai-rename` to `namewise`
|
|
110
|
+
- Renamed CLI binary from `ai-rename` to `namewise`
|
|
258
111
|
|
|
259
112
|
## [0.1.1] - 2025-09-05
|
|
260
113
|
|
|
261
114
|
### Changed
|
|
262
|
-
-
|
|
263
|
-
- CLI binary
|
|
264
|
-
- All documentation and references updated to reflect new name
|
|
115
|
+
- Renamed package from `smart-rename` to `ai-rename` (original name was taken on npm)
|
|
116
|
+
- Renamed CLI binary from `smart-rename` to `ai-rename`
|
|
265
117
|
|
|
266
118
|
## [0.1.0] - 2025-09-05
|
|
267
119
|
|
|
268
120
|
### Added
|
|
269
|
-
- Initial
|
|
121
|
+
- Initial release
|
|
270
122
|
- AI-powered file renaming using Claude or OpenAI
|
|
271
|
-
- Support for PDF,
|
|
272
|
-
- Dry-run mode
|
|
273
|
-
- File conflict detection
|
|
274
|
-
- Configurable file size
|
|
275
|
-
- Interactive API key
|
|
276
|
-
- Comprehensive test suite (65 tests, 90%+ branch coverage)
|
|
277
|
-
- CLI with intuitive commands and options
|
|
278
|
-
|
|
279
|
-
### Features
|
|
280
|
-
- **Document Parsers**: PDF, DOCX, DOC, XLSX, XLS, TXT, MD, RTF
|
|
281
|
-
- **AI Providers**: Claude (Anthropic) and OpenAI support
|
|
282
|
-
- **Safety Features**: Dry-run mode, conflict detection, error handling
|
|
283
|
-
- **Configuration**: Flexible options for provider, API keys, and file sizes
|
|
284
|
-
|
|
285
|
-
### Technical
|
|
286
|
-
- TypeScript implementation with strict typing
|
|
287
|
-
- ESM module support
|
|
288
|
-
- Node.js 18+ compatibility
|
|
289
|
-
- Vitest testing framework
|
|
290
|
-
- Commander.js CLI framework
|
|
123
|
+
- Support for PDF, DOCX, DOC, XLSX, XLS, TXT, MD, and RTF files
|
|
124
|
+
- Dry-run mode to preview changes without renaming
|
|
125
|
+
- File conflict detection
|
|
126
|
+
- Configurable file size limit
|
|
127
|
+
- Interactive API key prompt when no key is set in the environment
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Namewise
|
|
2
2
|
|
|
3
|
-
[](#testing--development)
|
|
4
4
|
[](#testing--development)
|
|
5
5
|
[](https://www.typescriptlang.org/)
|
|
6
6
|
[](https://nodejs.org/)
|
|
@@ -73,7 +73,7 @@ namewise undo [session-id] [options]
|
|
|
73
73
|
|--------|-------------|---------|
|
|
74
74
|
| `--provider` | AI provider (`claude`, `openai`, `ollama`, `lmstudio`) | `claude` |
|
|
75
75
|
| `--base-url` | Base URL for local LLM providers | Auto-detected |
|
|
76
|
-
| `--model` | Model name for
|
|
76
|
+
| `--model` | Model name (overrides provider default for any provider) | Provider default |
|
|
77
77
|
| `--api-key` | API key for the chosen provider | Interactive prompt |
|
|
78
78
|
| `--case` | Naming convention (kebab-case, snake_case, camelCase, PascalCase, lowercase, UPPERCASE) | `kebab-case` |
|
|
79
79
|
| `--template` | File category template (document, movie, music, series, photo, book, general, auto) | `general` |
|
|
@@ -218,11 +218,11 @@ Supported keys: `provider`, `case`, `template`, `name`, `date`, `maxSize`, `mode
|
|
|
218
218
|
|----------|---------|----------------|-------------|
|
|
219
219
|
| `general` | `{content}` | `meeting-notes-q4-2024.pdf` | Default — simple descriptive names |
|
|
220
220
|
| `document` | `{content}-{name}-{date}` | `driving-license-john-20250905.pdf` | Personal documents, contracts, certificates |
|
|
221
|
-
| `movie` |
|
|
222
|
-
| `series` |
|
|
223
|
-
| `music` |
|
|
221
|
+
| `movie` | AI provides full name | `the-dark-knight-2008.mkv` | Movie files — AI includes release year |
|
|
222
|
+
| `series` | AI provides full name | `breaking-bad-s01e01.mkv` | TV series — AI includes season/episode |
|
|
223
|
+
| `music` | AI provides full name | `the-beatles-hey-jude.mp3` | Music files — AI includes artist name |
|
|
224
224
|
| `photo` | `{content}-{name}-{date}` | `vacation-paris-john-20240715.jpg` | Personal photos |
|
|
225
|
-
| `book` |
|
|
225
|
+
| `book` | AI provides full name | `george-orwell-1984.pdf` | Books — AI includes author name |
|
|
226
226
|
| `auto` | *Automatic* | *Varies by detected type* | Let AI detect and choose best template |
|
|
227
227
|
|
|
228
228
|
## AI Provider Setup
|
|
@@ -247,18 +247,20 @@ Supported keys: `provider`, `case`, `template`, `name`, `date`, `maxSize`, `mode
|
|
|
247
247
|
1. Visit [Anthropic Console](https://console.anthropic.com/)
|
|
248
248
|
2. Generate an API key
|
|
249
249
|
3. `export ANTHROPIC_API_KEY=your-key`
|
|
250
|
+
4. Default model: `claude-sonnet-4-5-20250929` (override with `--model`)
|
|
250
251
|
|
|
251
252
|
**OpenAI**
|
|
252
253
|
1. Visit [OpenAI Platform](https://platform.openai.com/api-keys)
|
|
253
254
|
2. Create an API key
|
|
254
255
|
3. `export OPENAI_API_KEY=your-key`
|
|
256
|
+
4. Default model: `gpt-4o` (override with `--model`)
|
|
255
257
|
|
|
256
258
|
## How It Works
|
|
257
259
|
|
|
258
260
|
1. **File Discovery**: Scans directory (recursively if `--recursive`) for supported file types
|
|
259
|
-
2. **Content Extraction**: Uses specialized parsers to extract text; falls back to vision AI for scanned PDFs
|
|
260
|
-
3. **AI Processing**: Sends content to the configured AI provider for filename suggestions
|
|
261
|
-
4. **Template & Convention**: Applies the chosen category template and naming convention
|
|
261
|
+
2. **Content Extraction**: Uses specialized parsers to extract text and metadata; falls back to vision AI for scanned PDFs
|
|
262
|
+
3. **AI Processing**: Sends up to 5000 characters of content plus metadata to the configured AI provider for filename suggestions
|
|
263
|
+
4. **Template & Convention**: Applies the chosen category template and naming convention; for `document` and `photo` templates, uses the document's own creation date from metadata when available
|
|
262
264
|
5. **Conflict Resolution**: If the target name exists, auto-numbers (`-2`, `-3`, …)
|
|
263
265
|
6. **Rename / Preview**: Renames files on disk, or shows a preview in dry-run mode
|
|
264
266
|
7. **History**: Saves the session to `~/.namewise/history.json` for later undo
|
|
@@ -270,7 +272,7 @@ Supported keys: `provider`, `case`, `template`, `name`, `date`, `maxSize`, `mode
|
|
|
270
272
|
- **Conflict Auto-Numbering**: Never overwrites an existing file
|
|
271
273
|
- **File Size Limits**: Skips files above `--max-size`
|
|
272
274
|
- **Extension Preservation**: Original file extensions are never changed
|
|
273
|
-
- **Comprehensive Testing**:
|
|
275
|
+
- **Comprehensive Testing**: 457 tests with 100% coverage
|
|
274
276
|
|
|
275
277
|
## Testing & Development
|
|
276
278
|
|
package/dist/cli/commands.js
CHANGED
|
@@ -14,7 +14,7 @@ export function setupCommands(program) {
|
|
|
14
14
|
.option('--dry-run', 'Preview changes without renaming files (RECOMMENDED first!)', false)
|
|
15
15
|
.option('--max-size <size>', 'Maximum file size in MB (default: 10)')
|
|
16
16
|
.option('--base-url <url>', 'Base URL for local LLM providers')
|
|
17
|
-
.option('--model <name>', 'Model name
|
|
17
|
+
.option('--model <name>', 'Model name to use (overrides provider default)')
|
|
18
18
|
.option('-r, --recursive', 'Recursively scan subdirectories', false)
|
|
19
19
|
.option('--depth <n>', 'Maximum recursion depth when using --recursive')
|
|
20
20
|
.option('--concurrency <n>', 'Files to process in parallel (default: 3)')
|
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;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,
|
|
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,gDAAgD,CAAC;SAC1E,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM3D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,MAAM,CAAC,EAAE,MAAM;IAS3B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIlD,sBAAsB,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM3D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,MAAM,CAAC,EAAE,MAAM;IAS3B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIlD,sBAAsB,IAAI,MAAM,EAAE;CAMnC"}
|
package/dist/parsers/factory.js
CHANGED
|
@@ -16,17 +16,8 @@ export class DocumentParserFactory {
|
|
|
16
16
|
return this.parsers.find(parser => parser.supports(filePath)) || null;
|
|
17
17
|
}
|
|
18
18
|
getSupportedExtensions() {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
extensions.add('.pdf');
|
|
22
|
-
extensions.add('.docx');
|
|
23
|
-
extensions.add('.doc');
|
|
24
|
-
extensions.add('.xlsx');
|
|
25
|
-
extensions.add('.xls');
|
|
26
|
-
extensions.add('.txt');
|
|
27
|
-
extensions.add('.md');
|
|
28
|
-
extensions.add('.rtf');
|
|
29
|
-
return Array.from(extensions);
|
|
19
|
+
const candidates = ['.pdf', '.docx', '.doc', '.xlsx', '.xls', '.txt', '.md', '.rtf'];
|
|
20
|
+
return candidates.filter(ext => this.parsers.some(parser => parser.supports(`file${ext}`)));
|
|
30
21
|
}
|
|
31
22
|
}
|
|
32
23
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,qBAAqB;IACxB,OAAO,CAAmB;IAElC,YAAY,MAAe;QACzB,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,SAAS,EAAE;YACf,IAAI,UAAU,EAAE;YAChB,IAAI,WAAW,EAAE;YACjB,IAAI,UAAU,EAAE;SACjB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;IACxE,CAAC;IAED,sBAAsB;QACpB,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,OAAO,qBAAqB;IACxB,OAAO,CAAmB;IAElC,YAAY,MAAe;QACzB,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,SAAS,EAAE;YACf,IAAI,UAAU,EAAE;YAChB,IAAI,WAAW,EAAE;YACjB,IAAI,UAAU,EAAE;SACjB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;IACxE,CAAC;IAED,sBAAsB;QACpB,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrF,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -8,11 +8,11 @@ export class AIServiceFactory {
|
|
|
8
8
|
case 'claude':
|
|
9
9
|
if (!apiKey)
|
|
10
10
|
throw new Error('API key is required for Claude provider');
|
|
11
|
-
return new ClaudeService(apiKey);
|
|
11
|
+
return new ClaudeService(apiKey, localLLMConfig?.model);
|
|
12
12
|
case 'openai':
|
|
13
13
|
if (!apiKey)
|
|
14
14
|
throw new Error('API key is required for OpenAI provider');
|
|
15
|
-
return new OpenAIService(apiKey);
|
|
15
|
+
return new OpenAIService(apiKey, localLLMConfig?.model);
|
|
16
16
|
case 'ollama':
|
|
17
17
|
return new OllamaService(localLLMConfig?.baseUrl || 'http://localhost:11434', localLLMConfig?.model || 'llama3.1');
|
|
18
18
|
case 'lmstudio':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-factory.js","sourceRoot":"","sources":["../../src/services/ai-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOxD,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,MAAM,CACX,QAAqD,EACrD,MAAe,EACf,cAA+B;QAE/B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACxE,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-factory.js","sourceRoot":"","sources":["../../src/services/ai-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOxD,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,MAAM,CACX,QAAqD,EACrD,MAAe,EACf,cAA+B;QAE/B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACxE,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YAC1D,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACxE,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YAC1D,KAAK,QAAQ;gBACX,OAAO,IAAI,aAAa,CACtB,cAAc,EAAE,OAAO,IAAI,wBAAwB,EACnD,cAAc,EAAE,KAAK,IAAI,UAAU,CACpC,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO,IAAI,eAAe,CACxB,cAAc,EAAE,OAAO,IAAI,uBAAuB,EAClD,cAAc,EAAE,KAAK,IAAI,aAAa,CACvC,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -2,7 +2,8 @@ import { AIProvider, FileInfo } from '../types/index.js';
|
|
|
2
2
|
export declare class ClaudeService implements AIProvider {
|
|
3
3
|
name: string;
|
|
4
4
|
private client;
|
|
5
|
-
|
|
5
|
+
private model;
|
|
6
|
+
constructor(apiKey: string, model?: string);
|
|
6
7
|
generateFileName(content: string, originalName: string, namingConvention?: string, category?: string, fileInfo?: FileInfo): Promise<string>;
|
|
7
8
|
private sanitizeFileName;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-service.d.ts","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAKzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAY;
|
|
1
|
+
{"version":3,"file":"claude-service.d.ts","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAKzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAqB,EAAE,QAAQ,GAAE,MAAkB,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAkF1K,OAAO,CAAC,gBAAgB;CAuBzB"}
|
|
@@ -4,10 +4,10 @@ import { buildFileNamePrompt } from '../utils/ai-prompts.js';
|
|
|
4
4
|
export class ClaudeService {
|
|
5
5
|
name = 'Claude';
|
|
6
6
|
client;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
model;
|
|
8
|
+
constructor(apiKey, model) {
|
|
9
|
+
this.client = new Anthropic({ apiKey });
|
|
10
|
+
this.model = model ?? 'claude-sonnet-4-5-20250929';
|
|
11
11
|
}
|
|
12
12
|
async generateFileName(content, originalName, namingConvention = 'kebab-case', category = 'general', fileInfo) {
|
|
13
13
|
const convention = namingConvention;
|
|
@@ -30,7 +30,7 @@ export class ClaudeService {
|
|
|
30
30
|
fileInfo
|
|
31
31
|
});
|
|
32
32
|
response = await this.client.messages.create({
|
|
33
|
-
model:
|
|
33
|
+
model: this.model,
|
|
34
34
|
max_tokens: 100,
|
|
35
35
|
messages: [
|
|
36
36
|
{
|
|
@@ -63,7 +63,7 @@ export class ClaudeService {
|
|
|
63
63
|
fileInfo
|
|
64
64
|
});
|
|
65
65
|
response = await this.client.messages.create({
|
|
66
|
-
model:
|
|
66
|
+
model: this.model,
|
|
67
67
|
max_tokens: 100,
|
|
68
68
|
messages: [
|
|
69
69
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-service.js","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAoB,MAAM,gCAAgC,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,OAAO,aAAa;IACxB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAY;
|
|
1
|
+
{"version":3,"file":"claude-service.js","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;YAkE/C,UAAU;
|
|
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;YAoEV,eAAe;CAuB9B"}
|
|
@@ -100,7 +100,7 @@ export class FileRenamer {
|
|
|
100
100
|
throw new Error('AI service failed to generate a filename');
|
|
101
101
|
}
|
|
102
102
|
// Apply template to include personal info, dates, etc.
|
|
103
|
-
const templatedName = applyTemplate(coreFileName, fileCategory, this.config.templateOptions, this.config.namingConvention);
|
|
103
|
+
const templatedName = applyTemplate(coreFileName, fileCategory, this.config.templateOptions, this.config.namingConvention, file);
|
|
104
104
|
// Create new filename with original extension
|
|
105
105
|
const newFileName = `${templatedName}${file.extension}`;
|
|
106
106
|
const newPath = path.join(path.dirname(file.path), newFileName);
|
|
@@ -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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"}
|
|
@@ -2,7 +2,8 @@ import { AIProvider, FileInfo } from '../types/index.js';
|
|
|
2
2
|
export declare class OpenAIService implements AIProvider {
|
|
3
3
|
name: string;
|
|
4
4
|
private client;
|
|
5
|
-
|
|
5
|
+
private model;
|
|
6
|
+
constructor(apiKey: string, model?: string);
|
|
6
7
|
generateFileName(content: string, originalName: string, namingConvention?: string, category?: string, fileInfo?: FileInfo): Promise<string>;
|
|
7
8
|
private sanitizeFileName;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-service.d.ts","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAKzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;
|
|
1
|
+
{"version":3,"file":"openai-service.d.ts","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAKzD,qBAAa,aAAc,YAAW,UAAU;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAKpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAqB,EAAE,QAAQ,GAAE,MAAkB,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAgF1K,OAAO,CAAC,gBAAgB;CAuBzB"}
|
|
@@ -4,10 +4,10 @@ import { buildFileNamePrompt } from '../utils/ai-prompts.js';
|
|
|
4
4
|
export class OpenAIService {
|
|
5
5
|
name = 'OpenAI';
|
|
6
6
|
client;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
model;
|
|
8
|
+
constructor(apiKey, model) {
|
|
9
|
+
this.client = new OpenAI({ apiKey });
|
|
10
|
+
this.model = model ?? 'gpt-4o';
|
|
11
11
|
}
|
|
12
12
|
async generateFileName(content, originalName, namingConvention = 'kebab-case', category = 'general', fileInfo) {
|
|
13
13
|
const convention = namingConvention;
|
|
@@ -30,7 +30,7 @@ export class OpenAIService {
|
|
|
30
30
|
fileInfo
|
|
31
31
|
});
|
|
32
32
|
response = await this.client.chat.completions.create({
|
|
33
|
-
model:
|
|
33
|
+
model: this.model,
|
|
34
34
|
messages: [
|
|
35
35
|
{
|
|
36
36
|
role: 'user',
|
|
@@ -62,7 +62,7 @@ export class OpenAIService {
|
|
|
62
62
|
fileInfo
|
|
63
63
|
});
|
|
64
64
|
response = await this.client.chat.completions.create({
|
|
65
|
-
model:
|
|
65
|
+
model: this.model,
|
|
66
66
|
messages: [
|
|
67
67
|
{
|
|
68
68
|
role: 'user',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-service.js","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAoB,MAAM,gCAAgC,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,OAAO,aAAa;IACxB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAS;
|
|
1
|
+
{"version":3,"file":"openai-service.js","sourceRoot":"","sources":["../../src/services/openai-service.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/ai-prompts.js
CHANGED
|
@@ -57,8 +57,8 @@ Document Properties:`;
|
|
|
57
57
|
|
|
58
58
|
${metadataContext}
|
|
59
59
|
|
|
60
|
-
Document content (first
|
|
61
|
-
${content.substring(0,
|
|
60
|
+
Document content (first 5000 characters):
|
|
61
|
+
${content.substring(0, 5000)}
|
|
62
62
|
|
|
63
63
|
Important: If this document is specifically for or about a particular person mentioned in the content, start the filename with their name. Otherwise, focus on the document's main purpose and content.
|
|
64
64
|
|
|
@@ -13,6 +13,6 @@ export interface FileTemplate {
|
|
|
13
13
|
}
|
|
14
14
|
export declare const FILE_TEMPLATES: Record<Exclude<FileCategory, 'auto'>, FileTemplate>;
|
|
15
15
|
export declare function categorizeFile(filePath: string, content?: string, fileInfo?: FileInfo): FileCategory;
|
|
16
|
-
export declare function applyTemplate(aiGeneratedName: string, category: FileCategory, templateOptions: TemplateOptions, namingConvention: NamingConvention): string;
|
|
16
|
+
export declare function applyTemplate(aiGeneratedName: string, category: FileCategory, templateOptions: TemplateOptions, namingConvention: NamingConvention, fileInfo?: FileInfo): string;
|
|
17
17
|
export declare function getTemplateInstructions(category: FileCategory): string;
|
|
18
18
|
//# sourceMappingURL=file-templates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-templates.d.ts","sourceRoot":"","sources":["../../src/utils/file-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG/D,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7G,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACzD,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,YAAY,CAuE9E,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY,CAiHpG;AAED,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"file-templates.d.ts","sourceRoot":"","sources":["../../src/utils/file-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG/D,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7G,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACzD,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,YAAY,CAuE9E,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY,CAiHpG;AAED,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,CAAC,EAAE,QAAQ,GAClB,MAAM,CA4BR;AA8BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAoBtE"}
|
|
@@ -12,8 +12,8 @@ export const FILE_TEMPLATES = {
|
|
|
12
12
|
},
|
|
13
13
|
movie: {
|
|
14
14
|
category: 'movie',
|
|
15
|
-
pattern: '{content}
|
|
16
|
-
description: 'Movies
|
|
15
|
+
pattern: '{content}',
|
|
16
|
+
description: 'Movies — include release year in the name',
|
|
17
17
|
examples: [
|
|
18
18
|
'the-dark-knight-2008.mkv',
|
|
19
19
|
'inception-2010.mp4',
|
|
@@ -22,8 +22,8 @@ export const FILE_TEMPLATES = {
|
|
|
22
22
|
},
|
|
23
23
|
music: {
|
|
24
24
|
category: 'music',
|
|
25
|
-
pattern: '{
|
|
26
|
-
description: 'Music files
|
|
25
|
+
pattern: '{content}',
|
|
26
|
+
description: 'Music files — include artist name at the start',
|
|
27
27
|
examples: [
|
|
28
28
|
'the-beatles-hey-jude.mp3',
|
|
29
29
|
'queen-bohemian-rhapsody.flac',
|
|
@@ -32,8 +32,8 @@ export const FILE_TEMPLATES = {
|
|
|
32
32
|
},
|
|
33
33
|
series: {
|
|
34
34
|
category: 'series',
|
|
35
|
-
pattern: '{content}
|
|
36
|
-
description: 'TV series
|
|
35
|
+
pattern: '{content}',
|
|
36
|
+
description: 'TV series — include show name, season, and episode number',
|
|
37
37
|
examples: [
|
|
38
38
|
'breaking-bad-s01e01.mkv',
|
|
39
39
|
'game-of-thrones-s04e09.mp4',
|
|
@@ -52,8 +52,8 @@ export const FILE_TEMPLATES = {
|
|
|
52
52
|
},
|
|
53
53
|
book: {
|
|
54
54
|
category: 'book',
|
|
55
|
-
pattern: '{
|
|
56
|
-
description: 'Books
|
|
55
|
+
pattern: '{content}',
|
|
56
|
+
description: 'Books — include author name at the start',
|
|
57
57
|
examples: [
|
|
58
58
|
'george-orwell-1984.pdf',
|
|
59
59
|
'j-k-rowling-harry-potter-philosophers-stone.epub',
|
|
@@ -176,7 +176,7 @@ export function categorizeFile(filePath, content, fileInfo) {
|
|
|
176
176
|
return 'book';
|
|
177
177
|
return 'general';
|
|
178
178
|
}
|
|
179
|
-
export function applyTemplate(aiGeneratedName, category, templateOptions, namingConvention) {
|
|
179
|
+
export function applyTemplate(aiGeneratedName, category, templateOptions, namingConvention, fileInfo) {
|
|
180
180
|
if (category === 'auto') {
|
|
181
181
|
throw new Error('Cannot apply template for "auto" category. Category should be resolved before calling applyTemplate.');
|
|
182
182
|
}
|
|
@@ -188,7 +188,8 @@ export function applyTemplate(aiGeneratedName, category, templateOptions, naming
|
|
|
188
188
|
result = result.replace('{personalName}', templateOptions.personalName);
|
|
189
189
|
}
|
|
190
190
|
if (templateOptions.dateFormat && templateOptions.dateFormat !== 'none') {
|
|
191
|
-
const
|
|
191
|
+
const dateToUse = fileInfo?.documentMetadata?.creationDate ?? new Date();
|
|
192
|
+
const date = formatDate(dateToUse, templateOptions.dateFormat);
|
|
192
193
|
result = result.replace('{date}', date);
|
|
193
194
|
}
|
|
194
195
|
// Clean up any remaining unreplaced variables
|
|
@@ -227,6 +228,19 @@ export function getTemplateInstructions(category) {
|
|
|
227
228
|
return 'Generate appropriate filename based on detected file type and content.';
|
|
228
229
|
}
|
|
229
230
|
const template = FILE_TEMPLATES[category];
|
|
230
|
-
|
|
231
|
+
const baseInstruction = `Generate filename for ${category} type files. ${template.description}.`;
|
|
232
|
+
const exampleInstruction = `Examples (without extension): ${template.examples.map(e => e.replace(/\.[^.]+$/, '')).join(', ')}`;
|
|
233
|
+
switch (category) {
|
|
234
|
+
case 'movie':
|
|
235
|
+
return `${baseInstruction} The complete name must include the release year at the end. ${exampleInstruction}`;
|
|
236
|
+
case 'music':
|
|
237
|
+
return `${baseInstruction} The complete name must start with the artist name followed by the track title. ${exampleInstruction}`;
|
|
238
|
+
case 'series':
|
|
239
|
+
return `${baseInstruction} The complete name must include the season and episode numbers (e.g. s01e01). ${exampleInstruction}`;
|
|
240
|
+
case 'book':
|
|
241
|
+
return `${baseInstruction} The complete name must start with the author name followed by the book title. ${exampleInstruction}`;
|
|
242
|
+
default:
|
|
243
|
+
return `${baseInstruction} ${exampleInstruction}`;
|
|
244
|
+
}
|
|
231
245
|
}
|
|
232
246
|
//# sourceMappingURL=file-templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-templates.js","sourceRoot":"","sources":["../../src/utils/file-templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAiBhE,MAAM,CAAC,MAAM,cAAc,GAAwD;IACjF,QAAQ,EAAE;QACR,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,iCAAiC;QAC1C,WAAW,EAAE,uCAAuC;QACpD,QAAQ,EAAE;YACR,0CAA0C;YAC1C,sDAAsD;YACtD,uCAAuC;SACxC;KACF;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file-templates.js","sourceRoot":"","sources":["../../src/utils/file-templates.ts"],"names":[],"mappings":"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"}
|