@nac3/forge-cli 1.0.77 → 1.0.79

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.
@@ -1,527 +1,535 @@
1
- {
2
- "panel.brand": "Yujin Forge",
3
- "panel.brand.kanji": "侑",
4
- "panel.tagline": "Assistente di sviluppo a voce",
5
- "panel.input.placeholder": "Chiedi a Yujin",
6
- "panel.button.send": "Invia",
7
- "panel.button.mic": "Parla (tieni premuto)",
8
- "panel.button.mic.recording": "Premi per fermare la registrazione",
9
- "panel.button.tts": "Voce attiva",
10
- "panel.button.keys": "Chiavi",
11
- "panel.button.minimise": "Riduci",
12
- "panel.button.maximise": "Ingrandisci",
13
- "panel.button.close": "Chiudi",
14
- "panel.button.language": "Lingua",
15
- "panel.trace.title": "Traccia delle azioni",
16
- "panel.trace.count.one": "{n} chiamata a strumento",
17
- "panel.trace.count.other": "{n} chiamate a strumenti",
18
- "panel.trace.empty.kanji": "空",
19
- "panel.trace.empty.body": "Yujin Forge mostra qui ogni strumento che invoca per risponderti: lettura del manifest, ricerca nella SPEC, modifica di componenti, lettura di documenti. Fai una domanda che ne richieda la consultazione.",
20
- "panel.trace.badge.tool": "STRUMENTO",
21
- "panel.trace.badge.voice": "VOCE",
22
- "panel.trace.badge.error": "ERRORE",
23
- "panel.stream.empty.kanji": "侑仁",
24
- "panel.stream.empty.body": "Yujin Forge online. Chiedi modifiche al progetto.",
25
- "panel.status.no_audio": "Nessun audio catturato. Il microfono probabilmente non ha ricevuto nulla.",
26
- "panel.status.did_not_catch": "Non ho capito. Riproviamo.",
27
- "panel.status.mic_denied": "Permesso microfono negato o non disponibile: {error}",
28
- "panel.status.voice_failed": "La voce ha fallito: {error}",
29
- "panel.status.voice_reply_failed": "Non sono riuscito a riprodurre la risposta: {error}",
30
- "panel.status.audio_play_error": "Non sono riuscito a riprodurre l'audio: {error}",
31
- "panel.status.reading": "Sto leggendo {filename}...",
32
- "panel.status.ingest_failed": "L'acquisizione e fallita: {error}",
33
- "panel.status.read_failed": "Non sono riuscito a leggere la specifica: {error}",
34
- "panel.drop.title": "Rilascia qui la specifica",
35
- "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
36
- "panel.ingest.spec_attached": "Specifica allegata: {filename}, {kb} KB",
37
- "panel.ingest.read_label": "Letta.",
38
- "panel.ingest.title_label": "Titolo: {title}",
39
- "panel.ingest.no_title": "(senza titolo)",
40
- "panel.ingest.format_label": "Formato: {format} / {sections} sezione(i) / {kb} KB",
41
- "panel.ingest.first_lines": "Prime righe:",
42
- "panel.ingest.action_done": "Azione {tool} completata.",
43
- "vault.modal.title": "Credenziali (vault)",
44
- "vault.modal.aria.close": "Chiudi modale delle credenziali",
45
- "vault.tab.list": "Slot caricati",
46
- "vault.tab.add": "Aggiungi",
47
- "vault.list.loading": "Caricamento...",
48
- "vault.list.empty": "Non hai ancora caricato nessuna chiave. Clicca su \"Aggiungi\" per iniziare.",
49
- "vault.add.slot_label": "Nome dello slot",
50
- "vault.add.slot_hint": "Lettere minuscole, cifre, underscore, trattino. Deve iniziare con una lettera.",
51
- "vault.add.value_label": "Valore in chiaro (mascherato)",
52
- "vault.add.value_hint": "Mostrato una sola volta al salvataggio. Dopo si puo sostituire ma non rileggere.",
53
- "vault.add.button_save": "Salva",
54
- "vault.add.button_cancel": "Annulla",
55
- "vault.add.success": "Slot {slot} salvato.",
56
- "vault.add.overwrite": "Slot {slot} sovrascritto.",
57
- "manual.intro": "Yujin Forge -- manuale utente",
58
- "manual.section.welcome": "Benvenuto",
59
- "manual.section.install": "Installazione",
60
- "manual.section.first_run": "Primo avvio",
61
- "manual.section.voice": "Comandi vocali",
62
- "manual.section.spec_ingest": "Acquisizione di specifiche",
63
- "manual.section.troubleshooting": "Risoluzione dei problemi",
64
- "manual.section.support": "Supporto",
65
- "lang.name.es": "Spagnolo",
66
- "lang.name.en": "Inglese",
67
- "lang.name.pt": "Portoghese",
68
- "lang.name.fr": "Francese",
69
- "lang.name.ja": "Giapponese",
70
- "lang.name.zh": "Cinese",
71
- "lang.name.hi": "Hindi",
72
- "lang.name.ar": "Arabo",
73
- "lang.name.de": "Tedesco",
74
- "lang.name.it": "Italiano",
75
- "recap.fallback_period": ".",
76
- "recap.empty": "Non c'e ancora nulla da riassumere.",
77
- "error_ui.severity.info": "INFO",
78
- "error_ui.severity.warning": "ATTENZIONE",
79
- "error_ui.severity.error": "ERRORE",
80
- "error_ui.severity.fatal": "FATALE",
81
- "error_ui.label.what": "Cosa e successo",
82
- "error_ui.label.why": "Perche",
83
- "error_ui.label.fix": "Come risolvere",
84
- "error_ui.label.cmd": "Comando",
85
- "error_ui.label.docs": "Docs locali",
86
- "error_ui.label.retry": "Riprovare tra",
87
- "error_ui.copy_btn": "Copia comando",
88
- "error_ui.unknown.what": "Forge ha incontrato un errore interno (codice sconosciuto).",
89
- "error_ui.unknown.why": "Il codice {code} non e nel catalogo. E un bug.",
90
- "error_ui.unknown.fix": "Apri un issue su https://github.com/yujinapp/yujin-forge/issues con il codice + traceback.",
91
- "error.cap_frontier_exhausted.what": "Cap mensile di token del tier frontier esaurito (modello grande).",
92
- "error.cap_frontier_exhausted.why": "Il tuo piano {plan} permette fino a {cap} token/mese su frontier. Hai usato {used}. Reset all'inizio del prossimo mese UTC.",
93
- "error.cap_frontier_exhausted.fix": "Passa a BYOK Anthropic diretto: bypassa il cap mensile del worker. Il tuo costo diventa quello che Anthropic addebita.",
94
- "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
95
- "error.cap_eco_exhausted.what": "Cap mensile di token del tier eco esaurito (modello piccolo).",
96
- "error.cap_eco_exhausted.why": "Il tuo piano {plan} permette fino a {cap} token/mese su eco. Hai usato {used}. Reset all'inizio del prossimo mese UTC.",
97
- "error.cap_eco_exhausted.fix": "Passa a BYOK diretto o aggiorna il piano. BYOK bypassa il cap del worker.",
98
- "error.cap_eco_exhausted.cmd": "yf brain config --eco-provider google_ai --eco-model gemini-2.5-flash-lite",
99
- "error.tier_not_in_plan.what": "Il tier {tier} non e abilitato sul tuo piano.",
100
- "error.tier_not_in_plan.why": "Il tuo piano {plan} non include il tier {tier}. Probabilmente sei su free-public o la tua licenza e scaduta.",
101
- "error.tier_not_in_plan.fix": "Attiva una licenza a pagamento o passa a BYOK diretto (tuo costo, senza cap del worker).",
102
- "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
103
- "error.response_truncated.what": "La risposta del modello e stata tagliata prima di finire.",
104
- "error.response_truncated.why": "Limite managed_max_tokens_per_turn = {limit} token raggiunto a meta turno. Il modello ha smesso di generare.",
105
- "error.response_truncated.fix": "Alza il limite via yf limits. Si applica al prossimo turno senza riavviare la chat.",
106
- "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
107
- "error.response_truncated.banner": "[Risposta troncata da max_tokens={max}. Alza il limite con: yf limits set managed_max_tokens_per_turn {suggested}]",
108
- "error.modal_trace_stale.what": "Il modal di approvazione e scaduto o e orfano.",
109
- "error.modal_trace_stale.why": "Il trace_id {trace_id} non ha approval pending nel dispatcher. Probabile race condition tra invoke e stato del panel, o un cancel precedente ha lasciato il trace zombi.",
110
- "error.modal_trace_stale.fix": "Reinvoca il verb dalla chat: avvia un nuovo trace pulito. Se persiste, esegui yf doctor per controllare il panel.",
111
- "error.modal_trace_stale.cmd": "yf doctor",
112
- "error.byok_key_missing.what": "API key mancante per il provider {provider}.",
113
- "error.byok_key_missing.why": "Hai configurato {provider} come provider del tier {tier} ma lo slot byok_{slot} non e nel Vault crittografato.",
114
- "error.byok_key_missing.fix": "Configura la key con yf keys set (atomico, mode 0600, mai loggato).",
115
- "error.byok_key_missing.cmd": "yf keys set {slot}",
116
- "error.worker_unreachable.what": "Non sono riuscito a raggiungere il worker yujin.app.",
117
- "error.worker_unreachable.why": "Timeout di rete o worker down (HTTP {status}). Riprovato {attempts} volte.",
118
- "error.worker_unreachable.fix": "Controlla la tua internet. Se OK, passa temporaneamente a BYOK diretto per evitare la dipendenza dal worker.",
119
- "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
120
- "error.vault_decrypt_failed.what": "Non sono riuscito a decifrare una chiave dal Vault.",
121
- "error.vault_decrypt_failed.why": "La master key e errata o il file del Vault e corrotto. Puo succedere se hai spostato la config tra macchine senza migrare la master o per disk error.",
122
- "error.vault_decrypt_failed.fix": "Tira la copia dal server (ricripta con la tua master locale) se hai server backup attivo.",
123
- "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
124
- "error.shell_exec_rejected.what": "Hai rifiutato il modal R8 di yujin.shell.exec.",
125
- "error.shell_exec_rejected.why": "Il comando {command} e stato classificato come {classification}. shell.exec chiede sempre approvazione per sicurezza, anche se il comando e read-only.",
126
- "error.shell_exec_rejected.fix": "Se il comando era read-only (yf projects active, git status, ls), usa il verb nativo equivalente. Se era necessario e l'hai rifiutato per errore, reinvoca.",
127
- "error.project_not_registered.what": "Nessun progetto adopter registrato.",
128
- "error.project_not_registered.why": "Il verb invocato richiede un project root attivo ma ~/.yujin-forge/projects.json non ha voci.",
129
- "error.project_not_registered.fix": "Creane uno con yujin.project.init o registrane uno esistente con yf projects add.",
130
- "error.project_not_registered.cmd": "yf projects scan",
131
- "panel.button.agents": "Agenti",
132
- "panel.agents.title": "Agenti",
133
- "panel.agents.subtitle": "Director e sub-agenti registrati in questo progetto",
134
- "panel.agents.empty.title": "Nessun agente ancora",
135
- "panel.agents.empty.body": "Esegui `yf agent install --defaults` per registrare il Director e i suoi 4 sub-agenti (Analista, Coder, Tester, Scaffolder).",
136
- "panel.agents.legend.eco": "Eco",
137
- "panel.agents.legend.managed": "Managed",
138
- "panel.agents.legend.frontier": "Frontier",
139
- "panel.agents.status.disabled": "Runtime degli agenti non avviato",
140
- "panel.agents.event.running": "In esecuzione",
141
- "panel.agents.event.idle": "Inattivo",
142
- "panel.agents.tick.live": "Connesso",
143
- "panel.agents.tick.lost": "Connessione persa",
144
- "workflow.phase.i": "Triage e intento",
145
- "workflow.phase.ii": "Chiarimento (funzionale + 4 NFR + blocchi)",
146
- "workflow.phase.iii": "Specifiche (RFP + Arch + Design + approvazioni)",
147
- "workflow.phase.iv": "Bootstrap",
148
- "workflow.phase.v": "Sviluppo a blocchi",
149
- "workflow.phase.vi": "Deploy + post-lancio",
150
- "wizard.title": "Benvenuto in Yujin Forge",
151
- "wizard.close": "Chiudi",
152
- "wizard.intro": "Per iniziare, scegli come Forge si connette al tuo modello AI. Puoi cambiare la scelta in seguito da Settings.",
153
- "wizard.back": "Indietro",
154
- "wizard.start": "Inizia",
155
- "wizard.plan.badge": "Consigliato",
156
- "wizard.plan.title": "Piano Claude",
157
- "wizard.plan.desc": "Abbonamento mensile Claude. Opzione piu economica per uso continuo. Forge usa la tua sessione claude -p.",
158
- "wizard.plan.price": "Canone mensile fisso (Piano)",
159
- "wizard.plan.step.title": "Connetti il tuo Piano Claude",
160
- "wizard.plan.step.1": "Apri un nuovo terminale.",
161
- "wizard.plan.step.2": "Esegui il comando claude (senza argomenti) e completa il login nel browser.",
162
- "wizard.plan.step.3": "Torna qui e clicca Sono loggato per verificare.",
163
- "wizard.plan.done": "Sono loggato",
164
- "wizard.byok.title": "La tua API key (BYOK)",
165
- "wizard.byok.desc": "La tua key di qualsiasi provider (Anthropic, OpenAI, Google, DeepSeek...). Paghi a consumo sul tuo account.",
166
- "wizard.byok.price": "Pagamento a uso (Console)",
167
- "wizard.byok.step.title": "Scegli il provider e incolla la tua API key",
168
- "wizard.byok.step.intro": "Scegli il provider dal menu e incolla la sua API key. Forge la salva cifrata nel Vault locale; non lascia mai la tua macchina.",
169
- "wizard.byok.test": "Valida e salva",
170
- "wizard.skip.title": "Sono gia configurato",
171
- "wizard.skip.desc": "Salta il wizard. Puoi riaprirlo in seguito da Settings.",
172
- "wizard.done.kanji": "Fatto",
173
- "wizard.done.title": "Fatto",
174
- "wizard.done.msg": "Forge e configurato. Inizia a chattare.",
175
- "pizarron.button.read": "Leggimi",
176
- "pizarron.button.copy": "Copia",
177
- "pizarron.button.edit": "Modifica",
178
- "pizarron.graph.refresh": "Aggiorna",
179
- "pizarron.graph.regenerating": "Rigenerando...",
180
- "pizarron.graph.detail.hint": "Tocca un nodo per il dettaglio.",
181
- "pizarron.graph.detail.empty": "Nessun dettaglio per questo nodo.",
1
+ {
2
+ "panel.brand": "Yujin Forge",
3
+ "panel.brand.kanji": "侑",
4
+ "panel.tagline": "Assistente di sviluppo a voce",
5
+ "panel.input.placeholder": "Chiedi a Yujin",
6
+ "panel.button.send": "Invia",
7
+ "panel.button.mic": "Parla (tieni premuto)",
8
+ "panel.button.mic.recording": "Premi per fermare la registrazione",
9
+ "panel.button.tts": "Voce attiva",
10
+ "panel.button.keys": "Chiavi",
11
+ "panel.button.minimise": "Riduci",
12
+ "panel.button.maximise": "Ingrandisci",
13
+ "panel.button.close": "Chiudi",
14
+ "panel.button.language": "Lingua",
15
+ "panel.trace.title": "Traccia delle azioni",
16
+ "panel.trace.count.one": "{n} chiamata a strumento",
17
+ "panel.trace.count.other": "{n} chiamate a strumenti",
18
+ "panel.trace.empty.kanji": "空",
19
+ "panel.trace.empty.body": "Yujin Forge mostra qui ogni strumento che invoca per risponderti: lettura del manifest, ricerca nella SPEC, modifica di componenti, lettura di documenti. Fai una domanda che ne richieda la consultazione.",
20
+ "panel.trace.badge.tool": "STRUMENTO",
21
+ "panel.trace.badge.voice": "VOCE",
22
+ "panel.trace.badge.error": "ERRORE",
23
+ "panel.stream.empty.kanji": "侑仁",
24
+ "panel.stream.empty.body": "Yujin Forge online. Chiedi modifiche al progetto.",
25
+ "panel.status.no_audio": "Nessun audio catturato. Il microfono probabilmente non ha ricevuto nulla.",
26
+ "panel.status.did_not_catch": "Non ho capito. Riproviamo.",
27
+ "panel.status.mic_denied": "Permesso microfono negato o non disponibile: {error}",
28
+ "panel.status.voice_failed": "La voce ha fallito: {error}",
29
+ "panel.status.voice_reply_failed": "Non sono riuscito a riprodurre la risposta: {error}",
30
+ "panel.status.audio_play_error": "Non sono riuscito a riprodurre l'audio: {error}",
31
+ "panel.status.reading": "Sto leggendo {filename}...",
32
+ "panel.status.ingest_failed": "L'acquisizione e fallita: {error}",
33
+ "panel.status.read_failed": "Non sono riuscito a leggere la specifica: {error}",
34
+ "panel.drop.title": "Rilascia qui la specifica",
35
+ "panel.drop.hint": "PDF, DOCX, HTML, MD, RTF, EPUB, CSV, XLSX, TXT",
36
+ "panel.ingest.spec_attached": "Specifica allegata: {filename}, {kb} KB",
37
+ "panel.ingest.read_label": "Letta.",
38
+ "panel.ingest.title_label": "Titolo: {title}",
39
+ "panel.ingest.no_title": "(senza titolo)",
40
+ "panel.ingest.format_label": "Formato: {format} / {sections} sezione(i) / {kb} KB",
41
+ "panel.ingest.first_lines": "Prime righe:",
42
+ "panel.ingest.action_done": "Azione {tool} completata.",
43
+ "vault.modal.title": "Credenziali (vault)",
44
+ "vault.modal.aria.close": "Chiudi modale delle credenziali",
45
+ "vault.tab.list": "Slot caricati",
46
+ "vault.tab.add": "Aggiungi",
47
+ "vault.list.loading": "Caricamento...",
48
+ "vault.list.empty": "Non hai ancora caricato nessuna chiave. Clicca su \"Aggiungi\" per iniziare.",
49
+ "vault.add.slot_label": "Nome dello slot",
50
+ "vault.add.slot_hint": "Lettere minuscole, cifre, underscore, trattino. Deve iniziare con una lettera.",
51
+ "vault.add.value_label": "Valore in chiaro (mascherato)",
52
+ "vault.add.value_hint": "Mostrato una sola volta al salvataggio. Dopo si puo sostituire ma non rileggere.",
53
+ "vault.add.button_save": "Salva",
54
+ "vault.add.button_cancel": "Annulla",
55
+ "vault.add.success": "Slot {slot} salvato.",
56
+ "vault.add.overwrite": "Slot {slot} sovrascritto.",
57
+ "manual.intro": "Yujin Forge -- manuale utente",
58
+ "manual.section.welcome": "Benvenuto",
59
+ "manual.section.install": "Installazione",
60
+ "manual.section.first_run": "Primo avvio",
61
+ "manual.section.voice": "Comandi vocali",
62
+ "manual.section.spec_ingest": "Acquisizione di specifiche",
63
+ "manual.section.troubleshooting": "Risoluzione dei problemi",
64
+ "manual.section.support": "Supporto",
65
+ "lang.name.es": "Spagnolo",
66
+ "lang.name.en": "Inglese",
67
+ "lang.name.pt": "Portoghese",
68
+ "lang.name.fr": "Francese",
69
+ "lang.name.ja": "Giapponese",
70
+ "lang.name.zh": "Cinese",
71
+ "lang.name.hi": "Hindi",
72
+ "lang.name.ar": "Arabo",
73
+ "lang.name.de": "Tedesco",
74
+ "lang.name.it": "Italiano",
75
+ "recap.fallback_period": ".",
76
+ "recap.empty": "Non c'e ancora nulla da riassumere.",
77
+ "error_ui.severity.info": "INFO",
78
+ "error_ui.severity.warning": "ATTENZIONE",
79
+ "error_ui.severity.error": "ERRORE",
80
+ "error_ui.severity.fatal": "FATALE",
81
+ "error_ui.label.what": "Cosa e successo",
82
+ "error_ui.label.why": "Perche",
83
+ "error_ui.label.fix": "Come risolvere",
84
+ "error_ui.label.cmd": "Comando",
85
+ "error_ui.label.docs": "Docs locali",
86
+ "error_ui.label.retry": "Riprovare tra",
87
+ "error_ui.copy_btn": "Copia comando",
88
+ "error_ui.unknown.what": "Forge ha incontrato un errore interno (codice sconosciuto).",
89
+ "error_ui.unknown.why": "Il codice {code} non e nel catalogo. E un bug.",
90
+ "error_ui.unknown.fix": "Apri un issue su https://github.com/yujinapp/yujin-forge/issues con il codice + traceback.",
91
+ "error.cap_frontier_exhausted.what": "Cap mensile di token del tier frontier esaurito (modello grande).",
92
+ "error.cap_frontier_exhausted.why": "Il tuo piano {plan} permette fino a {cap} token/mese su frontier. Hai usato {used}. Reset all'inizio del prossimo mese UTC.",
93
+ "error.cap_frontier_exhausted.fix": "Passa a BYOK Anthropic diretto: bypassa il cap mensile del worker. Il tuo costo diventa quello che Anthropic addebita.",
94
+ "error.cap_frontier_exhausted.cmd": "yf brain config --frontier-provider anthropic --frontier-model claude-opus-4-7",
95
+ "error.cap_eco_exhausted.what": "Cap mensile di token del tier eco esaurito (modello piccolo).",
96
+ "error.cap_eco_exhausted.why": "Il tuo piano {plan} permette fino a {cap} token/mese su eco. Hai usato {used}. Reset all'inizio del prossimo mese UTC.",
97
+ "error.cap_eco_exhausted.fix": "Passa a BYOK diretto o aggiorna il piano. BYOK bypassa il cap del worker.",
98
+ "error.cap_eco_exhausted.cmd": "yf brain config --eco-provider google_ai --eco-model gemini-2.5-flash-lite",
99
+ "error.tier_not_in_plan.what": "Il tier {tier} non e abilitato sul tuo piano.",
100
+ "error.tier_not_in_plan.why": "Il tuo piano {plan} non include il tier {tier}. Probabilmente sei su free-public o la tua licenza e scaduta.",
101
+ "error.tier_not_in_plan.fix": "Attiva una licenza a pagamento o passa a BYOK diretto (tuo costo, senza cap del worker).",
102
+ "error.tier_not_in_plan.cmd": "yf license activate --key <jwt>",
103
+ "error.response_truncated.what": "La risposta del modello e stata tagliata prima di finire.",
104
+ "error.response_truncated.why": "Limite managed_max_tokens_per_turn = {limit} token raggiunto a meta turno. Il modello ha smesso di generare.",
105
+ "error.response_truncated.fix": "Alza il limite via yf limits. Si applica al prossimo turno senza riavviare la chat.",
106
+ "error.response_truncated.cmd": "yf limits set managed_max_tokens_per_turn 16384",
107
+ "error.response_truncated.banner": "[Risposta troncata da max_tokens={max}. Alza il limite con: yf limits set managed_max_tokens_per_turn {suggested}]",
108
+ "error.modal_trace_stale.what": "Il modal di approvazione e scaduto o e orfano.",
109
+ "error.modal_trace_stale.why": "Il trace_id {trace_id} non ha approval pending nel dispatcher. Probabile race condition tra invoke e stato del panel, o un cancel precedente ha lasciato il trace zombi.",
110
+ "error.modal_trace_stale.fix": "Reinvoca il verb dalla chat: avvia un nuovo trace pulito. Se persiste, esegui yf doctor per controllare il panel.",
111
+ "error.modal_trace_stale.cmd": "yf doctor",
112
+ "error.byok_key_missing.what": "API key mancante per il provider {provider}.",
113
+ "error.byok_key_missing.why": "Hai configurato {provider} come provider del tier {tier} ma lo slot byok_{slot} non e nel Vault crittografato.",
114
+ "error.byok_key_missing.fix": "Configura la key con yf keys set (atomico, mode 0600, mai loggato).",
115
+ "error.byok_key_missing.cmd": "yf keys set {slot}",
116
+ "error.worker_unreachable.what": "Non sono riuscito a raggiungere il worker yujin.app.",
117
+ "error.worker_unreachable.why": "Timeout di rete o worker down (HTTP {status}). Riprovato {attempts} volte.",
118
+ "error.worker_unreachable.fix": "Controlla la tua internet. Se OK, passa temporaneamente a BYOK diretto per evitare la dipendenza dal worker.",
119
+ "error.worker_unreachable.cmd": "yf brain config --frontier-provider anthropic",
120
+ "error.vault_decrypt_failed.what": "Non sono riuscito a decifrare una chiave dal Vault.",
121
+ "error.vault_decrypt_failed.why": "La master key e errata o il file del Vault e corrotto. Puo succedere se hai spostato la config tra macchine senza migrare la master o per disk error.",
122
+ "error.vault_decrypt_failed.fix": "Tira la copia dal server (ricripta con la tua master locale) se hai server backup attivo.",
123
+ "error.vault_decrypt_failed.cmd": "yf keys setup --pull",
124
+ "error.shell_exec_rejected.what": "Hai rifiutato il modal R8 di yujin.shell.exec.",
125
+ "error.shell_exec_rejected.why": "Il comando {command} e stato classificato come {classification}. shell.exec chiede sempre approvazione per sicurezza, anche se il comando e read-only.",
126
+ "error.shell_exec_rejected.fix": "Se il comando era read-only (yf projects active, git status, ls), usa il verb nativo equivalente. Se era necessario e l'hai rifiutato per errore, reinvoca.",
127
+ "error.project_not_registered.what": "Nessun progetto adopter registrato.",
128
+ "error.project_not_registered.why": "Il verb invocato richiede un project root attivo ma ~/.yujin-forge/projects.json non ha voci.",
129
+ "error.project_not_registered.fix": "Creane uno con yujin.project.init o registrane uno esistente con yf projects add.",
130
+ "error.project_not_registered.cmd": "yf projects scan",
131
+ "panel.button.agents": "Agenti",
132
+ "panel.agents.title": "Agenti",
133
+ "panel.agents.subtitle": "Director e sub-agenti registrati in questo progetto",
134
+ "panel.agents.empty.title": "Nessun agente ancora",
135
+ "panel.agents.empty.body": "Esegui `yf agent install --defaults` per registrare il Director e i suoi 4 sub-agenti (Analista, Coder, Tester, Scaffolder).",
136
+ "panel.agents.legend.eco": "Eco",
137
+ "panel.agents.legend.managed": "Managed",
138
+ "panel.agents.legend.frontier": "Frontier",
139
+ "panel.agents.status.disabled": "Runtime degli agenti non avviato",
140
+ "panel.agents.event.running": "In esecuzione",
141
+ "panel.agents.event.idle": "Inattivo",
142
+ "panel.agents.tick.live": "Connesso",
143
+ "panel.agents.tick.lost": "Connessione persa",
144
+ "workflow.phase.i": "Triage e intento",
145
+ "workflow.phase.ii": "Chiarimento (funzionale + 4 NFR + blocchi)",
146
+ "workflow.phase.iii": "Specifiche (RFP + Arch + Design + approvazioni)",
147
+ "workflow.phase.iv": "Bootstrap",
148
+ "workflow.phase.v": "Sviluppo a blocchi",
149
+ "workflow.phase.vi": "Deploy + post-lancio",
150
+ "wizard.title": "Benvenuto in Yujin Forge",
151
+ "wizard.close": "Chiudi",
152
+ "wizard.intro": "Per iniziare, scegli come Forge si connette al tuo modello AI. Puoi cambiare la scelta in seguito da Settings.",
153
+ "wizard.back": "Indietro",
154
+ "wizard.start": "Inizia",
155
+ "wizard.plan.badge": "Consigliato",
156
+ "wizard.plan.title": "Piano Claude",
157
+ "wizard.plan.desc": "Abbonamento mensile Claude. Opzione piu economica per uso continuo. Forge usa la tua sessione claude -p.",
158
+ "wizard.plan.price": "Canone mensile fisso (Piano)",
159
+ "wizard.plan.step.title": "Connetti il tuo Piano Claude",
160
+ "wizard.plan.step.1": "Apri un nuovo terminale.",
161
+ "wizard.plan.step.2": "Esegui il comando claude (senza argomenti) e completa il login nel browser.",
162
+ "wizard.plan.step.3": "Torna qui e clicca Sono loggato per verificare.",
163
+ "wizard.plan.done": "Sono loggato",
164
+ "wizard.byok.title": "La tua API key (BYOK)",
165
+ "wizard.byok.desc": "La tua key di qualsiasi provider (Anthropic, OpenAI, Google, DeepSeek...). Paghi a consumo sul tuo account.",
166
+ "wizard.byok.price": "Pagamento a uso (Console)",
167
+ "wizard.byok.step.title": "Scegli il provider e incolla la tua API key",
168
+ "wizard.byok.step.intro": "Scegli il provider dal menu e incolla la sua API key. Forge la salva cifrata nel Vault locale; non lascia mai la tua macchina.",
169
+ "wizard.byok.test": "Valida e salva",
170
+ "wizard.skip.title": "Sono gia configurato",
171
+ "wizard.skip.desc": "Salta il wizard. Puoi riaprirlo in seguito da Settings.",
172
+ "wizard.done.kanji": "Fatto",
173
+ "wizard.done.title": "Fatto",
174
+ "wizard.done.msg": "Forge e configurato. Inizia a chattare.",
175
+ "pizarron.button.read": "Leggimi",
176
+ "pizarron.button.copy": "Copia",
177
+ "pizarron.button.edit": "Modifica",
178
+ "pizarron.graph.refresh": "Aggiorna",
179
+ "pizarron.graph.regenerating": "Rigenerando...",
180
+ "pizarron.graph.detail.hint": "Tocca un nodo per il dettaglio.",
181
+ "pizarron.graph.detail.empty": "Nessun dettaglio per questo nodo.",
182
182
  "pizarron.graph.detail.weight": "peso",
183
183
  "pizarron.graph.orbit": "Orbita",
184
- "pizarron.graph.orbit.speed": "Velocita orbitale",
185
- "startup.tab.graph": "Grafo visuale",
186
- "startup.tab.graphSem": "Grafo semantico",
187
- "startup.tab.pendings": "In sospeso",
188
- "startup.tab.workflow": "Workflow",
189
- "settings.startupTabs": "Schede all'avvio (grafo, in sospeso, workflow)",
190
- "graph.term.nodes": "nodi",
191
- "graph.term.edges": "archi",
192
- "coding.read": "Lettura di {x}",
193
- "coding.read_bare": "Lettura di un file",
194
- "coding.edit": "Modifica di {x}",
195
- "coding.edit_bare": "Modifica di un file",
196
- "coding.write": "Scrittura di {x}",
197
- "coding.write_bare": "Scrittura di un file",
198
- "coding.notebook_bare": "Modifica del notebook",
199
- "coding.bash": "Esecuzione: {x}",
200
- "coding.bash_bare": "Esecuzione di un comando",
201
- "coding.grep": "Ricerca \"{x}\"",
202
- "coding.grep_bare": "Ricerca nel codice",
203
- "coding.glob": "Elenco di {x}",
204
- "coding.glob_bare": "Elenco dei file",
205
- "coding.web_bare": "Lettura del web",
206
- "coding.websearch": "Ricerca web: {x}",
207
- "coding.websearch_bare": "Ricerca web",
208
- "coding.task": "Sub-agente: {x}",
209
- "coding.task_bare": "Avvio di un sub-agente",
210
- "coding.todo": "Aggiornamento della sua lista attivita",
211
- "coding.verb_bare": "Esecuzione di un verbo yujin",
212
- "panel.button.stop": "Ferma",
213
- "panel.status.stopping": "Arresto...",
214
- "panel.status.noActiveTurn": "Non c'era nessun turno in corso.",
215
- "panel.status.interruptFailed": "Impossibile inviare l'interruzione.",
216
- "panel.status.turnInterrupted": "Turno interrotto.",
217
- "panel.label.interrupted": "(interrotto)",
218
- "panel.queue.label": "In coda",
219
- "panel.queue.remove": "Rimuovi dalla coda",
220
- "panel.project.switchHint": "Cambia progetto",
221
- "panel.project.title": "Progetti",
222
- "panel.project.add": "Aggiungi progetto...",
223
- "panel.project.addPrompt": "Percorso assoluto del progetto da aggiungere:",
224
- "panel.project.switching": "Cambio progetto...",
225
- "startup.tab.files": "File",
226
- "panel.project.remove": "Rimuovi dall'elenco",
227
- "panel.project.removeConfirm": "Rimuovere questo progetto dall'elenco? (non elimina i file su disco)",
228
- "panel.project.removed": "Progetto rimosso dall'elenco",
229
- "panel.files.refresh": "Aggiorna",
230
- "panel.files.loading": "Caricamento...",
231
- "panel.files.error": "Impossibile leggere i file.",
232
- "panel.files.empty": "(nessun file)",
233
- "panel.files.truncated": "(elenco troncato)",
234
- "panel.files.opened": "Aperto",
235
- "panel.files.openFailed": "Impossibile aprire il file.",
236
- "startup.tab.tasks": "Attivita",
237
- "settings.bridge.title": "Coordinamento tra istanze",
238
- "settings.bridge.accept": "Accetta messaggi diretti da altre istanze (iniettati come chat)",
239
- "settings.bridge.composePlaceholder": "Messaggio alle altre istanze...",
240
- "settings.voice.title": "Voce",
241
- "settings.voice.mode": "Modalita",
242
- "settings.voice.modeMic": "modalita mic",
243
- "settings.voice.stt": "STT",
244
- "settings.voice.sttBrowser": "STT browser",
245
- "settings.voice.ttsEngine": "Motore TTS",
246
- "settings.voice.ttsBrowser": "TTS browser",
247
- "settings.voice.ttsVoice": "Voce TTS (solo Google)",
248
- "settings.vad.title": "VAD (rilevamento del silenzio)",
249
- "settings.vad.resetDefaults": "Ripristina predefiniti",
250
- "settings.vad.engine": "Motore",
251
- "settings.vad.engineAmplitude": "Ampiezza (RMS)",
252
- "settings.vad.engineBand": "Banda 80-400Hz",
253
- "settings.vad.baselineWindow": "Finestra baseline",
254
- "settings.vad.thresholdMult": "Mult. soglia (baseline x N)",
255
- "settings.vad.thresholdMin": "Soglia minima",
256
- "settings.vad.thresholdMax": "Soglia massima",
257
- "settings.vad.silence": "Silenzio per chiudere",
258
- "settings.vad.minVoiced": "Voce minima (anti-blip)",
259
- "settings.vad.tick": "Tick del VAD",
260
- "settings.vad.bandLow": "Banda voce: low (Hz)",
261
- "settings.vad.bandHigh": "Banda voce: high (Hz)",
262
- "settings.vad.showOverlay": "Mostra overlay live",
263
- "settings.vad.logStats": "Registra stat per sessione",
264
- "settings.brain.anthropicMode": "Anthropic: modalita",
265
- "settings.brain.modePlan": "Plan (abbonamento Claude)",
266
- "settings.brain.modeConsole": "Console (API key)",
267
- "settings.brain.modeNote": "Si applica alla riapertura del pannello.",
268
- "settings.brain.ecoEnabled": "Modalita eco abilitata",
269
- "settings.brain.ecoHint": "spento = sempre frontier",
270
- "settings.brain.modelEco": "Modello eco",
271
- "settings.brain.modelFrontier": "Modello frontier",
272
- "settings.brain.modelMultimodal": "Modello multimodal",
273
- "settings.brain.multimodalClearTitle": "Rimuovi il brain multimodal dedicato (torna al routing della vision automatico)",
274
- "settings.brain.auto": "Auto",
275
- "settings.brain.multimodalHint": "Brain dedicato per i turni con immagine. Auto = routing della vision automatico (il frontier se vede, altrimenti un avviso).",
276
- "settings.brain.geminiCache": "Cache esplicita di Gemini (CachedContent)",
277
- "settings.brain.geminiCacheHint": "Opt-in. Utile nelle sessioni lunghe con Gemini Pro; nelle sessioni brevi la cache implicita gratuita di 2.5 basta.",
278
- "settings.federation.title": "Federazione di brain",
279
- "settings.federation.intro": "Usa il brain di un altro Forge (la sua key non lascia mai la sua macchina) o presta il tuo. Il tuo codice gira in locale; viaggia solo l'inferenza.",
280
- "settings.federation.connectedTo": "Connesso a",
281
- "settings.federation.disconnect": "Disconnetti",
282
- "settings.federation.connectMe": "Connettimi",
283
- "settings.federation.tokenPlaceholder": "Incolla il codice di federazione",
284
- "settings.federation.connect": "Connetti",
285
- "settings.federation.lendBrain": "Presta il mio brain",
286
- "settings.federation.generateCode": "Genera codice",
287
- "settings.federation.host": "Ospita (rispondi ai figli)",
288
- "settings.federation.fedBrain": "Brain di federazione",
289
- "settings.federation.fedBrainNote": "Quello che risponde ai figli. API diretta (DeepSeek per default). Claude Plan non serve per ospitare; serve una key con saldo.",
290
- "settings.federation.codeOnce": "Codice (uso singolo)",
291
- "settings.federation.copy": "Copia",
292
- "settings.keys.title": "API keys (BYOK)",
293
- "settings.keys.configure": "Configura",
294
- "settings.keys.remove": "Rimuovi",
295
- "settings.keys.brainAnthropic": "Brain (Anthropic)",
296
- "settings.keys.brainOpenai": "Brain (OpenAI)",
297
- "settings.keys.brainGoogle": "Brain (Google IA)",
298
- "settings.keys.brainDeepseek": "Brain (DeepSeek)",
299
- "settings.keys.brainXai": "Brain (xAI / Grok)",
300
- "settings.keys.brainMistral": "Brain (Mistral)",
301
- "settings.keys.brainCohere": "Brain (Cohere)",
302
- "settings.keys.sttGoogle": "STT Google",
303
- "settings.keys.ttsGoogle": "TTS Google",
304
- "settings.keys.ttsElevenlabs": "TTS ElevenLabs",
305
- "settings.keys.sttWhisper": "STT Whisper",
306
- "settings.lang.title": "Lingua",
307
- "settings.lang.panelVoice": "Pannello + voce",
308
- "settings.lang.changeButton": "Cambia lingua",
309
- "settings.vault.title": "Vault (criptato)",
310
- "settings.vault.slots": "Slot",
311
- "settings.vault.open": "Apri vault",
312
- "settings.license.email": "Email",
313
- "settings.license.validated": "Validato",
314
- "settings.license.connectHint": "Connetti il tuo account Polar. Inserisci l'email con cui hai pagato e sincronizziamo il tuo piano automaticamente.",
315
- "settings.license.emailPlaceholder": "email@esempio.com",
316
- "settings.license.connect": "Connetti",
317
- "settings.license.sync": "Sincronizza con Polar",
318
- "settings.license.buy": "Acquista / attiva piano",
319
- "settings.budget.title": "Budget di questo mese",
320
- "settings.budget.renews": "Si rinnova",
321
- "settings.budget.tokensEco": "Token eco",
322
- "settings.budget.tokensFrontier": "Token frontier",
323
- "settings.budget.buyExtension": "Acquista estensione di token",
324
- "settings.limits.title": "Limiti (avanzato)",
325
- "settings.limits.editHint": "Modifica qualsiasi valore + tab/blur salva.",
326
- "settings.limits.reset": "Ripristina predefiniti",
327
- "settings.bookmarks.title": "Segnalibri del Reader",
328
- "settings.graph.title": "Grafo della conoscenza del progetto",
329
- "settings.pair.title": "Collega il telefono",
330
- "settings.pair.hint": "Apri Forge Mobile, tocca \"Collega\" e scansiona questo QR. Fatto.",
331
- "settings.pair.generateQr": "Genera QR",
332
- "settings.pair.cantRead": "La fotocamera non legge il QR? Copia questo codice e incollalo in Forge Mobile:",
333
- "settings.audit.viewFull": "Vedi tutto",
334
- "settings.audit.close": "Chiudi",
335
- "settings.audit.allKinds": "Tutti i kinds",
336
- "settings.audit.allModes": "Tutti i modes",
337
- "settings.audit.copyJson": "Copia JSON",
338
- "settings.audit.closeDetail": "Chiudi dettaglio",
339
- "settings.about.title": "Informazioni",
340
- "settings.danger.title": "Zona di pericolo",
341
- "settings.danger.warning": "Quando ON, Yujin esegue OGNI azione senza chiedere conferma (incluso shell.exec, rm, git push --force, ecc). Velocita prima della sicurezza. Tutto viene registrato nell'audit log.",
342
- "settings.keyEditor.placeholder": "Incolla qui la tua API key",
343
- "settings.license.title": "Licenza",
344
- "settings.plan": "Piano",
345
- "settings.audit.title": "Registro di audit",
346
- "settings.legal.title": "Note legali",
347
- "panel.status.projectSwitchFail": "Impossibile cambiare progetto.",
348
- "panel.status.projectRemoveFail": "Impossibile rimuovere il progetto.",
349
- "panel.status.projectAddFail": "Impossibile aggiungere il progetto.",
350
- "panel.status.cancelFail": "Impossibile annullare: {reason}",
351
- "panel.status.cancelNetError": "Errore di rete durante l'annullamento della shell.",
352
- "panel.status.notEditable": "Questo tipo di contenuto non e modificabile.",
353
- "panel.status.savedAsPicker": "Salvato come: {name} (nel percorso scelto nella finestra di dialogo).",
354
- "panel.status.saveAsFail": "Errore in Salva come: {error} -- uso del fallback.",
355
- "panel.status.saveFail": "Errore durante il salvataggio: {error}",
356
- "panel.status.savedAs": "Salvato come: {path} ({bytes} byte)",
357
- "panel.status.netError": "Errore di rete: {error}",
358
- "panel.status.savedTabOnly": "Modifiche salvate nella scheda (non su disco -- senza file_path).",
359
- "panel.status.saved": "Salvato: {path} ({bytes} byte)",
360
- "panel.status.copied": "Copiato negli appunti.",
361
- "panel.status.copyFail": "Impossibile copiare.",
362
- "panel.status.modeAvailable": "Modalita disponibili: didactico, tecnico. Uso: /modo tecnico",
363
- "panel.status.modeChangeFail": "Impossibile cambiare modalita: {error}",
364
- "panel.status.modeChanged": "Modalita cambiata in {target}. Il prossimo turno usa gia questa modalita.",
365
- "panel.status.genericError": "Errore: {error}",
366
- "panel.status.brainTierAuto": "Brain tier di nuovo su auto (il router decide in base a verbo / fase).",
367
- "panel.status.brainTierForced": "Brain tier forzato a \"{target}\" per questa sessione. /auto torna al router.",
368
- "panel.confirm.tabUnsaved": "La scheda \"{title}\" ha modifiche non salvate. Chiudere comunque?",
369
- "panel.confirm.tabsUnsaved": "Ci sono schede con modifiche non salvate. Chiudere tutto comunque?",
370
- "panel.confirm.discardChanges": "Annullare le modifiche non salvate?",
371
- "panel.confirm.removeSlot": "Rimuovere lo slot \"{slot}\"? L'operazione non puo essere annullata.",
372
- "panel.confirm.removeKey": "Rimuovere la key di {slot}?",
373
- "panel.prompt.saveAs": "Salva come (percorso relativo al progetto):",
374
- "panel.voice.sttFallback": "STT del browser non disponibile; uso del fallback lato server.",
375
- "panel.voice.noMicSupport": "Il tuo browser non supporta l'accesso al microfono.",
376
- "panel.voice.recordingCountdown": "Registrazione... stop automatico tra {n}s",
377
- "panel.voice.autoStopped": "Registrazione interrotta automaticamente a 55s (limite di 1 min di Google STT). Prova qualcosa di piu breve.",
378
- "panel.voice.noAudio": "Nessun audio acquisito. Riprova.",
379
- "panel.voice.audioTooLong": "Audio troppo lungo (>1 min). Limite sincrono di Google STT. Prova qualcosa di piu breve.",
380
- "panel.voice.ttsUnavailable": "TTS del browser non disponibile; torna a Google nelle impostazioni.",
381
- "panel.voice.micClosedHalfDuplex": "Mic chiuso mentre Yujin parla (half-duplex).",
382
- "panel.voice.micBlocked": "Microfono bloccato. Consenti il microfono per questa app nelle impostazioni del browser e riprova.",
383
- "panel.voice.noMicDevice": "Nessun microfono rilevato su questo dispositivo.",
384
- "panel.voice.micOpenFail": "Impossibile aprire il microfono: {error}",
385
- "panel.voice.micOpenListening": "Mic aperto, in ascolto...",
386
- "panel.voice.listening": "Ti ascolto...",
387
- "panel.voice.listeningInterim": "Ti ascolto... {text}",
388
- "panel.voice.micBlockedBrowser": "Microfono bloccato dal browser. Fai clic sull'icona del lucchetto nella barra degli URL e consenti il microfono, poi ricarica la pagina. Oppure cambia STT in \"google\" / \"whisper\" nelle impostazioni se hai la API key.",
389
- "panel.voice.noMicPhysical": "Nessun microfono fisico rilevato. Collegane uno o cambia STT in \"google\" / \"whisper\" nelle impostazioni.",
390
- "panel.voice.networkRequired": "Web Speech richiede una connessione a internet (Chrome usa Google dietro le quinte). Prova senza connessione intermittente o cambia STT in \"whisper\" se hai la API key.",
391
- "panel.voice.langNotSupported": "Il tuo browser non supporta questa lingua per lo STT. Cambia la lingua del pannello con una supportata (en, es, pt) o cambia STT in \"google\" / \"whisper\".",
392
- "panel.voice.micError": "Errore mic: {error}",
393
- "panel.voice.noAudioToRecognizer": "Nessun audio e arrivato al riconoscitore: la dettatura del browser non sta acquisendo in questa app.",
394
- "panel.voice.micOpenNoVoice": "Mic aperto ma nessuna voce rilevata. Avvicinati al microfono e parla piu forte; se continua, la dettatura gratuita non funziona in questa PWA.",
395
- "panel.voice.voiceNoText": "Voce rilevata ma il browser non ha restituito testo (STT gratuito non disponibile in questa PWA).",
396
- "panel.voice.startingDictation": "Avvio della dettatura...",
397
- "panel.voice.couldNotStartMic": "Impossibile avviare il mic: {error}",
398
- "panel.status.imageTooLarge": "Immagine troppo grande (>6MB): {name}",
399
- "panel.status.imageReady": "Immagine pronta per l'invio: {name}",
400
- "panel.status.imageReadFail": "Impossibile leggere l'immagine: {error}",
401
- "panel.tip.attachFile": "Allega file",
402
- "panel.tip.refreshDiscovery": "Aggiorna discovery",
403
- "panel.tip.refreshNow": "Aggiorna ora",
404
- "panel.tip.filterByProject": "Filtra per progetto",
405
- "panel.tip.concurrentRuns": "Esecuzioni concorrenti: limiti globale / per progetto",
406
- "panel.tip.mcpBridges": "MCP Bridges (F101)",
407
- "panel.tip.activity": "Attivita agenti + ispettore bridge + chat per agente",
408
- "panel.tip.settings": "Impostazioni (modalita voce, STT, TTS, chiavi, lingua)",
409
- "panel.tip.zoomOut": "Riduci zoom (Ctrl -)",
410
- "panel.tip.zoomReset": "Reimposta zoom (Ctrl 0)",
411
- "panel.tip.zoomIn": "Aumenta zoom (Ctrl +)",
412
- "panel.tip.maximize": "Massimizza / ripristina (schermo intero)",
413
- "panel.tip.closeBoard": "Chiudi l'intera lavagna",
414
- "panel.tip.openInEditor": "Apri nel mio editor",
415
- "panel.tip.open": "Apri",
416
- "panel.tip.saveAs": "Salva come -- scegli un nuovo percorso (relativo al progetto)",
417
- "panel.tip.codeModeDetail": "Dettagliato: file, diff e comandi in tempo reale",
418
- "panel.tip.codeModeZen": "Sumi-e: arte con testo occasionale",
419
- "panel.tip.cancelShell": "Annulla comando shell",
420
- "panel.tip.closeTab": "Chiudi scheda",
421
- "panel.tip.reopenNativeTabs": "Riapri le schede native chiuse",
422
- "panel.tip.notTestedYet": "non ancora testato",
423
- "panel.aria.activity": "Attivita",
424
- "panel.aria.settings": "Impostazioni",
425
- "panel.aria.zoomOut": "Riduci zoom",
426
- "panel.aria.zoomIn": "Aumenta zoom",
427
- "panel.aria.maximize": "Massimizza",
428
- "panel.aria.closeBoard": "chiudi tutto",
429
- "panel.aria.thinking": "sto pensando",
430
- "panel.hint.boardEmpty": "I contenuti strutturati appaiono qui: codice, tabelle, documenti. Chiedi a Yujin di scrivere o modificare qualcosa.",
431
- "panel.hint.planMode": "Sei in modalita Plan (abbonamento). La lavagna viene disegnata quando il brain gira in modalita API: cambiala in <strong>Impostazioni &gt; Brain &gt; Anthropic: modalita &gt; Console</strong> e riapri il pannello.",
432
- "panel.hint.bookmarksEmpty": "Nessun bookmark. Chiedi a Yujin \"segna questo punto come ...\" mentre leggi un documento.",
433
- "panel.voice.replyFailed": "Risposta vocale non riuscita: {err}",
434
- "panel.voice.replyError": "Errore nella risposta vocale: {err}",
435
- "panel.status.languageSwitchFailed": "Cambio lingua non riuscito: {err}",
436
- "panel.status.languageListFailed": "Impossibile caricare la lista delle lingue",
437
- "panel.legal.loading": "Caricamento...",
438
- "panel.legal.loadError": "Errore {status} nel caricamento del documento.",
439
- "panel.legal.networkError": "Errore di rete: {err}",
440
- "panel.legal.defaultTitle": "Note legali",
441
- "panel.feedback.copied": "Copiato",
442
- "panel.feedback.copyFailed": "Copia non riuscita",
443
- "panel.feedback.clipboardUnavailable": "Appunti non disponibili",
444
- "panel.feedback.saving": "Salvataggio...",
445
- "panel.feedback.saved": "Salvato.",
446
- "panel.feedback.saveError": "errore di salvataggio",
447
- "panel.feedback.netError": "errore di rete",
448
- "panel.feedback.netErrorSaving": "errore di rete nel salvataggio",
449
- "panel.feedback.errorPrefix": "Errore: {detail}",
450
- "panel.pair.generating": "Generazione...",
451
- "panel.pair.generateQr": "Genera QR",
452
- "panel.pair.copy": "Copia",
453
- "panel.pair.expiry": "Scade tra ~{mins} min. Rigeneralo se scade.",
454
- "panel.pair.qrNetError": "Errore di rete nella generazione del QR.",
455
- "panel.audit.copyJson": "Copia JSON",
456
- "panel.limits.resetApplied": "Ripristino ai valori predefiniti applicato",
457
- "panel.nac3.effects": "Effetti: {list}",
458
- "panel.nac3.effectsUnknown": "sconosciuti",
459
- "panel.nac3.cancel": "Annulla",
460
- "panel.nac3.reject": "Rifiuta",
461
- "panel.nac3.approve": "Approva",
462
- "panel.nac3.approveDestructive": "Approva (distruttivo)",
463
- "panel.nac3.executing": "Esecuzione...",
464
- "panel.tts.providerBrowser": "TTS browser",
465
- "panel.tts.providerGoogle": "TTS Google",
466
- "panel.tts.providerTitle": "Clicca per alternare tra browser (SpeechSynthesis nativo, voci del SO) e Google Cloud TTS (lato server).",
467
- "panel.stt.providerBrowser": "STT browser",
468
- "panel.stt.providerGoogle": "STT Google",
469
- "panel.stt.providerWhisper": "STT Whisper",
470
- "panel.stt.providerTitle": "Clicca per alternare tra browser (veloce + es-AR nativo + gratis), Google Cloud STT (lato server, BYOK) o Whisper (lato server, BYOK).",
471
- "panel.tts.voiceTitle": "Voce attuale: {id} / {persona} ({gender}) -- {style}. Clicca per scorrere. Studio = articola la s chiara; Neural2 = spagnolo naturale (aspira le s finali).",
472
- "panel.license.lendNeedsLicense": "attiva la licenza per prestare il tuo brain",
473
- "panel.license.emailInvalid": "Inserisci un email valida (con @).",
474
- "panel.license.connecting": "Connessione...",
475
- "panel.license.savingEmail": "Salvataggio email + sincronizzazione con Polar...",
476
- "panel.license.syncFailedRetry": "Email salvata, ma il sync e fallito: {err}{http}. Se hai appena pagato, attendi 1-2 min e premi \"Sincronizza con Polar\".",
477
- "panel.license.planOk": "OK -- piano: {plan}.",
478
- "panel.license.netError": "Errore di rete: {err}",
479
- "panel.license.syncing": "Sincronizzazione...",
480
- "panel.license.querying": "Interrogazione del server...",
481
- "panel.license.syncError": "Errore di sync: {err}{http}",
482
- "panel.license.planUnchanged": "Piano invariato: {plan}",
483
- "panel.license.planUpdated": "Piano aggiornato: {before} -> {after}",
484
- "panel.license.syncWithPolar": "Sincronizza con Polar",
485
- "panel.license.errorWithCode": "errore: {code}",
486
- "panel.keyEditor.keyTooShort": "Key troppo corta (min 8 caratteri).",
487
- "panel.bridge.coordUnavailable": "Coordinamento non disponibile.",
488
- "panel.bridge.statusUnavailable": "non disponibile",
489
- "panel.mcp.loadingBridges": "Caricamento bridge...",
490
- "panel.tools.loading": "Caricamento tool...",
491
- "panel.agentsChat.backPairs": "< Coppie",
492
- "panel.agentsChat.noMessages": "Nessun messaggio in questa coppia.",
493
- "panel.agentsChat.noAgents": "nessun agente",
494
- "panel.agentsChat.pickAgent": "Scegli un agente + scrivi del testo prima di inviare.",
495
- "panel.agentsChat.sending": "Invio...",
496
- "panel.agentsChat.errorGeneric": "Errore: {err}",
497
- "panel.whatsNew.dismiss": "Chiudi",
498
- "panel.alert.noEditor": "Nessun editor nel PATH. Copia il percorso: {path}",
499
- "panel.alert.pathRelative": "Il percorso deve essere relativo al progetto (senza \"/\" iniziale ne \"..\").",
500
- "panel.tip.saveTo": "Salva in {path}",
501
- "panel.tip.saveToMemory": "(memoria)",
502
- "panel.button.saveAs": "Salva come...",
503
- "panel.aria.concurrentRuns": "Esecuzioni concorrenti",
504
- "panel.activity.allProjects": "Tutti i progetti",
505
- "panel.activity.loadingFeed": "Caricamento feed...",
506
- "panel.feedback.savedShort": "salvato",
507
- "panel.pair.qrFailed": "Impossibile generare il QR.",
508
- "panel.brain.modePlan": "Plan (abbonamento)",
509
- "panel.brain.modeConsole": "Console (API key)",
510
- "panel.brain.applying": "applicazione di {mode}...",
511
- "panel.brain.applied": "{mode} applicato. Il prossimo turno usa gia questa modalita.",
512
- "panel.brain.reopenHint": "Si applica alla riapertura del pannello.",
513
- "panel.brain.active": "{mode} attivo",
514
- "panel.bridge.roleHost": "host",
515
- "panel.bridge.roleClient": "client",
516
- "panel.bridge.instanceOne": "istanza",
517
- "panel.bridge.instanceMany": "istanze",
518
- "panel.bridge.you": "tu",
519
- "panel.tip.deleteTask": "Elimina attivita",
520
- "panel.tasks.cmdPlaceholder": "comando (es: pnpm install)...",
521
- "panel.readAloud.code": "Codice",
522
- "panel.readAloud.codeLang": "Codice in {lang}",
523
- "panel.readAloud.file": "File {file}",
524
- "panel.readAloud.content": "Contenuto: {content}",
525
- "panel.pizarron.tabOne": "scheda",
526
- "panel.pizarron.tabMany": "schede"
527
- }
184
+ "pizarron.graph.orbit.speed": "Velocita orbitale",
185
+ "startup.tab.graph": "Grafo visuale",
186
+ "startup.tab.graphSem": "Grafo semantico",
187
+ "startup.tab.pendings": "In sospeso",
188
+ "startup.tab.workflow": "Workflow",
189
+ "settings.startupTabs": "Schede all'avvio (grafo, in sospeso, workflow)",
190
+ "graph.term.nodes": "nodi",
191
+ "graph.term.edges": "archi",
192
+ "coding.read": "Lettura di {x}",
193
+ "coding.read_bare": "Lettura di un file",
194
+ "coding.edit": "Modifica di {x}",
195
+ "coding.edit_bare": "Modifica di un file",
196
+ "coding.write": "Scrittura di {x}",
197
+ "coding.write_bare": "Scrittura di un file",
198
+ "coding.notebook_bare": "Modifica del notebook",
199
+ "coding.bash": "Esecuzione: {x}",
200
+ "coding.bash_bare": "Esecuzione di un comando",
201
+ "coding.grep": "Ricerca \"{x}\"",
202
+ "coding.grep_bare": "Ricerca nel codice",
203
+ "coding.glob": "Elenco di {x}",
204
+ "coding.glob_bare": "Elenco dei file",
205
+ "coding.web_bare": "Lettura del web",
206
+ "coding.websearch": "Ricerca web: {x}",
207
+ "coding.websearch_bare": "Ricerca web",
208
+ "coding.task": "Sub-agente: {x}",
209
+ "coding.task_bare": "Avvio di un sub-agente",
210
+ "coding.todo": "Aggiornamento della sua lista attivita",
211
+ "coding.verb_bare": "Esecuzione di un verbo yujin",
212
+ "panel.button.stop": "Ferma",
213
+ "panel.status.stopping": "Arresto...",
214
+ "panel.status.noActiveTurn": "Non c'era nessun turno in corso.",
215
+ "panel.status.interruptFailed": "Impossibile inviare l'interruzione.",
216
+ "panel.status.turnInterrupted": "Turno interrotto.",
217
+ "panel.label.interrupted": "(interrotto)",
218
+ "panel.queue.label": "In coda",
219
+ "panel.queue.remove": "Rimuovi dalla coda",
220
+ "panel.project.switchHint": "Cambia progetto",
221
+ "panel.project.title": "Progetti",
222
+ "panel.project.add": "Aggiungi progetto...",
223
+ "panel.project.addPrompt": "Percorso assoluto del progetto da aggiungere:",
224
+ "panel.project.switching": "Cambio progetto...",
225
+ "startup.tab.files": "File",
226
+ "panel.project.remove": "Rimuovi dall'elenco",
227
+ "panel.project.removeConfirm": "Rimuovere questo progetto dall'elenco? (non elimina i file su disco)",
228
+ "panel.project.removed": "Progetto rimosso dall'elenco",
229
+ "panel.files.refresh": "Aggiorna",
230
+ "panel.files.loading": "Caricamento...",
231
+ "panel.files.error": "Impossibile leggere i file.",
232
+ "panel.files.empty": "(nessun file)",
233
+ "panel.files.truncated": "(elenco troncato)",
234
+ "panel.files.opened": "Aperto",
235
+ "panel.files.openFailed": "Impossibile aprire il file.",
236
+ "panel.files.searchName": "Filtra per nome",
237
+ "panel.files.searchType": "Tipo (es: ts, png)",
238
+ "panel.files.matches": "{n} risultati",
239
+ "panel.files.noMatches": "Nessun risultato",
240
+ "panel.files.sortBy": "Ordina per",
241
+ "panel.files.sortName": "Nome",
242
+ "panel.files.sortSize": "Dimensione",
243
+ "panel.files.sortType": "Tipo",
244
+ "startup.tab.tasks": "Attivita",
245
+ "settings.bridge.title": "Coordinamento tra istanze",
246
+ "settings.bridge.accept": "Accetta messaggi diretti da altre istanze (iniettati come chat)",
247
+ "settings.bridge.composePlaceholder": "Messaggio alle altre istanze...",
248
+ "settings.voice.title": "Voce",
249
+ "settings.voice.mode": "Modalita",
250
+ "settings.voice.modeMic": "modalita mic",
251
+ "settings.voice.stt": "STT",
252
+ "settings.voice.sttBrowser": "STT browser",
253
+ "settings.voice.ttsEngine": "Motore TTS",
254
+ "settings.voice.ttsBrowser": "TTS browser",
255
+ "settings.voice.ttsVoice": "Voce TTS (solo Google)",
256
+ "settings.vad.title": "VAD (rilevamento del silenzio)",
257
+ "settings.vad.resetDefaults": "Ripristina predefiniti",
258
+ "settings.vad.engine": "Motore",
259
+ "settings.vad.engineAmplitude": "Ampiezza (RMS)",
260
+ "settings.vad.engineBand": "Banda 80-400Hz",
261
+ "settings.vad.baselineWindow": "Finestra baseline",
262
+ "settings.vad.thresholdMult": "Mult. soglia (baseline x N)",
263
+ "settings.vad.thresholdMin": "Soglia minima",
264
+ "settings.vad.thresholdMax": "Soglia massima",
265
+ "settings.vad.silence": "Silenzio per chiudere",
266
+ "settings.vad.minVoiced": "Voce minima (anti-blip)",
267
+ "settings.vad.tick": "Tick del VAD",
268
+ "settings.vad.bandLow": "Banda voce: low (Hz)",
269
+ "settings.vad.bandHigh": "Banda voce: high (Hz)",
270
+ "settings.vad.showOverlay": "Mostra overlay live",
271
+ "settings.vad.logStats": "Registra stat per sessione",
272
+ "settings.brain.anthropicMode": "Anthropic: modalita",
273
+ "settings.brain.modePlan": "Plan (abbonamento Claude)",
274
+ "settings.brain.modeConsole": "Console (API key)",
275
+ "settings.brain.modeNote": "Si applica alla riapertura del pannello.",
276
+ "settings.brain.ecoEnabled": "Modalita eco abilitata",
277
+ "settings.brain.ecoHint": "spento = sempre frontier",
278
+ "settings.brain.modelEco": "Modello eco",
279
+ "settings.brain.modelFrontier": "Modello frontier",
280
+ "settings.brain.modelMultimodal": "Modello multimodal",
281
+ "settings.brain.multimodalClearTitle": "Rimuovi il brain multimodal dedicato (torna al routing della vision automatico)",
282
+ "settings.brain.auto": "Auto",
283
+ "settings.brain.multimodalHint": "Brain dedicato per i turni con immagine. Auto = routing della vision automatico (il frontier se vede, altrimenti un avviso).",
284
+ "settings.brain.geminiCache": "Cache esplicita di Gemini (CachedContent)",
285
+ "settings.brain.geminiCacheHint": "Opt-in. Utile nelle sessioni lunghe con Gemini Pro; nelle sessioni brevi la cache implicita gratuita di 2.5 basta.",
286
+ "settings.federation.title": "Federazione di brain",
287
+ "settings.federation.intro": "Usa il brain di un altro Forge (la sua key non lascia mai la sua macchina) o presta il tuo. Il tuo codice gira in locale; viaggia solo l'inferenza.",
288
+ "settings.federation.connectedTo": "Connesso a",
289
+ "settings.federation.disconnect": "Disconnetti",
290
+ "settings.federation.connectMe": "Connettimi",
291
+ "settings.federation.tokenPlaceholder": "Incolla il codice di federazione",
292
+ "settings.federation.connect": "Connetti",
293
+ "settings.federation.lendBrain": "Presta il mio brain",
294
+ "settings.federation.generateCode": "Genera codice",
295
+ "settings.federation.host": "Ospita (rispondi ai figli)",
296
+ "settings.federation.fedBrain": "Brain di federazione",
297
+ "settings.federation.fedBrainNote": "Quello che risponde ai figli. API diretta (DeepSeek per default). Claude Plan non serve per ospitare; serve una key con saldo.",
298
+ "settings.federation.codeOnce": "Codice (uso singolo)",
299
+ "settings.federation.copy": "Copia",
300
+ "settings.keys.title": "API keys (BYOK)",
301
+ "settings.keys.configure": "Configura",
302
+ "settings.keys.remove": "Rimuovi",
303
+ "settings.keys.brainAnthropic": "Brain (Anthropic)",
304
+ "settings.keys.brainOpenai": "Brain (OpenAI)",
305
+ "settings.keys.brainGoogle": "Brain (Google IA)",
306
+ "settings.keys.brainDeepseek": "Brain (DeepSeek)",
307
+ "settings.keys.brainXai": "Brain (xAI / Grok)",
308
+ "settings.keys.brainMistral": "Brain (Mistral)",
309
+ "settings.keys.brainCohere": "Brain (Cohere)",
310
+ "settings.keys.sttGoogle": "STT Google",
311
+ "settings.keys.ttsGoogle": "TTS Google",
312
+ "settings.keys.ttsElevenlabs": "TTS ElevenLabs",
313
+ "settings.keys.sttWhisper": "STT Whisper",
314
+ "settings.lang.title": "Lingua",
315
+ "settings.lang.panelVoice": "Pannello + voce",
316
+ "settings.lang.changeButton": "Cambia lingua",
317
+ "settings.vault.title": "Vault (criptato)",
318
+ "settings.vault.slots": "Slot",
319
+ "settings.vault.open": "Apri vault",
320
+ "settings.license.email": "Email",
321
+ "settings.license.validated": "Validato",
322
+ "settings.license.connectHint": "Connetti il tuo account Polar. Inserisci l'email con cui hai pagato e sincronizziamo il tuo piano automaticamente.",
323
+ "settings.license.emailPlaceholder": "email@esempio.com",
324
+ "settings.license.connect": "Connetti",
325
+ "settings.license.sync": "Sincronizza con Polar",
326
+ "settings.license.buy": "Acquista / attiva piano",
327
+ "settings.budget.title": "Budget di questo mese",
328
+ "settings.budget.renews": "Si rinnova",
329
+ "settings.budget.tokensEco": "Token eco",
330
+ "settings.budget.tokensFrontier": "Token frontier",
331
+ "settings.budget.buyExtension": "Acquista estensione di token",
332
+ "settings.limits.title": "Limiti (avanzato)",
333
+ "settings.limits.editHint": "Modifica qualsiasi valore + tab/blur salva.",
334
+ "settings.limits.reset": "Ripristina predefiniti",
335
+ "settings.bookmarks.title": "Segnalibri del Reader",
336
+ "settings.graph.title": "Grafo della conoscenza del progetto",
337
+ "settings.pair.title": "Collega il telefono",
338
+ "settings.pair.hint": "Apri Forge Mobile, tocca \"Collega\" e scansiona questo QR. Fatto.",
339
+ "settings.pair.generateQr": "Genera QR",
340
+ "settings.pair.cantRead": "La fotocamera non legge il QR? Copia questo codice e incollalo in Forge Mobile:",
341
+ "settings.audit.viewFull": "Vedi tutto",
342
+ "settings.audit.close": "Chiudi",
343
+ "settings.audit.allKinds": "Tutti i kinds",
344
+ "settings.audit.allModes": "Tutti i modes",
345
+ "settings.audit.copyJson": "Copia JSON",
346
+ "settings.audit.closeDetail": "Chiudi dettaglio",
347
+ "settings.about.title": "Informazioni",
348
+ "settings.danger.title": "Zona di pericolo",
349
+ "settings.danger.warning": "Quando ON, Yujin esegue OGNI azione senza chiedere conferma (incluso shell.exec, rm, git push --force, ecc). Velocita prima della sicurezza. Tutto viene registrato nell'audit log.",
350
+ "settings.keyEditor.placeholder": "Incolla qui la tua API key",
351
+ "settings.license.title": "Licenza",
352
+ "settings.plan": "Piano",
353
+ "settings.audit.title": "Registro di audit",
354
+ "settings.legal.title": "Note legali",
355
+ "panel.status.projectSwitchFail": "Impossibile cambiare progetto.",
356
+ "panel.status.projectRemoveFail": "Impossibile rimuovere il progetto.",
357
+ "panel.status.projectAddFail": "Impossibile aggiungere il progetto.",
358
+ "panel.status.cancelFail": "Impossibile annullare: {reason}",
359
+ "panel.status.cancelNetError": "Errore di rete durante l'annullamento della shell.",
360
+ "panel.status.notEditable": "Questo tipo di contenuto non e modificabile.",
361
+ "panel.status.savedAsPicker": "Salvato come: {name} (nel percorso scelto nella finestra di dialogo).",
362
+ "panel.status.saveAsFail": "Errore in Salva come: {error} -- uso del fallback.",
363
+ "panel.status.saveFail": "Errore durante il salvataggio: {error}",
364
+ "panel.status.savedAs": "Salvato come: {path} ({bytes} byte)",
365
+ "panel.status.netError": "Errore di rete: {error}",
366
+ "panel.status.savedTabOnly": "Modifiche salvate nella scheda (non su disco -- senza file_path).",
367
+ "panel.status.saved": "Salvato: {path} ({bytes} byte)",
368
+ "panel.status.copied": "Copiato negli appunti.",
369
+ "panel.status.copyFail": "Impossibile copiare.",
370
+ "panel.status.modeAvailable": "Modalita disponibili: didactico, tecnico. Uso: /modo tecnico",
371
+ "panel.status.modeChangeFail": "Impossibile cambiare modalita: {error}",
372
+ "panel.status.modeChanged": "Modalita cambiata in {target}. Il prossimo turno usa gia questa modalita.",
373
+ "panel.status.genericError": "Errore: {error}",
374
+ "panel.status.brainTierAuto": "Brain tier di nuovo su auto (il router decide in base a verbo / fase).",
375
+ "panel.status.brainTierForced": "Brain tier forzato a \"{target}\" per questa sessione. /auto torna al router.",
376
+ "panel.confirm.tabUnsaved": "La scheda \"{title}\" ha modifiche non salvate. Chiudere comunque?",
377
+ "panel.confirm.tabsUnsaved": "Ci sono schede con modifiche non salvate. Chiudere tutto comunque?",
378
+ "panel.confirm.discardChanges": "Annullare le modifiche non salvate?",
379
+ "panel.confirm.removeSlot": "Rimuovere lo slot \"{slot}\"? L'operazione non puo essere annullata.",
380
+ "panel.confirm.removeKey": "Rimuovere la key di {slot}?",
381
+ "panel.prompt.saveAs": "Salva come (percorso relativo al progetto):",
382
+ "panel.voice.sttFallback": "STT del browser non disponibile; uso del fallback lato server.",
383
+ "panel.voice.noMicSupport": "Il tuo browser non supporta l'accesso al microfono.",
384
+ "panel.voice.recordingCountdown": "Registrazione... stop automatico tra {n}s",
385
+ "panel.voice.autoStopped": "Registrazione interrotta automaticamente a 55s (limite di 1 min di Google STT). Prova qualcosa di piu breve.",
386
+ "panel.voice.noAudio": "Nessun audio acquisito. Riprova.",
387
+ "panel.voice.audioTooLong": "Audio troppo lungo (>1 min). Limite sincrono di Google STT. Prova qualcosa di piu breve.",
388
+ "panel.voice.ttsUnavailable": "TTS del browser non disponibile; torna a Google nelle impostazioni.",
389
+ "panel.voice.micClosedHalfDuplex": "Mic chiuso mentre Yujin parla (half-duplex).",
390
+ "panel.voice.micBlocked": "Microfono bloccato. Consenti il microfono per questa app nelle impostazioni del browser e riprova.",
391
+ "panel.voice.noMicDevice": "Nessun microfono rilevato su questo dispositivo.",
392
+ "panel.voice.micOpenFail": "Impossibile aprire il microfono: {error}",
393
+ "panel.voice.micOpenListening": "Mic aperto, in ascolto...",
394
+ "panel.voice.listening": "Ti ascolto...",
395
+ "panel.voice.listeningInterim": "Ti ascolto... {text}",
396
+ "panel.voice.micBlockedBrowser": "Microfono bloccato dal browser. Fai clic sull'icona del lucchetto nella barra degli URL e consenti il microfono, poi ricarica la pagina. Oppure cambia STT in \"google\" / \"whisper\" nelle impostazioni se hai la API key.",
397
+ "panel.voice.noMicPhysical": "Nessun microfono fisico rilevato. Collegane uno o cambia STT in \"google\" / \"whisper\" nelle impostazioni.",
398
+ "panel.voice.networkRequired": "Web Speech richiede una connessione a internet (Chrome usa Google dietro le quinte). Prova senza connessione intermittente o cambia STT in \"whisper\" se hai la API key.",
399
+ "panel.voice.langNotSupported": "Il tuo browser non supporta questa lingua per lo STT. Cambia la lingua del pannello con una supportata (en, es, pt) o cambia STT in \"google\" / \"whisper\".",
400
+ "panel.voice.micError": "Errore mic: {error}",
401
+ "panel.voice.noAudioToRecognizer": "Nessun audio e arrivato al riconoscitore: la dettatura del browser non sta acquisendo in questa app.",
402
+ "panel.voice.micOpenNoVoice": "Mic aperto ma nessuna voce rilevata. Avvicinati al microfono e parla piu forte; se continua, la dettatura gratuita non funziona in questa PWA.",
403
+ "panel.voice.voiceNoText": "Voce rilevata ma il browser non ha restituito testo (STT gratuito non disponibile in questa PWA).",
404
+ "panel.voice.startingDictation": "Avvio della dettatura...",
405
+ "panel.voice.couldNotStartMic": "Impossibile avviare il mic: {error}",
406
+ "panel.status.imageTooLarge": "Immagine troppo grande (>6MB): {name}",
407
+ "panel.status.imageReady": "Immagine pronta per l'invio: {name}",
408
+ "panel.status.imageReadFail": "Impossibile leggere l'immagine: {error}",
409
+ "panel.tip.attachFile": "Allega file",
410
+ "panel.tip.refreshDiscovery": "Aggiorna discovery",
411
+ "panel.tip.refreshNow": "Aggiorna ora",
412
+ "panel.tip.filterByProject": "Filtra per progetto",
413
+ "panel.tip.concurrentRuns": "Esecuzioni concorrenti: limiti globale / per progetto",
414
+ "panel.tip.mcpBridges": "MCP Bridges (F101)",
415
+ "panel.tip.activity": "Attivita agenti + ispettore bridge + chat per agente",
416
+ "panel.tip.settings": "Impostazioni (modalita voce, STT, TTS, chiavi, lingua)",
417
+ "panel.tip.zoomOut": "Riduci zoom (Ctrl -)",
418
+ "panel.tip.zoomReset": "Reimposta zoom (Ctrl 0)",
419
+ "panel.tip.zoomIn": "Aumenta zoom (Ctrl +)",
420
+ "panel.tip.maximize": "Massimizza / ripristina (schermo intero)",
421
+ "panel.tip.closeBoard": "Chiudi l'intera lavagna",
422
+ "panel.tip.openInEditor": "Apri nel mio editor",
423
+ "panel.tip.open": "Apri",
424
+ "panel.tip.saveAs": "Salva come -- scegli un nuovo percorso (relativo al progetto)",
425
+ "panel.tip.codeModeDetail": "Dettagliato: file, diff e comandi in tempo reale",
426
+ "panel.tip.codeModeZen": "Sumi-e: arte con testo occasionale",
427
+ "panel.tip.cancelShell": "Annulla comando shell",
428
+ "panel.tip.closeTab": "Chiudi scheda",
429
+ "panel.tip.reopenNativeTabs": "Riapri le schede native chiuse",
430
+ "panel.tip.notTestedYet": "non ancora testato",
431
+ "panel.aria.activity": "Attivita",
432
+ "panel.aria.settings": "Impostazioni",
433
+ "panel.aria.zoomOut": "Riduci zoom",
434
+ "panel.aria.zoomIn": "Aumenta zoom",
435
+ "panel.aria.maximize": "Massimizza",
436
+ "panel.aria.closeBoard": "chiudi tutto",
437
+ "panel.aria.thinking": "sto pensando",
438
+ "panel.hint.boardEmpty": "I contenuti strutturati appaiono qui: codice, tabelle, documenti. Chiedi a Yujin di scrivere o modificare qualcosa.",
439
+ "panel.hint.planMode": "Sei in modalita Plan (abbonamento). La lavagna viene disegnata quando il brain gira in modalita API: cambiala in <strong>Impostazioni &gt; Brain &gt; Anthropic: modalita &gt; Console</strong> e riapri il pannello.",
440
+ "panel.hint.bookmarksEmpty": "Nessun bookmark. Chiedi a Yujin \"segna questo punto come ...\" mentre leggi un documento.",
441
+ "panel.voice.replyFailed": "Risposta vocale non riuscita: {err}",
442
+ "panel.voice.replyError": "Errore nella risposta vocale: {err}",
443
+ "panel.status.languageSwitchFailed": "Cambio lingua non riuscito: {err}",
444
+ "panel.status.languageListFailed": "Impossibile caricare la lista delle lingue",
445
+ "panel.legal.loading": "Caricamento...",
446
+ "panel.legal.loadError": "Errore {status} nel caricamento del documento.",
447
+ "panel.legal.networkError": "Errore di rete: {err}",
448
+ "panel.legal.defaultTitle": "Note legali",
449
+ "panel.feedback.copied": "Copiato",
450
+ "panel.feedback.copyFailed": "Copia non riuscita",
451
+ "panel.feedback.clipboardUnavailable": "Appunti non disponibili",
452
+ "panel.feedback.saving": "Salvataggio...",
453
+ "panel.feedback.saved": "Salvato.",
454
+ "panel.feedback.saveError": "errore di salvataggio",
455
+ "panel.feedback.netError": "errore di rete",
456
+ "panel.feedback.netErrorSaving": "errore di rete nel salvataggio",
457
+ "panel.feedback.errorPrefix": "Errore: {detail}",
458
+ "panel.pair.generating": "Generazione...",
459
+ "panel.pair.generateQr": "Genera QR",
460
+ "panel.pair.copy": "Copia",
461
+ "panel.pair.expiry": "Scade tra ~{mins} min. Rigeneralo se scade.",
462
+ "panel.pair.qrNetError": "Errore di rete nella generazione del QR.",
463
+ "panel.audit.copyJson": "Copia JSON",
464
+ "panel.limits.resetApplied": "Ripristino ai valori predefiniti applicato",
465
+ "panel.nac3.effects": "Effetti: {list}",
466
+ "panel.nac3.effectsUnknown": "sconosciuti",
467
+ "panel.nac3.cancel": "Annulla",
468
+ "panel.nac3.reject": "Rifiuta",
469
+ "panel.nac3.approve": "Approva",
470
+ "panel.nac3.approveDestructive": "Approva (distruttivo)",
471
+ "panel.nac3.executing": "Esecuzione...",
472
+ "panel.tts.providerBrowser": "TTS browser",
473
+ "panel.tts.providerGoogle": "TTS Google",
474
+ "panel.tts.providerTitle": "Clicca per alternare tra browser (SpeechSynthesis nativo, voci del SO) e Google Cloud TTS (lato server).",
475
+ "panel.stt.providerBrowser": "STT browser",
476
+ "panel.stt.providerGoogle": "STT Google",
477
+ "panel.stt.providerWhisper": "STT Whisper",
478
+ "panel.stt.providerTitle": "Clicca per alternare tra browser (veloce + es-AR nativo + gratis), Google Cloud STT (lato server, BYOK) o Whisper (lato server, BYOK).",
479
+ "panel.tts.voiceTitle": "Voce attuale: {id} / {persona} ({gender}) -- {style}. Clicca per scorrere. Studio = articola la s chiara; Neural2 = spagnolo naturale (aspira le s finali).",
480
+ "panel.license.lendNeedsLicense": "attiva la licenza per prestare il tuo brain",
481
+ "panel.license.emailInvalid": "Inserisci un email valida (con @).",
482
+ "panel.license.connecting": "Connessione...",
483
+ "panel.license.savingEmail": "Salvataggio email + sincronizzazione con Polar...",
484
+ "panel.license.syncFailedRetry": "Email salvata, ma il sync e fallito: {err}{http}. Se hai appena pagato, attendi 1-2 min e premi \"Sincronizza con Polar\".",
485
+ "panel.license.planOk": "OK -- piano: {plan}.",
486
+ "panel.license.netError": "Errore di rete: {err}",
487
+ "panel.license.syncing": "Sincronizzazione...",
488
+ "panel.license.querying": "Interrogazione del server...",
489
+ "panel.license.syncError": "Errore di sync: {err}{http}",
490
+ "panel.license.planUnchanged": "Piano invariato: {plan}",
491
+ "panel.license.planUpdated": "Piano aggiornato: {before} -> {after}",
492
+ "panel.license.syncWithPolar": "Sincronizza con Polar",
493
+ "panel.license.errorWithCode": "errore: {code}",
494
+ "panel.keyEditor.keyTooShort": "Key troppo corta (min 8 caratteri).",
495
+ "panel.bridge.coordUnavailable": "Coordinamento non disponibile.",
496
+ "panel.bridge.statusUnavailable": "non disponibile",
497
+ "panel.mcp.loadingBridges": "Caricamento bridge...",
498
+ "panel.tools.loading": "Caricamento tool...",
499
+ "panel.agentsChat.backPairs": "< Coppie",
500
+ "panel.agentsChat.noMessages": "Nessun messaggio in questa coppia.",
501
+ "panel.agentsChat.noAgents": "nessun agente",
502
+ "panel.agentsChat.pickAgent": "Scegli un agente + scrivi del testo prima di inviare.",
503
+ "panel.agentsChat.sending": "Invio...",
504
+ "panel.agentsChat.errorGeneric": "Errore: {err}",
505
+ "panel.whatsNew.dismiss": "Chiudi",
506
+ "panel.alert.noEditor": "Nessun editor nel PATH. Copia il percorso: {path}",
507
+ "panel.alert.pathRelative": "Il percorso deve essere relativo al progetto (senza \"/\" iniziale ne \"..\").",
508
+ "panel.tip.saveTo": "Salva in {path}",
509
+ "panel.tip.saveToMemory": "(memoria)",
510
+ "panel.button.saveAs": "Salva come...",
511
+ "panel.aria.concurrentRuns": "Esecuzioni concorrenti",
512
+ "panel.activity.allProjects": "Tutti i progetti",
513
+ "panel.activity.loadingFeed": "Caricamento feed...",
514
+ "panel.feedback.savedShort": "salvato",
515
+ "panel.pair.qrFailed": "Impossibile generare il QR.",
516
+ "panel.brain.modePlan": "Plan (abbonamento)",
517
+ "panel.brain.modeConsole": "Console (API key)",
518
+ "panel.brain.applying": "applicazione di {mode}...",
519
+ "panel.brain.applied": "{mode} applicato. Il prossimo turno usa gia questa modalita.",
520
+ "panel.brain.reopenHint": "Si applica alla riapertura del pannello.",
521
+ "panel.brain.active": "{mode} attivo",
522
+ "panel.bridge.roleHost": "host",
523
+ "panel.bridge.roleClient": "client",
524
+ "panel.bridge.instanceOne": "istanza",
525
+ "panel.bridge.instanceMany": "istanze",
526
+ "panel.bridge.you": "tu",
527
+ "panel.tip.deleteTask": "Elimina attivita",
528
+ "panel.tasks.cmdPlaceholder": "comando (es: pnpm install)...",
529
+ "panel.readAloud.code": "Codice",
530
+ "panel.readAloud.codeLang": "Codice in {lang}",
531
+ "panel.readAloud.file": "File {file}",
532
+ "panel.readAloud.content": "Contenuto: {content}",
533
+ "panel.pizarron.tabOne": "scheda",
534
+ "panel.pizarron.tabMany": "schede"
535
+ }