ai-i18n-tools 1.5.1 → 1.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.
Files changed (84) hide show
  1. package/README.md +7 -2
  2. package/bin/ai-i18n-tools.mjs +20 -0
  3. package/dist/build-info.generated.d.ts +1 -1
  4. package/dist/build-info.generated.js +1 -1
  5. package/dist/cli/doc-translate-quality-retry.d.ts +81 -0
  6. package/dist/cli/doc-translate-quality-retry.d.ts.map +1 -0
  7. package/dist/cli/doc-translate-quality-retry.js +223 -0
  8. package/dist/cli/doc-translate-quality-retry.js.map +1 -0
  9. package/dist/cli/doc-translate.d.ts +13 -1
  10. package/dist/cli/doc-translate.d.ts.map +1 -1
  11. package/dist/cli/doc-translate.js +256 -324
  12. package/dist/cli/doc-translate.js.map +1 -1
  13. package/dist/cli/index.js +170 -139
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/log-output.d.ts.map +1 -1
  16. package/dist/cli/log-output.js +2 -8
  17. package/dist/cli/log-output.js.map +1 -1
  18. package/dist/cli/translate-json-run.d.ts.map +1 -1
  19. package/dist/cli/translate-json-run.js +43 -2
  20. package/dist/cli/translate-json-run.js.map +1 -1
  21. package/dist/cli/translate-svg.d.ts.map +1 -1
  22. package/dist/cli/translate-svg.js +98 -57
  23. package/dist/cli/translate-svg.js.map +1 -1
  24. package/dist/cli/translate-ui-strings.d.ts +2 -0
  25. package/dist/cli/translate-ui-strings.d.ts.map +1 -1
  26. package/dist/cli/translate-ui-strings.js +263 -230
  27. package/dist/cli/translate-ui-strings.js.map +1 -1
  28. package/dist/core/cache.d.ts +6 -0
  29. package/dist/core/cache.d.ts.map +1 -1
  30. package/dist/core/cache.js +59 -0
  31. package/dist/core/cache.js.map +1 -1
  32. package/dist/core/types.d.ts +8 -0
  33. package/dist/core/types.d.ts.map +1 -1
  34. package/dist/core/types.js +7 -0
  35. package/dist/core/types.js.map +1 -1
  36. package/dist/extractors/markdown-extractor.js +1 -1
  37. package/dist/extractors/markdown-extractor.js.map +1 -1
  38. package/dist/extractors/markdown-quality-split.d.ts +7 -0
  39. package/dist/extractors/markdown-quality-split.d.ts.map +1 -0
  40. package/dist/extractors/markdown-quality-split.js +153 -0
  41. package/dist/extractors/markdown-quality-split.js.map +1 -0
  42. package/dist/extractors/markdown-segment-split.d.ts +3 -0
  43. package/dist/extractors/markdown-segment-split.d.ts.map +1 -1
  44. package/dist/extractors/markdown-segment-split.js +2 -2
  45. package/dist/extractors/markdown-segment-split.js.map +1 -1
  46. package/dist/markdown/write-heading-ids-core.js +1 -1
  47. package/dist/markdown/write-heading-ids-core.js.map +1 -1
  48. package/dist/processors/bold-code-placeholders.d.ts.map +1 -1
  49. package/dist/processors/bold-code-placeholders.js +12 -8
  50. package/dist/processors/bold-code-placeholders.js.map +1 -1
  51. package/dist/processors/doc-postprocess.js +1 -1
  52. package/dist/processors/doc-postprocess.js.map +1 -1
  53. package/dist/processors/emphasis-placeholders.d.ts +6 -2
  54. package/dist/processors/emphasis-placeholders.d.ts.map +1 -1
  55. package/dist/processors/emphasis-placeholders.js +75 -17
  56. package/dist/processors/emphasis-placeholders.js.map +1 -1
  57. package/dist/processors/markdown-source-diagnostics.d.ts +0 -2
  58. package/dist/processors/markdown-source-diagnostics.d.ts.map +1 -1
  59. package/dist/processors/markdown-source-diagnostics.js +0 -81
  60. package/dist/processors/markdown-source-diagnostics.js.map +1 -1
  61. package/dist/processors/validator.d.ts +2 -0
  62. package/dist/processors/validator.d.ts.map +1 -1
  63. package/dist/processors/validator.js +7 -0
  64. package/dist/processors/validator.js.map +1 -1
  65. package/dist/utils/concurrency.d.ts +2 -1
  66. package/dist/utils/concurrency.d.ts.map +1 -1
  67. package/dist/utils/concurrency.js +41 -5
  68. package/dist/utils/concurrency.js.map +1 -1
  69. package/dist/utils/run-interrupt.d.ts +31 -0
  70. package/dist/utils/run-interrupt.d.ts.map +1 -0
  71. package/dist/utils/run-interrupt.js +106 -0
  72. package/dist/utils/run-interrupt.js.map +1 -0
  73. package/docs/GETTING_STARTED.md +9 -6
  74. package/docs/PACKAGE_OVERVIEW.md +34 -7
  75. package/docs/ai-i18n-tools-context.md +3 -3
  76. package/package.json +19 -16
  77. package/dist/cli/strip-md-bold-inline.d.ts +0 -15
  78. package/dist/cli/strip-md-bold-inline.d.ts.map +0 -1
  79. package/dist/cli/strip-md-bold-inline.js +0 -77
  80. package/dist/cli/strip-md-bold-inline.js.map +0 -1
  81. package/dist/utils/stripBoldAroundInlineCode.d.ts +0 -6
  82. package/dist/utils/stripBoldAroundInlineCode.d.ts.map +0 -1
  83. package/dist/utils/stripBoldAroundInlineCode.js +0 -52
  84. package/dist/utils/stripBoldAroundInlineCode.js.map +0 -1
