changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "fallbackContexts": {
+ "additionalProperties": {
+ "additionalProperties": {
+ "description": "The value of that field, as the prompt builder produced it."
+ },
+ "propertyNames": {
+ "description": "Context field, e.g. \"keysToTranslate\", \"glossary\", \"instructions\".",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "description": "Per-locale context to translate inline and persist with write_translations. Present only in agent mode.",
+ "propertyNames": {
+ "description": "Target locale code.",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "results": {
+ "additionalProperties": {
+ "additionalProperties": false,
+ "properties": {
+ "batches": {
+ "description": "Provider requests this locale took. Absent outside provider mode.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Keys the run attempted and lost. They are still missing; a re-run retries them.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "key": {
+ "description": "The key that could not be translated.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why the key could not be translated. A closed set — branch on the value.",
+ "enum": [
+ "provider-error",
+ "omitted-by-model",
+ "placeholder-mismatch",
+ "plural-mismatch",
+ "write-error",
+ "truncated"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "missing": {
+ "description": "Keys missing for this locale. Always equals translated + wouldTranslate + failed + skipped.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "model": {
+ "description": "Model that produced the translations. Absent outside provider mode.",
+ "type": "string"
+ },
+ "placeholderValidation": {
+ "additionalProperties": false,
+ "description": "Placeholder comparison of the new values against their source. Absent when nothing was translated.",
+ "properties": {
+ "errors": {
+ "description": "One entry per translation that did not match. Empty when ok is true.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "extra": {
+ "description": "Placeholders the translation invented and the source does not have.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "key": {
+ "description": "Dot-path key of the mismatching translation.",
+ "type": "string"
+ },
+ "kind": {
+ "description": "What failed: a placeholder set mismatch (the default) or a vue-i18n plural variant-count mismatch.",
+ "enum": [
+ "placeholder",
+ "plural-count"
+ ],
+ "type": "string"
+ },
+ "locale": {
+ "description": "Locale code the mismatch was found in.",
+ "type": "string"
+ },
+ "missing": {
+ "description": "Placeholders the source has and the translation dropped.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "sourceVariants": {
+ "description": "Plural variants in the source value. Present only for kind \"plural-count\".",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "targetVariants": {
+ "description": "Plural variants in the translated value. Present only for kind \"plural-count\".",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "locale",
+ "key",
+ "missing",
+ "extra"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "ok": {
+ "description": "True when every checked translation carries the same placeholders as its source.",
+ "type": "boolean"
+ },
+ "placeholders": {
+ "description": "Placeholder names found in the source values, e.g. [\"{name}\"].",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "ok",
+ "placeholders",
+ "errors"
+ ],
+ "type": "object"
+ },
+ "skipped": {
+ "description": "Keys deliberately not attempted.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "key": {
+ "description": "The key that was not attempted.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why the key or locale was deliberately not attempted. A closed set — branch on the value.",
+ "enum": [
+ "no-provider",
+ "already-translated",
+ "protected-locale"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "stale": {
+ "description": "Keys whose target was written from source text that has changed since, left untouched by this run. Translation memory only, and outside the missing invariant — these keys are translated, just outdated.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "translated": {
+ "description": "Keys translated and written.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "wouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "writeError": {
+ "description": "Present when translations were produced but writing the locale file failed.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "mode",
+ "missing",
+ "translated",
+ "failed",
+ "skipped"
+ ],
+ "type": "object"
+ },
+ "description": "Full per-locale results. Absent in compact mode, which returns summary.byLocale instead.",
+ "propertyNames": {
+ "description": "Target locale code.",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "summary": {
+ "additionalProperties": false,
+ "description": "What the run did across every locale of the layer.",
+ "properties": {
+ "byLocale": {
+ "description": "A per-locale digest in place of full results. Present only in compact mode.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "batches": {
+ "description": "Provider requests this locale took. Absent outside provider mode.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Of those, the ones attempted and lost.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "locale": {
+ "description": "Locale code this digest is about.",
+ "type": "string"
+ },
+ "missing": {
+ "description": "Keys missing for this locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "model": {
+ "description": "Model that produced the translations. Absent outside provider mode.",
+ "type": "string"
+ },
+ "skipped": {
+ "description": "Of those, the ones deliberately not attempted.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "stale": {
+ "description": "Keys left untouched as outdated. Translation memory only.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "translated": {
+ "description": "Of those, the ones translated and written.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "wouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "writeError": {
+ "description": "Present when writing the locale file failed.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "locale",
+ "mode",
+ "missing",
+ "translated",
+ "failed",
+ "skipped"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dryRun": {
+ "description": "True when nothing was written because a preview was asked for.",
+ "type": "boolean"
+ },
+ "layer": {
+ "description": "The layer that was translated.",
+ "type": "string"
+ },
+ "message": {
+ "description": "What to do next: how to persist the fallback contexts in agent mode, or which locales lost keys after a partial failure. Absent when a run needs nothing from you.",
+ "type": "string"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "referenceLocale": {
+ "anyOf": [
+ {
+ "description": "Locale code, e.g. \"de\".",
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "description": "Canonical locale code, e.g. \"en-US\". This is the spelling to pass back to another call.",
+ "type": "string"
+ },
+ "file": {
+ "description": "Locale file name, e.g. \"en-US.json\". Absent for directory-per-locale layouts such as Laravel.",
+ "type": "string"
+ },
+ "language": {
+ "description": "BCP-47 language tag, e.g. \"en-GB\". Absent when the framework config carries none.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Human-readable language name, e.g. \"Deutsch\". Absent unless the framework config names one.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "The locale the translations were made from."
+ },
+ "staleCount": {
+ "description": "Stale keys left untouched across every locale. Translation memory only.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "targetLocales": {
+ "description": "The locales that were translated into.",
+ "items": {
+ "anyOf": [
+ {
+ "description": "Locale code, e.g. \"de\".",
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "description": "Canonical locale code, e.g. \"en-US\". This is the spelling to pass back to another call.",
+ "type": "string"
+ },
+ "file": {
+ "description": "Locale file name, e.g. \"en-US.json\". Absent for directory-per-locale layouts such as Laravel.",
+ "type": "string"
+ },
+ "language": {
+ "description": "BCP-47 language tag, e.g. \"en-GB\". Absent when the framework config carries none.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Human-readable language name, e.g. \"Deutsch\". Absent unless the framework config names one.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "The locale, either as a bare code or resolved to its code, language tag and file."
+ },
+ "type": "array"
+ },
+ "totalFailed": {
+ "description": "Keys attempted and lost across every locale. The counter the translate gate reads.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalSkipped": {
+ "description": "Keys deliberately not attempted across every locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalTranslated": {
+ "description": "Keys translated and written across every locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalWouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "mode",
+ "totalTranslated",
+ "totalFailed",
+ "totalSkipped",
+ "layer",
+ "referenceLocale",
+ "targetLocales",
+ "dryRun"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "summary"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "layers": {
+ "additionalProperties": {
+ "additionalProperties": false,
+ "properties": {
+ "fallbackContexts": {
+ "additionalProperties": {
+ "additionalProperties": {
+ "description": "The value of that field, as the prompt builder produced it."
+ },
+ "propertyNames": {
+ "description": "Context field, e.g. \"keysToTranslate\", \"glossary\", \"instructions\".",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "description": "Per-locale context to translate inline and persist with write_translations. Present only in agent mode.",
+ "propertyNames": {
+ "description": "Target locale code.",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "results": {
+ "additionalProperties": {
+ "additionalProperties": false,
+ "properties": {
+ "batches": {
+ "description": "Provider requests this locale took. Absent outside provider mode.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Keys the run attempted and lost. They are still missing; a re-run retries them.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "key": {
+ "description": "The key that could not be translated.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why the key could not be translated. A closed set — branch on the value.",
+ "enum": [
+ "provider-error",
+ "omitted-by-model",
+ "placeholder-mismatch",
+ "plural-mismatch",
+ "write-error",
+ "truncated"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "missing": {
+ "description": "Keys missing for this locale. Always equals translated + wouldTranslate + failed + skipped.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "model": {
+ "description": "Model that produced the translations. Absent outside provider mode.",
+ "type": "string"
+ },
+ "placeholderValidation": {
+ "additionalProperties": false,
+ "description": "Placeholder comparison of the new values against their source. Absent when nothing was translated.",
+ "properties": {
+ "errors": {
+ "description": "One entry per translation that did not match. Empty when ok is true.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "extra": {
+ "description": "Placeholders the translation invented and the source does not have.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "key": {
+ "description": "Dot-path key of the mismatching translation.",
+ "type": "string"
+ },
+ "kind": {
+ "description": "What failed: a placeholder set mismatch (the default) or a vue-i18n plural variant-count mismatch.",
+ "enum": [
+ "placeholder",
+ "plural-count"
+ ],
+ "type": "string"
+ },
+ "locale": {
+ "description": "Locale code the mismatch was found in.",
+ "type": "string"
+ },
+ "missing": {
+ "description": "Placeholders the source has and the translation dropped.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "sourceVariants": {
+ "description": "Plural variants in the source value. Present only for kind \"plural-count\".",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "targetVariants": {
+ "description": "Plural variants in the translated value. Present only for kind \"plural-count\".",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "locale",
+ "key",
+ "missing",
+ "extra"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "ok": {
+ "description": "True when every checked translation carries the same placeholders as its source.",
+ "type": "boolean"
+ },
+ "placeholders": {
+ "description": "Placeholder names found in the source values, e.g. [\"{name}\"].",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "ok",
+ "placeholders",
+ "errors"
+ ],
+ "type": "object"
+ },
+ "skipped": {
+ "description": "Keys deliberately not attempted.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "key": {
+ "description": "The key that was not attempted.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why the key or locale was deliberately not attempted. A closed set — branch on the value.",
+ "enum": [
+ "no-provider",
+ "already-translated",
+ "protected-locale"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "key",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "stale": {
+ "description": "Keys whose target was written from source text that has changed since, left untouched by this run. Translation memory only, and outside the missing invariant — these keys are translated, just outdated.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "translated": {
+ "description": "Keys translated and written.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "wouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "writeError": {
+ "description": "Present when translations were produced but writing the locale file failed.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "mode",
+ "missing",
+ "translated",
+ "failed",
+ "skipped"
+ ],
+ "type": "object"
+ },
+ "description": "Full per-locale results. Absent in compact mode, which returns summary.byLocale instead.",
+ "propertyNames": {
+ "description": "Target locale code.",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "summary": {
+ "additionalProperties": false,
+ "description": "What the run did across every locale of the layer.",
+ "properties": {
+ "byLocale": {
+ "description": "A per-locale digest in place of full results. Present only in compact mode.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "batches": {
+ "description": "Provider requests this locale took. Absent outside provider mode.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "failed": {
+ "description": "Of those, the ones attempted and lost.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "locale": {
+ "description": "Locale code this digest is about.",
+ "type": "string"
+ },
+ "missing": {
+ "description": "Keys missing for this locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "model": {
+ "description": "Model that produced the translations. Absent outside provider mode.",
+ "type": "string"
+ },
+ "skipped": {
+ "description": "Of those, the ones deliberately not attempted.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "stale": {
+ "description": "Keys left untouched as outdated. Translation memory only.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "translated": {
+ "description": "Of those, the ones translated and written.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "wouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "writeError": {
+ "description": "Present when writing the locale file failed.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "locale",
+ "mode",
+ "missing",
+ "translated",
+ "failed",
+ "skipped"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dryRun": {
+ "description": "True when nothing was written because a preview was asked for.",
+ "type": "boolean"
+ },
+ "layer": {
+ "description": "The layer that was translated.",
+ "type": "string"
+ },
+ "message": {
+ "description": "What to do next: how to persist the fallback contexts in agent mode, or which locales lost keys after a partial failure. Absent when a run needs nothing from you.",
+ "type": "string"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "referenceLocale": {
+ "anyOf": [
+ {
+ "description": "Locale code, e.g. \"de\".",
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "description": "Canonical locale code, e.g. \"en-US\". This is the spelling to pass back to another call.",
+ "type": "string"
+ },
+ "file": {
+ "description": "Locale file name, e.g. \"en-US.json\". Absent for directory-per-locale layouts such as Laravel.",
+ "type": "string"
+ },
+ "language": {
+ "description": "BCP-47 language tag, e.g. \"en-GB\". Absent when the framework config carries none.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Human-readable language name, e.g. \"Deutsch\". Absent unless the framework config names one.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "The locale the translations were made from."
+ },
+ "staleCount": {
+ "description": "Stale keys left untouched across every locale. Translation memory only.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "targetLocales": {
+ "description": "The locales that were translated into.",
+ "items": {
+ "anyOf": [
+ {
+ "description": "Locale code, e.g. \"de\".",
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "description": "Canonical locale code, e.g. \"en-US\". This is the spelling to pass back to another call.",
+ "type": "string"
+ },
+ "file": {
+ "description": "Locale file name, e.g. \"en-US.json\". Absent for directory-per-locale layouts such as Laravel.",
+ "type": "string"
+ },
+ "language": {
+ "description": "BCP-47 language tag, e.g. \"en-GB\". Absent when the framework config carries none.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Human-readable language name, e.g. \"Deutsch\". Absent unless the framework config names one.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "The locale, either as a bare code or resolved to its code, language tag and file."
+ },
+ "type": "array"
+ },
+ "totalFailed": {
+ "description": "Keys attempted and lost across every locale. The counter the translate gate reads.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalSkipped": {
+ "description": "Keys deliberately not attempted across every locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalTranslated": {
+ "description": "Keys translated and written across every locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalWouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "mode",
+ "totalTranslated",
+ "totalFailed",
+ "totalSkipped",
+ "layer",
+ "referenceLocale",
+ "targetLocales",
+ "dryRun"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "summary"
+ ],
+ "type": "object"
+ },
+ "description": "One full result per locale-backed layer.",
+ "propertyNames": {
+ "description": "Layer name.",
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "summary": {
+ "additionalProperties": false,
+ "description": "What the run did across every layer and locale, with the per-layer split under byLayer.",
+ "properties": {
+ "byLayer": {
+ "description": "The same totals split per layer.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "layer": {
+ "description": "Layer these totals are for.",
+ "type": "string"
+ },
+ "totalFailed": {
+ "description": "Keys attempted and lost in that layer.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalSkipped": {
+ "description": "Keys deliberately not attempted in that layer.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalTranslated": {
+ "description": "Keys translated and written in that layer.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalWouldTranslate": {
+ "description": "Keys a dry run would translate. 0 outside a dry run.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "layer",
+ "totalTranslated",
+ "totalFailed",
+ "totalSkipped",
+ "totalWouldTranslate"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dryRun": {
+ "description": "True when nothing was written because a preview was asked for.",
+ "type": "boolean"
+ },
+ "layers": {
+ "description": "Layer names that were translated.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "message": {
+ "description": "What to do next: how to persist the fallback contexts in agent mode, or which locales lost keys after a partial failure. Absent when a run needs nothing from you.",
+ "type": "string"
+ },
+ "mode": {
+ "description": "How the run was executed: \"provider\" called the configured LLM, \"agent\" returned contexts to translate by hand, \"dry-run\" wrote nothing.",
+ "enum": [
+ "provider",
+ "agent",
+ "dry-run"
+ ],
+ "type": "string"
+ },
+ "referenceLocale": {
+ "anyOf": [
+ {
+ "description": "Locale code, e.g. \"de\".",
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "description": "Canonical locale code, e.g. \"en-US\". This is the spelling to pass back to another call.",
+ "type": "string"
+ },
+ "file": {
+ "description": "Locale file name, e.g. \"en-US.json\". Absent for directory-per-locale layouts such as Laravel.",
+ "type": "string"
+ },
+ "language": {
+ "description": "BCP-47 language tag, e.g. \"en-GB\". Absent when the framework config carries none.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Human-readable language name, e.g. \"Deutsch\". Absent unless the framework config names one.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "The locale the translations were made from."
+ },
+ "staleCount": {
+ "description": "Stale keys left untouched across every layer and locale. Translation memory only.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "targetLocales": {
+ "description": "The locales that were translated into.",
+ "items": {
+ "anyOf": [
+ {
+ "description": "Locale code, e.g. \"de\".",
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "code": {
+ "description": "Canonical locale code, e.g. \"en-US\". This is the spelling to pass back to another call.",
+ "type": "string"
+ },
+ "file": {
+ "description": "Locale file name, e.g. \"en-US.json\". Absent for directory-per-locale layouts such as Laravel.",
+ "type": "string"
+ },
+ "language": {
+ "description": "BCP-47 language tag, e.g. \"en-GB\". Absent when the framework config carries none.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Human-readable language name, e.g. \"Deutsch\". Absent unless the framework config names one.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "The locale, either as a bare code or resolved to its code, language tag and file."
+ },
+ "type": "array"
+ },
+ "totalFailed": {
+ "description": "Keys attempted and lost across every layer and locale. The counter the translate gate reads.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalSkipped": {
+ "description": "Keys deliberately not attempted across every layer and locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalTranslated": {
+ "description": "Keys translated and written across every layer and locale.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "totalWouldTranslate": {
+ "description": "Keys a dry run would translate. Present only on a dry run.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "mode",
+ "totalTranslated",
+ "totalFailed",
+ "totalSkipped",
+ "layers",
+ "byLayer",
+ "dryRun"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "layers",
+ "summary"
+ ],
+ "type": "object"
+ }
+ ],
+ "type": "object"
+}