@llm-translate/cli 1.0.0-next.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/.dockerignore +51 -0
- package/.env.example +33 -0
- package/.github/workflows/docs-pages.yml +57 -0
- package/.github/workflows/release.yml +49 -0
- package/.translaterc.json +44 -0
- package/CLAUDE.md +243 -0
- package/Dockerfile +55 -0
- package/README.md +371 -0
- package/RFC.md +1595 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +4494 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +1152 -0
- package/dist/index.js +3841 -0
- package/dist/index.js.map +1 -0
- package/docker-compose.yml +56 -0
- package/docs/.vitepress/config.ts +161 -0
- package/docs/api/agent.md +262 -0
- package/docs/api/engine.md +274 -0
- package/docs/api/index.md +171 -0
- package/docs/api/providers.md +304 -0
- package/docs/changelog.md +64 -0
- package/docs/cli/dir.md +243 -0
- package/docs/cli/file.md +213 -0
- package/docs/cli/glossary.md +273 -0
- package/docs/cli/index.md +129 -0
- package/docs/cli/init.md +158 -0
- package/docs/cli/serve.md +211 -0
- package/docs/glossary.json +235 -0
- package/docs/guide/chunking.md +272 -0
- package/docs/guide/configuration.md +139 -0
- package/docs/guide/cost-optimization.md +237 -0
- package/docs/guide/docker.md +371 -0
- package/docs/guide/getting-started.md +150 -0
- package/docs/guide/glossary.md +241 -0
- package/docs/guide/index.md +86 -0
- package/docs/guide/ollama.md +515 -0
- package/docs/guide/prompt-caching.md +221 -0
- package/docs/guide/providers.md +232 -0
- package/docs/guide/quality-control.md +206 -0
- package/docs/guide/vitepress-integration.md +265 -0
- package/docs/index.md +63 -0
- package/docs/ja/api/agent.md +262 -0
- package/docs/ja/api/engine.md +274 -0
- package/docs/ja/api/index.md +171 -0
- package/docs/ja/api/providers.md +304 -0
- package/docs/ja/changelog.md +64 -0
- package/docs/ja/cli/dir.md +243 -0
- package/docs/ja/cli/file.md +213 -0
- package/docs/ja/cli/glossary.md +273 -0
- package/docs/ja/cli/index.md +111 -0
- package/docs/ja/cli/init.md +158 -0
- package/docs/ja/guide/chunking.md +271 -0
- package/docs/ja/guide/configuration.md +139 -0
- package/docs/ja/guide/cost-optimization.md +30 -0
- package/docs/ja/guide/getting-started.md +150 -0
- package/docs/ja/guide/glossary.md +214 -0
- package/docs/ja/guide/index.md +32 -0
- package/docs/ja/guide/ollama.md +410 -0
- package/docs/ja/guide/prompt-caching.md +221 -0
- package/docs/ja/guide/providers.md +232 -0
- package/docs/ja/guide/quality-control.md +137 -0
- package/docs/ja/guide/vitepress-integration.md +265 -0
- package/docs/ja/index.md +58 -0
- package/docs/ko/api/agent.md +262 -0
- package/docs/ko/api/engine.md +274 -0
- package/docs/ko/api/index.md +171 -0
- package/docs/ko/api/providers.md +304 -0
- package/docs/ko/changelog.md +64 -0
- package/docs/ko/cli/dir.md +243 -0
- package/docs/ko/cli/file.md +213 -0
- package/docs/ko/cli/glossary.md +273 -0
- package/docs/ko/cli/index.md +111 -0
- package/docs/ko/cli/init.md +158 -0
- package/docs/ko/guide/chunking.md +271 -0
- package/docs/ko/guide/configuration.md +139 -0
- package/docs/ko/guide/cost-optimization.md +30 -0
- package/docs/ko/guide/getting-started.md +150 -0
- package/docs/ko/guide/glossary.md +214 -0
- package/docs/ko/guide/index.md +32 -0
- package/docs/ko/guide/ollama.md +410 -0
- package/docs/ko/guide/prompt-caching.md +221 -0
- package/docs/ko/guide/providers.md +232 -0
- package/docs/ko/guide/quality-control.md +137 -0
- package/docs/ko/guide/vitepress-integration.md +265 -0
- package/docs/ko/index.md +58 -0
- package/docs/zh/api/agent.md +262 -0
- package/docs/zh/api/engine.md +274 -0
- package/docs/zh/api/index.md +171 -0
- package/docs/zh/api/providers.md +304 -0
- package/docs/zh/changelog.md +64 -0
- package/docs/zh/cli/dir.md +243 -0
- package/docs/zh/cli/file.md +213 -0
- package/docs/zh/cli/glossary.md +273 -0
- package/docs/zh/cli/index.md +111 -0
- package/docs/zh/cli/init.md +158 -0
- package/docs/zh/guide/chunking.md +271 -0
- package/docs/zh/guide/configuration.md +139 -0
- package/docs/zh/guide/cost-optimization.md +30 -0
- package/docs/zh/guide/getting-started.md +150 -0
- package/docs/zh/guide/glossary.md +214 -0
- package/docs/zh/guide/index.md +32 -0
- package/docs/zh/guide/ollama.md +410 -0
- package/docs/zh/guide/prompt-caching.md +221 -0
- package/docs/zh/guide/providers.md +232 -0
- package/docs/zh/guide/quality-control.md +137 -0
- package/docs/zh/guide/vitepress-integration.md +265 -0
- package/docs/zh/index.md +58 -0
- package/package.json +91 -0
- package/release.config.mjs +15 -0
- package/schemas/glossary.schema.json +110 -0
- package/src/cli/commands/dir.ts +469 -0
- package/src/cli/commands/file.ts +291 -0
- package/src/cli/commands/glossary.ts +221 -0
- package/src/cli/commands/init.ts +68 -0
- package/src/cli/commands/serve.ts +60 -0
- package/src/cli/index.ts +64 -0
- package/src/cli/options.ts +59 -0
- package/src/core/agent.ts +1119 -0
- package/src/core/chunker.ts +391 -0
- package/src/core/engine.ts +634 -0
- package/src/errors.ts +188 -0
- package/src/index.ts +147 -0
- package/src/integrations/vitepress.ts +549 -0
- package/src/parsers/markdown.ts +383 -0
- package/src/providers/claude.ts +259 -0
- package/src/providers/interface.ts +109 -0
- package/src/providers/ollama.ts +379 -0
- package/src/providers/openai.ts +308 -0
- package/src/providers/registry.ts +153 -0
- package/src/server/index.ts +152 -0
- package/src/server/middleware/auth.ts +93 -0
- package/src/server/middleware/logger.ts +90 -0
- package/src/server/routes/health.ts +84 -0
- package/src/server/routes/translate.ts +210 -0
- package/src/server/types.ts +138 -0
- package/src/services/cache.ts +899 -0
- package/src/services/config.ts +217 -0
- package/src/services/glossary.ts +247 -0
- package/src/types/analysis.ts +164 -0
- package/src/types/index.ts +265 -0
- package/src/types/modes.ts +121 -0
- package/src/types/mqm.ts +157 -0
- package/src/utils/logger.ts +141 -0
- package/src/utils/tokens.ts +116 -0
- package/tests/fixtures/glossaries/ml-glossary.json +53 -0
- package/tests/fixtures/input/lynq-installation.ko.md +350 -0
- package/tests/fixtures/input/lynq-installation.md +350 -0
- package/tests/fixtures/input/simple.ko.md +27 -0
- package/tests/fixtures/input/simple.md +27 -0
- package/tests/unit/chunker.test.ts +229 -0
- package/tests/unit/glossary.test.ts +146 -0
- package/tests/unit/markdown.test.ts +205 -0
- package/tests/unit/tokens.test.ts +81 -0
- package/tsconfig.json +28 -0
- package/tsup.config.ts +34 -0
- package/vitest.config.ts +16 -0
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { fileCommand } from './commands/file.js';
|
|
3
|
+
import { dirCommand } from './commands/dir.js';
|
|
4
|
+
import { initCommand } from './commands/init.js';
|
|
5
|
+
import { glossaryCommand } from './commands/glossary.js';
|
|
6
|
+
import { serveCommand } from './commands/serve.js';
|
|
7
|
+
|
|
8
|
+
const program = new Command();
|
|
9
|
+
|
|
10
|
+
program
|
|
11
|
+
.name('llm-translate')
|
|
12
|
+
.description(
|
|
13
|
+
'CLI-based document translation tool powered by LLMs with glossary enforcement'
|
|
14
|
+
)
|
|
15
|
+
.version('0.1.0')
|
|
16
|
+
.enablePositionalOptions()
|
|
17
|
+
.passThroughOptions();
|
|
18
|
+
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Global Options (for stdin/stdout mode)
|
|
21
|
+
// ============================================================================
|
|
22
|
+
|
|
23
|
+
program
|
|
24
|
+
.option('-s, --source-lang <lang>', 'Source language code')
|
|
25
|
+
.option('-t, --target-lang <lang>', 'Target language code')
|
|
26
|
+
.option(
|
|
27
|
+
'-c, --config <path>',
|
|
28
|
+
'Path to config file (default: .translaterc.json)'
|
|
29
|
+
)
|
|
30
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
31
|
+
.option('-q, --quiet', 'Suppress non-error output');
|
|
32
|
+
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Commands
|
|
35
|
+
// ============================================================================
|
|
36
|
+
|
|
37
|
+
program.addCommand(fileCommand);
|
|
38
|
+
program.addCommand(dirCommand);
|
|
39
|
+
program.addCommand(initCommand);
|
|
40
|
+
program.addCommand(glossaryCommand);
|
|
41
|
+
program.addCommand(serveCommand);
|
|
42
|
+
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Stdin/Stdout Mode (default when no command specified)
|
|
45
|
+
// ============================================================================
|
|
46
|
+
|
|
47
|
+
program.action(async (options) => {
|
|
48
|
+
// Handle stdin/stdout translation when piped
|
|
49
|
+
if (!process.stdin.isTTY) {
|
|
50
|
+
const { handleStdinTranslation } = await import('./commands/file.js');
|
|
51
|
+
await handleStdinTranslation(options);
|
|
52
|
+
} else {
|
|
53
|
+
program.help();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// Parse and Execute
|
|
59
|
+
// ============================================================================
|
|
60
|
+
|
|
61
|
+
program.parseAsync(process.argv).catch((error: unknown) => {
|
|
62
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ProviderName, DocumentFormat } from '../types/index.js';
|
|
2
|
+
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// CLI Option Types
|
|
5
|
+
// ============================================================================
|
|
6
|
+
|
|
7
|
+
export interface GlobalOptions {
|
|
8
|
+
sourceLang: string;
|
|
9
|
+
targetLang: string;
|
|
10
|
+
config?: string;
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
quiet?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface TranslationOptions extends GlobalOptions {
|
|
16
|
+
glossary?: string;
|
|
17
|
+
provider?: ProviderName;
|
|
18
|
+
model?: string;
|
|
19
|
+
quality?: string; // Commander returns strings, parsed to number in handler
|
|
20
|
+
maxIterations?: string; // Commander returns strings, parsed to number in handler
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface OutputOptions {
|
|
24
|
+
output?: string;
|
|
25
|
+
format?: DocumentFormat;
|
|
26
|
+
dryRun?: boolean;
|
|
27
|
+
json?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface AdvancedOptions {
|
|
31
|
+
chunkSize?: string; // Commander returns strings, parsed to number in handler
|
|
32
|
+
parallel?: number;
|
|
33
|
+
cache?: boolean; // Commander's --no-cache sets this to false
|
|
34
|
+
context?: string;
|
|
35
|
+
strictQuality?: boolean;
|
|
36
|
+
strictGlossary?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface FileCommandOptions
|
|
40
|
+
extends TranslationOptions,
|
|
41
|
+
OutputOptions,
|
|
42
|
+
AdvancedOptions {}
|
|
43
|
+
|
|
44
|
+
export interface DirCommandOptions
|
|
45
|
+
extends TranslationOptions,
|
|
46
|
+
OutputOptions,
|
|
47
|
+
AdvancedOptions {}
|
|
48
|
+
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Default Values
|
|
51
|
+
// ============================================================================
|
|
52
|
+
|
|
53
|
+
export const defaults = {
|
|
54
|
+
quality: 85,
|
|
55
|
+
maxIterations: 4,
|
|
56
|
+
chunkSize: 1024,
|
|
57
|
+
parallel: 3,
|
|
58
|
+
provider: 'claude' as ProviderName,
|
|
59
|
+
} as const;
|