package/README.md CHANGED
@@ -95,8 +95,11 @@ npx ai-i18n-tools sync # or: pnpm exec ai-i18n-tools sync
95
95
  "i18n:extract": "ai-i18n-tools extract",
96
96
  "i18n:sync": "ai-i18n-tools sync",
97
97
  "i18n:translate:ui": "ai-i18n-tools translate-ui",
98
+ "i18n:translate:svg": "ai-i18n-tools translate-svg",
98
99
  "i18n:translate:docs": "ai-i18n-tools translate-docs",
99
- "i18n:translate": "ai-i18n-tools translate-docs"
100
+ "i18n:translate:json": "ai-i18n-tools translate-json",
101
+ "i18n:translate": "ai-i18n-tools translate-docs",
102
+ "i18n:dashboard": "ai-i18n-tools dashboard"
100
103
  }
101
104
  ```
102
105
 
@@ -205,6 +208,9 @@ The following helpers are exported from `'ai-i18n-tools/runtime'` and work in an
205
208
  |------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
206
209
  | `defaultI18nInitOptions(sourceLocale)` | Standard i18next init options for key-as-default setups. |
207
210
  | `setupKeyAsDefaultT(i18n, { stringsJson, sourcePluralFlatBundle? })` | Recommended wiring: key-trim + plural `wrapT` from `strings.json`, optionally merges `translate-ui` `{sourceLocale}.json` plural keys. |
211
+ | `wrapT(i18n, options)` | Lower-level plural-aware `t()` wrapper (usually installed by `setupKeyAsDefaultT`). |
212
+ | `buildPluralIndexFromStringsJson(entries)` | Builds the plural group index `wrapT` uses from catalog rows with `"plural": true`. |
213
+ | `extractInterpolationNamesForWrap(key)` | Parses `{{var}}` names from a source key for `wrapT` / key-trim fallback. |
208
214
  | `wrapI18nWithKeyTrim(i18n)` | Lower-level key-trim wrapper only (deprecated for app wiring; prefer `setupKeyAsDefaultT`). |
209
215
  | `makeLocaleLoadersFromManifest(uiLanguages, sourceLocale, makeLoader)` | Builds the `localeLoaders` map for `makeLoadLocale` from `ui-languages.json` (every `code` except `sourceLocale`). |
210
216
  | `makeLoadLocale(i18n, loaders, sourceLocale)` | Factory for async locale file loading. |
@@ -225,7 +231,6 @@ ai-i18n-tools version
225
231
  ai-i18n-tools check-models
226
232
  ai-i18n-tools init [-t ui-markdown|ui-docusaurus|ui-starlight|ui-astro-website|ui-json-bundles] [-o path] [--with-translate-ignore]
227
233
  ai-i18n-tools write-heading-ids …
228
- ai-i18n-tools strip-md-bold-inline …
229
234
  ai-i18n-tools extract
230
235
  ai-i18n-tools translate-docs …
231
236
  ai-i18n-tools translate-json …
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Stable package.json "bin" entry. pnpm links this file during install before
4
+ * dist/ exists; the compiled CLI is emitted to dist/cli/index.js by `pnpm build`.
5
+ */
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+
10
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
11
+ const cliEntry = path.join(root, "dist", "cli", "index.js");
12
+
13
+ if (!fs.existsSync(cliEntry)) {
14
+ console.error(
15
+ "ai-i18n-tools is not built yet. From the repository root, run:\n pnpm run build",
16
+ );
17
+ process.exit(1);
18
+ }
19
+
20
+ await import(cliEntry);
@@ -1,3 +1,3 @@
1
1
  /** Auto-generated by scripts/write-build-info.mjs — do not edit */
2
- export declare const BUILD_TIMESTAMP_ISO = "2026-05-24T20:45:03.021Z";
2
+ export declare const BUILD_TIMESTAMP_ISO = "2026-06-17T23:57:43.656Z";
3
3
  //# sourceMappingURL=build-info.generated.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /** Auto-generated by scripts/write-build-info.mjs — do not edit */
2
- export const BUILD_TIMESTAMP_ISO = "2026-05-24T20:45:03.021Z";
2
+ export const BUILD_TIMESTAMP_ISO = "2026-06-17T23:57:43.656Z";
3
3
  //# sourceMappingURL=build-info.generated.js.map
@@ -0,0 +1,81 @@
1
+ import type { DocumentPromptContentType } from "../core/prompt-builder.js";
2
+ import type { Segment, TranslationFailureInsert } from "../core/types.js";
3
+ import { PlaceholderHandler } from "../processors/placeholder-handler.js";
4
+ import type { Glossary } from "../glossary/glossary.js";
5
+ import type { OpenRouterClient } from "../api/openrouter.js";
6
+ type ProtectState = {
7
+ glossaryForceReplacements?: string[];
8
+ } & ReturnType<PlaceholderHandler["protectForTranslation"]>;
9
+ export type DocQualityLogOutcome = "retrying_next_model" | "fatal" | "individual_success";
10
+ export type DocQualityLogWriter = (opts: {
11
+ segmentsLabel: string;
12
+ outcome: DocQualityLogOutcome;
13
+ failedModel: string;
14
+ nextModel?: string;
15
+ qualityErrors: string[];
16
+ perSegmentLines: string[];
17
+ systemPrompt: string;
18
+ userContent: string;
19
+ rawAssistantContent: string;
20
+ mode: "failed" | "debug";
21
+ }) => string | undefined;
22
+ export type ProtectSegmentFn = (raw: string) => {
23
+ text: string;
24
+ state: ProtectState;
25
+ };
26
+ export type TranslateOneSegmentQualityRetryParams = {
27
+ client: OpenRouterClient;
28
+ locale: string;
29
+ glossary: Glossary;
30
+ contentType: DocumentPromptContentType;
31
+ models: readonly string[];
32
+ /** Original segment (pre-placeholder source text in `content`). */
33
+ original: Segment;
34
+ /** Protected text sent to the API for the top-level segment (unused when splitDepth > 0). */
35
+ protectedContent: string;
36
+ /** Placeholder state for the top-level segment (unused when splitDepth > 0). */
37
+ protectState: ProtectState | undefined;
38
+ /** Model index to start trying from (0-based). */
39
+ startModelIndex: number;
40
+ splitDepth: number;
41
+ qualityRetrySplit: boolean;
42
+ maxQualityRetrySplitDepth: number;
43
+ protectForTranslation: ProtectSegmentFn;
44
+ segmentHash: string;
45
+ failureFp: string | null;
46
+ recordFailures: (rows: TranslationFailureInsert[]) => Promise<void>;
47
+ buildQualityFailureRows: (model: string, modelOrder: number | null, errors: readonly string[], fatal: boolean) => TranslationFailureInsert[];
48
+ buildRuntimeFailureRow: (model: string | null, modelOrder: number | null, message: string, fatal: boolean) => TranslationFailureInsert;
49
+ modelOrder1Based: (model: string | null) => number | null;
50
+ segLabelSingle: string;
51
+ batchSegIndex?: number;
52
+ docIdx0?: number;
53
+ docLog?: {
54
+ relativePath: string;
55
+ totalSegments: number;
56
+ };
57
+ failureLogDirAbs?: string | null;
58
+ writeFailureLog?: DocQualityLogWriter;
59
+ writeDebugLog?: DocQualityLogWriter;
60
+ warnModelSwitch?: (failedModel: string, nextModel: string, detail: string, nextModelOrdinal: {
61
+ index1Based: number;
62
+ total: number;
63
+ }) => void;
64
+ abortSignal?: AbortSignal;
65
+ };
66
+ export type TranslateOneSegmentQualityRetryResult = {
67
+ text: string;
68
+ modelUsed: string;
69
+ inTok: number;
70
+ outTok: number;
71
+ cost: number;
72
+ validationFailures: number;
73
+ individualCalls: number;
74
+ qualitySplitRetries: number;
75
+ };
76
+ /**
77
+ * Translate one markdown segment with model cycling and progressive split-on-AST-failure fallback.
78
+ */
79
+ export declare function translateOneSegmentWithQualityRetry(params: TranslateOneSegmentQualityRetryParams): Promise<TranslateOneSegmentQualityRetryResult>;
80
+ export {};
81
+ //# sourceMappingURL=doc-translate-quality-retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-translate-quality-retry.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate-quality-retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import chalk from "chalk";
2
+ import { splitSegmentForQualityRetry } from "../extractors/markdown-quality-split.js";
3
+ import { PlaceholderHandler } from "../processors/placeholder-handler.js";
4
+ import { restoreGlossaryForcedTerms } from "../processors/glossary-force-placeholders.js";
5
+ import { errorsIncludeAstMismatch, validateDocTranslatePair } from "../processors/validator.js";
6
+ import { throwIfAbortSignal } from "../utils/run-interrupt.js";
7
+ function restoreSegmentTranslation(ph, raw, st) {
8
+ if (!st) {
9
+ return raw;
10
+ }
11
+ let out = ph.restoreAfterTranslation(raw, st);
12
+ out = restoreGlossaryForcedTerms(out, st.glossaryForceReplacements ?? []);
13
+ return out;
14
+ }
15
+ function isModelRetryFailure(result) {
16
+ return result.ok === false;
17
+ }
18
+ function perSegLine(params, ok, errors, partLabel) {
19
+ const hashLabel = partLabel ? `${params.segmentHash} part ${partLabel}` : params.segmentHash;
20
+ if (params.docLog && params.docIdx0 !== undefined && params.batchSegIndex !== undefined) {
21
+ return `doc #${params.docIdx0 + 1}/${params.docLog.totalSegments} seg id=${params.batchSegIndex} (hash ${hashLabel}): ${ok ? "OK" : errors.join("; ")}`;
22
+ }
23
+ if (params.batchSegIndex !== undefined) {
24
+ return `batch seg id=${params.batchSegIndex} (hash ${hashLabel}): ${ok ? "OK" : errors.join("; ")}`;
25
+ }
26
+ return `(hash ${hashLabel}): ${ok ? "OK" : errors.join("; ")}`;
27
+ }
28
+ async function translateProtectedContent(params, originalContent, protectedContent, protectState, startModelIndex, partLabel) {
29
+ const { client, locale, glossary, contentType, models, original, recordFailures, buildQualityFailureRows, buildRuntimeFailureRow, modelOrder1Based, segLabelSingle, failureLogDirAbs, docLog, writeFailureLog, writeDebugLog, warnModelSwitch, } = params;
30
+ const hints = glossary.findTermsInText(protectedContent, locale);
31
+ const ph = new PlaceholderHandler();
32
+ let startIdx = startModelIndex;
33
+ let remainingErrors = [];
34
+ let inTok = 0;
35
+ let outTok = 0;
36
+ let cost = 0;
37
+ let validationFailures = 0;
38
+ let individualCalls = 0;
39
+ while (startIdx < models.length) {
40
+ throwIfAbortSignal(params.abortSignal);
41
+ individualCalls++;
42
+ const startModel = models[startIdx] ?? null;
43
+ let single;
44
+ try {
45
+ single = await client.translateDocumentSegment(protectedContent, locale, hints, {
46
+ contentType,
47
+ startModelIndex: startIdx,
48
+ docLogContext: docLog?.relativePath
49
+ ? { locale, relativePath: docLog.relativePath }
50
+ : undefined,
51
+ });
52
+ }
53
+ catch (err) {
54
+ await recordFailures([
55
+ buildRuntimeFailureRow(startModel, modelOrder1Based(startModel), String(err), true),
56
+ ]);
57
+ throw err;
58
+ }
59
+ throwIfAbortSignal(params.abortSignal);
60
+ inTok += single.usage.inputTokens;
61
+ outTok += single.usage.outputTokens;
62
+ cost += single.cost ?? 0;
63
+ const restored = restoreSegmentTranslation(ph, single.content, protectState);
64
+ const origSeg = { ...original, content: originalContent };
65
+ const v = await validateDocTranslatePair(origSeg, restored);
66
+ const nextIdx = models.indexOf(single.model) + 1;
67
+ const line = perSegLine(params, v.ok, v.errors, partLabel);
68
+ if (failureLogDirAbs && docLog && writeDebugLog) {
69
+ const debugLogPath = writeDebugLog({
70
+ segmentsLabel: segLabelSingle || "(segment range unknown)",
71
+ outcome: v.ok
72
+ ? "individual_success"
73
+ : nextIdx >= models.length
74
+ ? "fatal"
75
+ : "retrying_next_model",
76
+ failedModel: single.model,
77
+ nextModel: nextIdx < models.length ? models[nextIdx] : undefined,
78
+ qualityErrors: v.errors,
79
+ perSegmentLines: [line],
80
+ systemPrompt: single.debugPrompt?.systemPrompt ?? "",
81
+ userContent: single.debugPrompt?.userContent ?? "",
82
+ rawAssistantContent: single.rawAssistantContent ?? "(missing raw response; rebuild ai-i18n-tools)",
83
+ mode: "debug",
84
+ });
85
+ if (debugLogPath) {
86
+ console.warn(chalk.gray(` 🧪 Debug log: ${debugLogPath}`));
87
+ }
88
+ }
89
+ if (v.ok) {
90
+ return {
91
+ ok: true,
92
+ text: restored,
93
+ modelUsed: single.model,
94
+ inTok,
95
+ outTok,
96
+ cost,
97
+ validationFailures,
98
+ individualCalls,
99
+ qualitySplitRetries: 0,
100
+ };
101
+ }
102
+ validationFailures++;
103
+ remainingErrors = v.errors;
104
+ await recordFailures(buildQualityFailureRows(single.model, modelOrder1Based(single.model), v.errors, nextIdx >= models.length));
105
+ if (failureLogDirAbs && docLog && writeFailureLog) {
106
+ const failureLogPath = writeFailureLog({
107
+ segmentsLabel: segLabelSingle || "(segment range unknown)",
108
+ outcome: nextIdx >= models.length ? "fatal" : "retrying_next_model",
109
+ failedModel: single.model,
110
+ nextModel: nextIdx < models.length ? models[nextIdx] : undefined,
111
+ qualityErrors: v.errors,
112
+ perSegmentLines: [line],
113
+ systemPrompt: single.debugPrompt?.systemPrompt ?? "",
114
+ userContent: single.debugPrompt?.userContent ?? "",
115
+ rawAssistantContent: single.rawAssistantContent ?? "(missing raw response; rebuild ai-i18n-tools)",
116
+ mode: "failed",
117
+ });
118
+ if (failureLogPath) {
119
+ console.warn(chalk.gray(` 📝 Failure log: ${failureLogPath}`));
120
+ }
121
+ }
122
+ if (nextIdx >= models.length) {
123
+ break;
124
+ }
125
+ warnModelSwitch?.(single.model, models[nextIdx], v.errors.join("; "), {
126
+ index1Based: nextIdx + 1,
127
+ total: models.length,
128
+ });
129
+ startIdx = nextIdx;
130
+ }
131
+ return {
132
+ ok: false,
133
+ remainingErrors,
134
+ inTok,
135
+ outTok,
136
+ cost,
137
+ validationFailures,
138
+ individualCalls,
139
+ };
140
+ }
141
+ function throwQualityFatal(params, errors) {
142
+ const loc = params.docLog?.relativePath ?? "?";
143
+ throw new Error(`Doc translation quality failed (${params.locale}, ${loc}): ${params.segLabelSingle ? `${params.segLabelSingle}: ` : ""}${errors.join("; ")}`);
144
+ }
145
+ /**
146
+ * Translate one markdown segment with model cycling and progressive split-on-AST-failure fallback.
147
+ */
148
+ export async function translateOneSegmentWithQualityRetry(params) {
149
+ const { original, protectedContent, protectState, startModelIndex, splitDepth, qualityRetrySplit, maxQualityRetrySplitDepth, protectForTranslation, docLog, segLabelSingle, locale, } = params;
150
+ const direct = await translateProtectedContent(params, original.content, protectedContent, protectState, startModelIndex);
151
+ if (!isModelRetryFailure(direct)) {
152
+ const { ok: _ok, ...result } = direct;
153
+ return result;
154
+ }
155
+ const { remainingErrors } = direct;
156
+ const splittable = qualityRetrySplit &&
157
+ errorsIncludeAstMismatch(remainingErrors) &&
158
+ splitSegmentForQualityRetry(original.content, original.type, splitDepth, maxQualityRetrySplitDepth) !== null;
159
+ if (!splittable) {
160
+ throwQualityFatal(params, remainingErrors);
161
+ }
162
+ const parts = splitSegmentForQualityRetry(original.content, original.type, splitDepth, maxQualityRetrySplitDepth);
163
+ if (!parts || parts.length <= 1) {
164
+ throwQualityFatal(params, remainingErrors);
165
+ }
166
+ const baseLoc = docLog?.relativePath ? `${locale} ${docLog.relativePath}` : locale;
167
+ console.warn(chalk.magenta(` ✂️ ${baseLoc}: splitting segment into ${parts.length} part(s) after model exhaustion (depth ${splitDepth + 1}/${maxQualityRetrySplitDepth}) — ${segLabelSingle || `hash ${params.segmentHash}`}`));
168
+ const translatedParts = [];
169
+ const modelsUsed = new Set();
170
+ let inTok = direct.inTok;
171
+ let outTok = direct.outTok;
172
+ let cost = direct.cost;
173
+ let validationFailures = direct.validationFailures;
174
+ let individualCalls = direct.individualCalls;
175
+ let qualitySplitRetries = 1;
176
+ for (let pi = 0; pi < parts.length; pi++) {
177
+ throwIfAbortSignal(params.abortSignal);
178
+ const partContent = parts[pi];
179
+ const { text: partProtected, state: partState } = protectForTranslation(partContent);
180
+ const partOriginal = {
181
+ ...original,
182
+ content: partContent,
183
+ };
184
+ const partResult = await translateOneSegmentWithQualityRetry({
185
+ ...params,
186
+ original: partOriginal,
187
+ protectedContent: partProtected,
188
+ protectState: partState,
189
+ startModelIndex: 0,
190
+ splitDepth: splitDepth + 1,
191
+ });
192
+ inTok += partResult.inTok;
193
+ outTok += partResult.outTok;
194
+ cost += partResult.cost;
195
+ validationFailures += partResult.validationFailures;
196
+ individualCalls += partResult.individualCalls;
197
+ qualitySplitRetries += partResult.qualitySplitRetries;
198
+ for (const m of partResult.modelUsed.split(",")) {
199
+ const t = m.trim();
200
+ if (t) {
201
+ modelsUsed.add(t);
202
+ }
203
+ }
204
+ translatedParts.push(partResult.text);
205
+ }
206
+ const joined = translatedParts.join("\n");
207
+ const joinedValidation = await validateDocTranslatePair(original, joined);
208
+ if (!joinedValidation.ok) {
209
+ throwQualityFatal(params, [`joined sub-parts: ${joinedValidation.errors.join("; ")}`]);
210
+ }
211
+ const modelUsed = [...modelsUsed].sort((a, b) => a.localeCompare(b)).join(",");
212
+ return {
213
+ text: joined,
214
+ modelUsed,
215
+ inTok,
216
+ outTok,
217
+ cost,
218
+ validationFailures,
219
+ individualCalls,
220
+ qualitySplitRetries,
221
+ };
222
+ }
223
+ //# sourceMappingURL=doc-translate-quality-retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-translate-quality-retry.js","sourceRoot":"","sources":["../../src/cli/doc-translate-quality-retry.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,8 @@ export interface TranslateRunOptions {
68
68
  * Default: 1 (sequential processing).
