@amirdaraee/namewise 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +94 -0
- package/README.md +8 -8
- package/dist/cli/apply.d.ts.map +1 -1
- package/dist/cli/apply.js +33 -6
- package/dist/cli/apply.js.map +1 -1
- package/dist/cli/clean-empty.d.ts.map +1 -1
- package/dist/cli/clean-empty.js +2 -3
- package/dist/cli/clean-empty.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +18 -37
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +7 -4
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/dedup.d.ts.map +1 -1
- package/dist/cli/dedup.js +3 -11
- package/dist/cli/dedup.js.map +1 -1
- package/dist/cli/diff.d.ts.map +1 -1
- package/dist/cli/diff.js +3 -7
- package/dist/cli/diff.js.map +1 -1
- package/dist/cli/find.d.ts.map +1 -1
- package/dist/cli/find.js +2 -3
- package/dist/cli/find.js.map +1 -1
- package/dist/cli/flatten.d.ts.map +1 -1
- package/dist/cli/flatten.js +4 -11
- package/dist/cli/flatten.js.map +1 -1
- package/dist/cli/handle-cli-error.d.ts +7 -0
- package/dist/cli/handle-cli-error.d.ts.map +1 -0
- package/dist/cli/handle-cli-error.js +27 -0
- package/dist/cli/handle-cli-error.js.map +1 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +8 -6
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/organize.d.ts.map +1 -1
- package/dist/cli/organize.js +4 -11
- package/dist/cli/organize.js.map +1 -1
- package/dist/cli/rename.d.ts +4 -2
- package/dist/cli/rename.d.ts.map +1 -1
- package/dist/cli/rename.js +171 -227
- package/dist/cli/rename.js.map +1 -1
- package/dist/cli/sanitize.d.ts.map +1 -1
- package/dist/cli/sanitize.js +4 -12
- package/dist/cli/sanitize.js.map +1 -1
- package/dist/cli/shared-config.d.ts +60 -0
- package/dist/cli/shared-config.d.ts.map +1 -0
- package/dist/cli/shared-config.js +64 -0
- package/dist/cli/shared-config.js.map +1 -0
- package/dist/cli/stats.d.ts.map +1 -1
- package/dist/cli/stats.js +2 -4
- package/dist/cli/stats.js.map +1 -1
- package/dist/cli/tree.d.ts.map +1 -1
- package/dist/cli/tree.js +2 -3
- package/dist/cli/tree.js.map +1 -1
- package/dist/cli/watch.d.ts +3 -1
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +19 -63
- package/dist/cli/watch.js.map +1 -1
- package/dist/parsers/pdf-parser.d.ts.map +1 -1
- package/dist/parsers/pdf-parser.js +44 -27
- package/dist/parsers/pdf-parser.js.map +1 -1
- package/dist/services/base-cloud-service.d.ts +32 -0
- package/dist/services/base-cloud-service.d.ts.map +1 -0
- package/dist/services/base-cloud-service.js +73 -0
- package/dist/services/base-cloud-service.js.map +1 -0
- package/dist/services/base-local-service.d.ts +18 -0
- package/dist/services/base-local-service.d.ts.map +1 -0
- package/dist/services/base-local-service.js +81 -0
- package/dist/services/base-local-service.js.map +1 -0
- package/dist/services/claude-service.d.ts +8 -6
- package/dist/services/claude-service.d.ts.map +1 -1
- package/dist/services/claude-service.js +40 -98
- package/dist/services/claude-service.js.map +1 -1
- package/dist/services/file-renamer.d.ts +7 -0
- package/dist/services/file-renamer.d.ts.map +1 -1
- package/dist/services/file-renamer.js +63 -12
- package/dist/services/file-renamer.js.map +1 -1
- package/dist/services/lmstudio-service.d.ts +35 -9
- package/dist/services/lmstudio-service.d.ts.map +1 -1
- package/dist/services/lmstudio-service.js +23 -101
- package/dist/services/lmstudio-service.js.map +1 -1
- package/dist/services/ollama-service.d.ts +23 -9
- package/dist/services/ollama-service.d.ts.map +1 -1
- package/dist/services/ollama-service.js +16 -87
- package/dist/services/ollama-service.js.map +1 -1
- package/dist/services/openai-service.d.ts +8 -6
- package/dist/services/openai-service.d.ts.map +1 -1
- package/dist/services/openai-service.js +36 -94
- package/dist/services/openai-service.js.map +1 -1
- package/dist/utils/ai-name-sanitizer.d.ts +14 -0
- package/dist/utils/ai-name-sanitizer.d.ts.map +1 -0
- package/dist/utils/ai-name-sanitizer.js +55 -0
- package/dist/utils/ai-name-sanitizer.js.map +1 -0
- package/dist/utils/ai-prompts.d.ts.map +1 -1
- package/dist/utils/ai-prompts.js +2 -1
- package/dist/utils/ai-prompts.js.map +1 -1
- package/dist/utils/assert-directory.d.ts +9 -0
- package/dist/utils/assert-directory.d.ts.map +1 -0
- package/dist/utils/assert-directory.js +15 -0
- package/dist/utils/assert-directory.js.map +1 -0
- package/dist/utils/file-info.d.ts +8 -0
- package/dist/utils/file-info.d.ts.map +1 -0
- package/dist/utils/file-info.js +25 -0
- package/dist/utils/file-info.js.map +1 -0
- package/dist/utils/file-templates.d.ts.map +1 -1
- package/dist/utils/file-templates.js +31 -1
- package/dist/utils/file-templates.js.map +1 -1
- package/dist/utils/image-compressor.d.ts +1 -1
- package/dist/utils/image-compressor.d.ts.map +1 -1
- package/dist/utils/image-compressor.js +4 -2
- package/dist/utils/image-compressor.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +4 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/record-session.d.ts +18 -0
- package/dist/utils/record-session.d.ts.map +1 -0
- package/dist/utils/record-session.js +24 -0
- package/dist/utils/record-session.js.map +1 -0
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +1 -7
- package/dist/utils/ui.js.map +1 -1
- package/package.json +17 -18
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AIProvider, FileInfo, AINameResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared skeleton for local AI providers (Ollama, LMStudio): localhost URL
|
|
4
|
+
* validation, HTTP request/status mapping, and the generateFileName flow.
|
|
5
|
+
* Subclasses supply the chat request payload and response extraction.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class BaseLocalService<TRequest, TResponse> implements AIProvider {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
protected baseUrl: string;
|
|
10
|
+
protected model: string;
|
|
11
|
+
protected constructor(name: string, baseUrl: string, model: string);
|
|
12
|
+
private validateLocalUrl;
|
|
13
|
+
generateFileName(content: string, originalName: string, namingConvention?: string, category?: string, fileInfo?: FileInfo, language?: string, context?: string, imageData?: string): Promise<AINameResult>;
|
|
14
|
+
/** Sends the chat request and returns the raw response content, if any. */
|
|
15
|
+
protected abstract requestCompletion(prompt: string, imageData?: string): Promise<string | undefined>;
|
|
16
|
+
protected makeRequest(endpoint: string, payload: TRequest): Promise<TResponse>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=base-local-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-local-service.d.ts","sourceRoot":"","sources":["../../src/services/base-local-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOvE;;;;GAIG;AACH,8BAAsB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAE,YAAW,UAAU;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IAExB,SAAS,aAAa,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAMlE,OAAO,CAAC,gBAAgB;IAelB,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,gBAAgB,SAAe,EAC/B,QAAQ,SAAY,EACpB,QAAQ,CAAC,EAAE,QAAQ,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC;IA8BxB,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;cAErF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;CAqBrF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { buildFileNamePrompt } from '../utils/ai-prompts.js';
|
|
2
|
+
import { AuthError, NetworkError, RateLimitError, ConfigError } from '../errors.js';
|
|
3
|
+
import { sanitizeLocalFileName } from '../utils/ai-name-sanitizer.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shared skeleton for local AI providers (Ollama, LMStudio): localhost URL
|
|
6
|
+
* validation, HTTP request/status mapping, and the generateFileName flow.
|
|
7
|
+
* Subclasses supply the chat request payload and response extraction.
|
|
8
|
+
*/
|
|
9
|
+
export class BaseLocalService {
|
|
10
|
+
name;
|
|
11
|
+
baseUrl;
|
|
12
|
+
model;
|
|
13
|
+
constructor(name, baseUrl, model) {
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.baseUrl = this.validateLocalUrl(baseUrl);
|
|
16
|
+
this.model = model;
|
|
17
|
+
}
|
|
18
|
+
validateLocalUrl(url) {
|
|
19
|
+
let parsed;
|
|
20
|
+
try {
|
|
21
|
+
parsed = new URL(url);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new ConfigError(`Invalid ${this.name} base URL: ${url}`);
|
|
25
|
+
}
|
|
26
|
+
const hostname = parsed.hostname.toLowerCase();
|
|
27
|
+
const allowed = hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '[::1]';
|
|
28
|
+
if (!allowed) {
|
|
29
|
+
throw new ConfigError(`${this.name} base URL must point to localhost (got: ${hostname})`);
|
|
30
|
+
}
|
|
31
|
+
return url;
|
|
32
|
+
}
|
|
33
|
+
async generateFileName(content, originalName, namingConvention = 'kebab-case', category = 'general', fileInfo, language, context, imageData) {
|
|
34
|
+
try {
|
|
35
|
+
if (imageData && (!imageData.startsWith('data:image/') || !imageData.includes(','))) {
|
|
36
|
+
throw new NetworkError('Invalid image data format');
|
|
37
|
+
}
|
|
38
|
+
const prompt = buildFileNamePrompt({
|
|
39
|
+
content: imageData
|
|
40
|
+
? 'Analyze this image and generate an appropriate filename based on what you see.'
|
|
41
|
+
: content,
|
|
42
|
+
originalName,
|
|
43
|
+
namingConvention: namingConvention,
|
|
44
|
+
category: category,
|
|
45
|
+
fileInfo,
|
|
46
|
+
language,
|
|
47
|
+
context
|
|
48
|
+
});
|
|
49
|
+
const responseContent = await this.requestCompletion(prompt, imageData);
|
|
50
|
+
if (responseContent) {
|
|
51
|
+
return { name: sanitizeLocalFileName(responseContent), inputTokens: undefined, outputTokens: undefined };
|
|
52
|
+
}
|
|
53
|
+
throw new NetworkError(`No response content from ${this.name}`);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof AuthError || error instanceof NetworkError || error instanceof RateLimitError || error instanceof ConfigError)
|
|
57
|
+
throw error;
|
|
58
|
+
throw new NetworkError(`${this.name} service failed: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async makeRequest(endpoint, payload) {
|
|
62
|
+
const url = `${this.baseUrl}${endpoint}`;
|
|
63
|
+
const response = await fetch(url, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: { 'Content-Type': 'application/json' },
|
|
66
|
+
body: JSON.stringify(payload)
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
const errorText = await response.text();
|
|
70
|
+
if (response.status === 401 || response.status === 403) {
|
|
71
|
+
throw new AuthError(`${this.name} authentication failed`, { details: { status: response.status, body: errorText } });
|
|
72
|
+
}
|
|
73
|
+
if (response.status === 429) {
|
|
74
|
+
throw new RateLimitError(`${this.name} rate limit exceeded`, { details: { status: response.status } });
|
|
75
|
+
}
|
|
76
|
+
throw new NetworkError(`${this.name} API request failed: ${response.status} ${response.statusText}`, { details: { status: response.status, body: errorText } });
|
|
77
|
+
}
|
|
78
|
+
return response.json();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=base-local-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-local-service.js","sourceRoot":"","sources":["../../src/services/base-local-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { BaseCloudService, CloudApiError, TokenUsage } from './base-cloud-service.js';
|
|
3
|
+
export declare class ClaudeService extends BaseCloudService<Anthropic.Message> {
|
|
4
4
|
private client;
|
|
5
|
-
private model;
|
|
6
5
|
constructor(apiKey: string, model?: string);
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
protected createTextCompletion(prompt: string): Promise<Anthropic.Message>;
|
|
7
|
+
protected createImageCompletion(prompt: string, imageData: string): Promise<Anthropic.Message>;
|
|
8
|
+
protected extractSuggestedName(response: Anthropic.Message): string;
|
|
9
|
+
protected extractTokenUsage(response: Anthropic.Message): TokenUsage;
|
|
10
|
+
protected asApiError(error: unknown): CloudApiError | undefined;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=claude-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-service.d.ts","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-service.d.ts","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtF,qBAAa,aAAc,SAAQ,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC;IACpE,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAK1C,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IAQ1E,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IAuB9F,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,GAAG,MAAM;IAMnE,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,GAAG,UAAU;IAOpE,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS;CAGhE"}
|
|
@@ -1,111 +1,53 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { buildFileNamePrompt } from '../utils/ai-prompts.js';
|
|
5
|
-
export class ClaudeService {
|
|
6
|
-
name = 'Claude';
|
|
2
|
+
import { BaseCloudService } from './base-cloud-service.js';
|
|
3
|
+
export class ClaudeService extends BaseCloudService {
|
|
7
4
|
client;
|
|
8
|
-
model;
|
|
9
5
|
constructor(apiKey, model) {
|
|
6
|
+
super('Claude', model ?? 'claude-opus-4-8');
|
|
10
7
|
this.client = new Anthropic({ apiKey });
|
|
11
|
-
this.model = model ?? 'claude-sonnet-4-5-20250929';
|
|
12
8
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
context
|
|
30
|
-
});
|
|
31
|
-
response = await this.client.messages.create({
|
|
32
|
-
model: this.model,
|
|
33
|
-
max_tokens: 100,
|
|
34
|
-
messages: [
|
|
9
|
+
createTextCompletion(prompt) {
|
|
10
|
+
return this.client.messages.create({
|
|
11
|
+
model: this.model,
|
|
12
|
+
max_tokens: 100,
|
|
13
|
+
messages: [{ role: 'user', content: prompt }]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
createImageCompletion(prompt, imageData) {
|
|
17
|
+
return this.client.messages.create({
|
|
18
|
+
model: this.model,
|
|
19
|
+
max_tokens: 100,
|
|
20
|
+
messages: [
|
|
21
|
+
{
|
|
22
|
+
role: 'user',
|
|
23
|
+
content: [
|
|
24
|
+
{ type: 'text', text: prompt },
|
|
35
25
|
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
type: 'base64',
|
|
43
|
-
media_type: imageData.startsWith('data:image/png') ? 'image/png' : 'image/jpeg',
|
|
44
|
-
data: imageData.split(',')[1]
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
]
|
|
26
|
+
type: 'image',
|
|
27
|
+
source: {
|
|
28
|
+
type: 'base64',
|
|
29
|
+
media_type: imageData.startsWith('data:image/png') ? 'image/png' : 'image/jpeg',
|
|
30
|
+
data: imageData.split(',')[1]
|
|
31
|
+
}
|
|
48
32
|
}
|
|
49
33
|
]
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
const prompt = buildFileNamePrompt({
|
|
54
|
-
content,
|
|
55
|
-
originalName,
|
|
56
|
-
namingConvention: convention,
|
|
57
|
-
category: fileCategory,
|
|
58
|
-
fileInfo,
|
|
59
|
-
language,
|
|
60
|
-
context
|
|
61
|
-
});
|
|
62
|
-
response = await this.client.messages.create({
|
|
63
|
-
model: this.model,
|
|
64
|
-
max_tokens: 100,
|
|
65
|
-
messages: [{ role: 'user', content: prompt }]
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
const suggestedName = response.content[0].type === 'text'
|
|
69
|
-
? response.content[0].text.trim()
|
|
70
|
-
: 'untitled-document';
|
|
71
|
-
return {
|
|
72
|
-
name: this.sanitizeFileName(suggestedName, convention),
|
|
73
|
-
inputTokens: response.usage?.input_tokens,
|
|
74
|
-
outputTokens: response.usage?.output_tokens
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
if (error instanceof AuthError || error instanceof NetworkError || error instanceof RateLimitError)
|
|
79
|
-
throw error;
|
|
80
|
-
if (error instanceof Anthropic.APIError) {
|
|
81
|
-
if (error.status === 401 || error.status === 403) {
|
|
82
|
-
throw new AuthError(`Claude authentication failed: ${error.message}`, { details: { status: error.status } });
|
|
83
|
-
}
|
|
84
|
-
if (error.status === 429) {
|
|
85
|
-
throw new RateLimitError(`Claude rate limit exceeded: ${error.message}`, { details: { status: error.status } });
|
|
86
34
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
extractSuggestedName(response) {
|
|
39
|
+
return response.content[0].type === 'text'
|
|
40
|
+
? response.content[0].text.trim()
|
|
41
|
+
: 'untitled-document';
|
|
42
|
+
}
|
|
43
|
+
extractTokenUsage(response) {
|
|
44
|
+
return {
|
|
45
|
+
inputTokens: response.usage?.input_tokens,
|
|
46
|
+
outputTokens: response.usage?.output_tokens
|
|
47
|
+
};
|
|
91
48
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const safeForWindows = stripWindowsIllegalChars(nameWithoutExt);
|
|
95
|
-
let cleaned = applyNamingConvention(safeForWindows, convention);
|
|
96
|
-
if (!cleaned) {
|
|
97
|
-
cleaned = applyNamingConvention('untitled document', convention);
|
|
98
|
-
}
|
|
99
|
-
else if (cleaned.length > 100) {
|
|
100
|
-
cleaned = cleaned.substring(0, 100);
|
|
101
|
-
if (convention === 'kebab-case') {
|
|
102
|
-
cleaned = cleaned.replace(/-[^-]*$/, '');
|
|
103
|
-
}
|
|
104
|
-
else if (convention === 'snake_case') {
|
|
105
|
-
cleaned = cleaned.replace(/_[^_]*$/, '');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return cleaned;
|
|
49
|
+
asApiError(error) {
|
|
50
|
+
return error instanceof Anthropic.APIError ? error : undefined;
|
|
109
51
|
}
|
|
110
52
|
}
|
|
111
53
|
//# sourceMappingURL=claude-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-service.js","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-service.js","sourceRoot":"","sources":["../../src/services/claude-service.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAA6B,MAAM,yBAAyB,CAAC;AAEtF,MAAM,OAAO,aAAc,SAAQ,gBAAmC;IAC5D,MAAM,CAAY;IAE1B,YAAY,MAAc,EAAE,KAAc;QACxC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,iBAAiB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAES,oBAAoB,CAAC,MAAc;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAES,qBAAqB,CAAC,MAAc,EAAE,SAAiB;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;wBAC9B;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;gCAC/E,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;6BAC9B;yBACF;qBACF;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAES,oBAAoB,CAAC,QAA2B;QACxD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM;YACxC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YACjC,CAAC,CAAC,mBAAmB,CAAC;IAC1B,CAAC;IAES,iBAAiB,CAAC,QAA2B;QACrD,OAAO;YACL,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY;YACzC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa;SAC5C,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,KAAc;QACjC,OAAO,KAAK,YAAY,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;CACF"}
|
|
@@ -6,10 +6,17 @@ export declare class FileRenamer {
|
|
|
6
6
|
private aiService;
|
|
7
7
|
private config;
|
|
8
8
|
private retryOptions;
|
|
9
|
+
private claimedTargets;
|
|
9
10
|
constructor(parserFactory: DocumentParserFactory, aiService: AIProvider | undefined, config: Config, retryOptions?: RetryOptions);
|
|
10
11
|
renameFiles(files: FileInfo[], onProgress?: (completed: number, total: number, currentFile: string) => void): Promise<RenameSessionResult>;
|
|
11
12
|
private renameFile;
|
|
12
13
|
private buildNameFromMetadata;
|
|
14
|
+
/**
|
|
15
|
+
* Build the i-th conflict candidate for a basename. When the name ends with
|
|
16
|
+
* the (convention-formatted) personal name, the counter goes before it so
|
|
17
|
+
* the personal name stays last: bill-2-john, not bill-john-2.
|
|
18
|
+
*/
|
|
19
|
+
private conflictCandidate;
|
|
13
20
|
private resolveConflict;
|
|
14
21
|
}
|
|
15
22
|
//# 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,EAAgB,UAAU,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-renamer.d.ts","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAgB,UAAU,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAwB5D,qBAAa,WAAW;IAOpB,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IAPtB,OAAO,CAAC,cAAc,CAAqB;gBAGjC,aAAa,EAAE,qBAAqB,EAEpC,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,YAAiB;IAGnC,WAAW,CACf,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,GAC3E,OAAO,CAAC,mBAAmB,CAAC;YAkDjB,UAAU;YAuFV,qBAAqB;IAiCnC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;YAgBX,eAAe;CAsB9B"}
|
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
import { promises as fs } from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { categorizeFile, applyTemplate } from '../utils/file-templates.js';
|
|
4
|
+
import { applyNamingConvention } from '../utils/naming-conventions.js';
|
|
4
5
|
import { FileSizeError, UnsupportedTypeError, ParseError, VisionError, NetworkError } from '../errors.js';
|
|
5
6
|
import { withRetry } from '../utils/retry.js';
|
|
6
7
|
import { logger } from '../utils/logger.js';
|
|
7
8
|
const IMAGE_EXTENSIONS = new Set([
|
|
8
9
|
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.heic', '.webp'
|
|
9
10
|
]);
|
|
11
|
+
// Images are downscaled by ImageCompressor and scanned PDFs by pdf-to-image
|
|
12
|
+
// before reaching the AI, so oversized files of these types can still be
|
|
13
|
+
// analyzed without touching the original. Everything else respects maxFileSize.
|
|
14
|
+
const REDUCIBLE_EXTENSIONS = new Set([...IMAGE_EXTENSIONS, '.pdf']);
|
|
15
|
+
// Sanity ceiling for reducible types — above this we refuse to load the file.
|
|
16
|
+
const ABSOLUTE_MAX_FILE_SIZE = 100 * 1024 * 1024;
|
|
17
|
+
/** Lowercase and strip separators so 'IMG_1234' and 'img-1234' compare equal. */
|
|
18
|
+
function normalizeName(name) {
|
|
19
|
+
return name.toLowerCase().replace(/[^a-z0-9]+/g, '');
|
|
20
|
+
}
|
|
21
|
+
/** Camera/scanner/export stems (IMG_0042, scan-2024…) carry no meaning to echo back. */
|
|
22
|
+
function isGenericStem(stem) {
|
|
23
|
+
return /^(img|image|dsc|dscn|dscf|pxl|scan|scanned|screenshot|photo|pict|untitled|document|doc|file)[-_ ()\d]*$/i.test(stem);
|
|
24
|
+
}
|
|
10
25
|
export class FileRenamer {
|
|
11
26
|
parserFactory;
|
|
12
27
|
aiService;
|
|
13
28
|
config;
|
|
14
29
|
retryOptions;
|
|
30
|
+
// Targets already promised to other files in this batch. fs.access alone
|
|
31
|
+
// can't see them: dry-run never touches the disk, and concurrent live
|
|
32
|
+
// renames race the check — either way two files could claim one target.
|
|
33
|
+
claimedTargets = new Set();
|
|
15
34
|
constructor(parserFactory,
|
|
16
35
|
// undefined when noAi is set — the AI paths below are never reached then
|
|
17
36
|
aiService, config, retryOptions = {}) {
|
|
@@ -21,6 +40,7 @@ export class FileRenamer {
|
|
|
21
40
|
this.retryOptions = retryOptions;
|
|
22
41
|
}
|
|
23
42
|
async renameFiles(files, onProgress) {
|
|
43
|
+
this.claimedTargets.clear();
|
|
24
44
|
const results = new Array(files.length);
|
|
25
45
|
let totalInputTokens = undefined;
|
|
26
46
|
let totalOutputTokens = undefined;
|
|
@@ -75,7 +95,12 @@ export class FileRenamer {
|
|
|
75
95
|
}
|
|
76
96
|
async renameFile(file) {
|
|
77
97
|
if (file.size > this.config.maxFileSize) {
|
|
78
|
-
|
|
98
|
+
const reducible = REDUCIBLE_EXTENSIONS.has(file.extension.toLowerCase());
|
|
99
|
+
if (!reducible || file.size > ABSOLUTE_MAX_FILE_SIZE) {
|
|
100
|
+
throw new FileSizeError(`File size (${Math.round(file.size / 1024 / 1024)}MB) exceeds maximum allowed size (${Math.round(this.config.maxFileSize / 1024 / 1024)}MB)`);
|
|
101
|
+
}
|
|
102
|
+
// Reducible type (image/PDF): proceed — the parser sends a compressed
|
|
103
|
+
// representation to the AI and the original file is never modified.
|
|
79
104
|
}
|
|
80
105
|
const parser = this.parserFactory.getParser(file.path);
|
|
81
106
|
if (!parser) {
|
|
@@ -111,6 +136,13 @@ export class FileRenamer {
|
|
|
111
136
|
if (!aiResult.name || aiResult.name.trim().length === 0) {
|
|
112
137
|
throw new NetworkError('Failed to generate a filename');
|
|
113
138
|
}
|
|
139
|
+
// The prompt tells the AI to keep already-good names, but echoing back a
|
|
140
|
+
// meaningless camera/scanner stem (IMG_0042) means it read nothing useful —
|
|
141
|
+
// fail loudly instead of blessing the junk name.
|
|
142
|
+
const originalStem = path.basename(file.name, file.extension);
|
|
143
|
+
if (isGenericStem(originalStem) && normalizeName(aiResult.name) === normalizeName(originalStem)) {
|
|
144
|
+
throw new ParseError(`AI could not derive a meaningful name (it returned the original filename "${file.name}")`);
|
|
145
|
+
}
|
|
114
146
|
const coreFileName = aiResult.name;
|
|
115
147
|
const templatedName = applyTemplate(coreFileName, fileCategory, this.config.templateOptions, this.config.namingConvention, file);
|
|
116
148
|
const newFileName = `${templatedName}${file.extension}`;
|
|
@@ -165,21 +197,40 @@ export class FileRenamer {
|
|
|
165
197
|
}
|
|
166
198
|
return path.basename(file.name, file.extension).replace(/[-_]/g, ' ');
|
|
167
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Build the i-th conflict candidate for a basename. When the name ends with
|
|
202
|
+
* the (convention-formatted) personal name, the counter goes before it so
|
|
203
|
+
* the personal name stays last: bill-2-john, not bill-john-2.
|
|
204
|
+
*/
|
|
205
|
+
conflictCandidate(base, i) {
|
|
206
|
+
const personalName = this.config.templateOptions.personalName;
|
|
207
|
+
if (personalName) {
|
|
208
|
+
const formatted = applyNamingConvention(personalName, this.config.namingConvention);
|
|
209
|
+
// Case-insensitive: camelCase/PascalCase re-capitalize the name inside
|
|
210
|
+
// the full filename (reportJohn vs john) — keep the base's own casing.
|
|
211
|
+
if (base.length > formatted.length && base.toLowerCase().endsWith(formatted.toLowerCase())) {
|
|
212
|
+
const stem = base.slice(0, base.length - formatted.length);
|
|
213
|
+
const tail = base.slice(base.length - formatted.length);
|
|
214
|
+
const sep = /[-_]$/.test(stem) ? stem.slice(-1) : '';
|
|
215
|
+
return `${stem}${i}${sep}${tail}`;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return `${base}-${i}`;
|
|
219
|
+
}
|
|
168
220
|
async resolveConflict(newPath) {
|
|
169
221
|
const ext = path.extname(newPath);
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
for (let i = 2; i <= 99; i++) {
|
|
180
|
-
const candidate = `${base}-${i}${ext}`;
|
|
222
|
+
const dir = path.dirname(newPath);
|
|
223
|
+
const base = path.basename(newPath, ext);
|
|
224
|
+
for (let i = 1; i <= 99; i++) {
|
|
225
|
+
const candidate = i === 1 ? newPath : path.join(dir, `${this.conflictCandidate(base, i)}${ext}`);
|
|
226
|
+
if (this.claimedTargets.has(candidate))
|
|
227
|
+
continue;
|
|
228
|
+
// Claim before awaiting: concurrent resolveConflict calls run between
|
|
229
|
+
// awaits, so a synchronous claim is what makes the reservation atomic.
|
|
230
|
+
this.claimedTargets.add(candidate);
|
|
181
231
|
try {
|
|
182
232
|
await fs.access(candidate);
|
|
233
|
+
// exists on disk — leave the (harmless) claim and try the next suffix
|
|
183
234
|
}
|
|
184
235
|
catch (error) {
|
|
185
236
|
if (error.code === 'ENOENT')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-renamer.js","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;CACnE,CAAC,CAAC;AAEH,MAAM,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"file-renamer.js","sourceRoot":"","sources":["../../src/services/file-renamer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { BaseLocalService } from './base-local-service.js';
|
|
2
|
+
interface OpenAICompatibleResponse {
|
|
3
|
+
choices: Array<{
|
|
4
|
+
message: {
|
|
5
|
+
content: string;
|
|
6
|
+
role: string;
|
|
7
|
+
};
|
|
8
|
+
finish_reason: string;
|
|
9
|
+
}>;
|
|
10
|
+
usage?: {
|
|
11
|
+
prompt_tokens: number;
|
|
12
|
+
completion_tokens: number;
|
|
13
|
+
total_tokens: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
interface OpenAIMessage {
|
|
17
|
+
role: 'system' | 'user' | 'assistant';
|
|
18
|
+
content: string | Array<{
|
|
19
|
+
type: string;
|
|
20
|
+
text?: string;
|
|
21
|
+
image_url?: {
|
|
22
|
+
url: string;
|
|
23
|
+
};
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
interface LMStudioChatRequest {
|
|
27
|
+
model: string;
|
|
28
|
+
messages: OpenAIMessage[];
|
|
29
|
+
temperature: number;
|
|
30
|
+
max_tokens: number;
|
|
31
|
+
stream: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare class LMStudioService extends BaseLocalService<LMStudioChatRequest, OpenAICompatibleResponse> {
|
|
6
34
|
constructor(baseUrl?: string, model?: string);
|
|
7
|
-
|
|
8
|
-
generateFileName(content: string, originalName: string, namingConvention?: string, category?: string, fileInfo?: FileInfo, language?: string, context?: string, imageData?: string): Promise<AINameResult>;
|
|
9
|
-
private sanitizeFilename;
|
|
10
|
-
private makeRequest;
|
|
35
|
+
protected requestCompletion(prompt: string, imageData?: string): Promise<string | undefined>;
|
|
11
36
|
isAvailable(): Promise<boolean>;
|
|
12
37
|
listModels(): Promise<string[]>;
|
|
13
38
|
}
|
|
39
|
+
export {};
|
|
14
40
|
//# sourceMappingURL=lmstudio-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lmstudio-service.d.ts","sourceRoot":"","sources":["../../src/services/lmstudio-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lmstudio-service.d.ts","sourceRoot":"","sources":["../../src/services/lmstudio-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,UAAU,wBAAwB;IAChC,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE;YACP,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACvF;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AASD,qBAAa,eAAgB,SAAQ,gBAAgB,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;gBAEhG,OAAO,SAA0B,EACjC,KAAK,SAAgB;cAKP,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA0B5F,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAWtC"}
|