69
69
  */
70
70
  fileConcurrency?: number;
71
+ /** When aborted (Ctrl+C), cooperative workers stop claiming new work. */
72
+ abortSignal?: AbortSignal;
71
73
  }
72
74
  export interface TranslateTotals {
73
75
  filesWritten: number;
@@ -85,6 +87,8 @@ export interface TranslateTotals {
85
87
  segmentValidationFailures?: number;
86
88
  /** Count of single-segment API calls (`translateDocumentSegment`), including batch fallbacks and markdown quality retries. */
87
89
  individualSegmentTranslations?: number;
90
+ /** Markdown segments recovered via progressive split after AST validation failure. */
91
+ segmentQualitySplitRetries?: number;
88
92
  }
89
93
  type ProtectState = ReturnType<PlaceholderHandler["protectForTranslation"]> & {
90
94
  glossaryForceReplacements?: string[];
@@ -166,13 +170,21 @@ failureLogDirAbs?: string | null, failureTracker?: FailureTracker,
166
170
  /** Cwd-relative source path stored on failure rows for dashboard UI when cache has no segment yet. */
167
171
  failureDocMeta?: {
168
172
  filepath: string;
169
- }): Promise<{
173
+ },
174
+ /** Progressive split-on-AST-failure (markdown only). */
175
+ qualityRetryOpts?: {
176
+ qualityRetrySplit: boolean;
177
+ maxQualityRetrySplitDepth: number;
178
+ emphasisPlaceholders: boolean;
179
+ expressionProtection?: ExpressionProtectionOptions;
180
+ }, abortSignal?: AbortSignal): Promise<{
170
181
  map: Map<string, DocSegmentTranslation>;
171
182
  inTok: number;
172
183
  outTok: number;
173
184
  cost: number;
174
185
  segmentValidationFailures: number;
175
186
  individualSegmentTranslations: number;
187
+ segmentQualitySplitRetries: number;
176
188
  }>;
177
189
  /**
178
190
  * Locale-independent: read source, extract segments (same options as translation), then refresh
@@ -1 +1 @@
1
- {"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,qBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,sBAAsB,EACtB,OAAO,EACP,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAI1B,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAStC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAGlF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAMpG,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAgCxD,OAAO,KAAK,EACV,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAyC,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAO5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,sBAAsB,CAQ9E;AAED,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,YAAY,GAAG,aAAa,CAAC;AAEzE,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,qBAAqB,GAAG,SAAS,GACrC,2BAA2B,CAW7B;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8FAA8F;IAC9F,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+HAA+H;IAC/H,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,8HAA8H;IAC9H,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,sFAAsF;IACtF,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,KAAK,YAAY,GAAG,UAAU,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC5E,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC,CAAC;AAsBF,gIAAgI;AAChI,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,uBAAuB,EAAE,OAAO,EAChC,oBAAoB,UAAQ,EAC5B,oBAAoB,CAAC,EAAE,2BAA2B,GACjD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAiCvC;AA2LD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAWT;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAWjG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAWhG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOtF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,GAAG,SAAS,CAoBpB;AAKD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAChC,OAAO,CAeT;AAED,wBAAgB,4CAA4C,CAC1D,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GACtC,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,EAAE,CAoBV;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,EAAE,CAmBV;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,uBAAuB,EAAE,MAAM,EAC/B,IAAI,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EACvC,kBAAkB,EAAE,MAAM,EAAE,GAC3B,mCAAmC,CAyDrC;AAED,6EAA6E;AAC7E,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,uBAAuB,EAAE,MAAM,EAC/B,IAAI,EAAE,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,EACvC,eAAe,EAAE,MAAM,EAAE,GACxB,gCAAgC,CAwDlC;AAmED,KAAK,cAAc,GAAG;IACpB,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,kBAAkB,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE,CAAC;AAsFF,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,OAAO,EAAE,EACpB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;AAC1C,yGAAyG;AACzG,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,yBAAyB,EACtC,gBAAgB,EAAE,MAAM;AACxB,gGAAgG;AAChG,mBAAmB,EAAE,2BAA2B,EAChD,MAAM,CAAC,EAAE;IACP,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AACD,kGAAkG;AAClG,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,EAChC,cAAc,CAAC,EAAE,cAAc;AAC/B,sGAAsG;AACtG,cAAc,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE;AACrC,wDAAwD;AACxD,gBAAgB,CAAC,EAAE;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,yBAAyB,EAAE,MAAM,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;CACpD,EACD,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC;IACT,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB,EAAE,MAAM,CAAC;IAClC,6BAA6B,EAAE,MAAM,CAAC;IACtC,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC,CA6iBD;AAED;;;;GAIG;AACH,wBAAsB,6CAA6C,CACjE,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/C,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CA8TxD;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CA4SxD;AAED,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CAyNxD;AAED,gHAAgH;AAChH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,qBAAqB,EAAE,MAAM,EAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAC/B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CAkPxD;AAED,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,mBAAmB,EACzB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,CAmCR;AA8FD,uDAAuD;AACvD,wBAAsB,YAAY,CAChC,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,EACD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAua1B"}