diff --git a/bun.lock b/bun.lock index 716e3a525ada..510c464e32bf 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/core": "workspace:*", @@ -84,7 +84,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -119,7 +119,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -146,7 +146,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/openai": "3.0.48", @@ -168,7 +168,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -192,7 +192,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.15.2", + "version": "1.15.3", "bin": { "opencode": "./bin/opencode", }, @@ -253,7 +253,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -307,7 +307,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -337,7 +337,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -353,7 +353,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@effect/platform-node": "catalog:", "effect": "catalog:", @@ -366,7 +366,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@smithy/eventstream-codec": "4.2.14", "@smithy/util-utf8": "4.2.2", @@ -384,7 +384,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.15.2", + "version": "1.15.3", "bin": { "opencode": "./bin/opencode", }, @@ -520,7 +520,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@opencode-ai/sdk": "workspace:*", "effect": "catalog:", @@ -558,7 +558,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "cross-spawn": "catalog:", }, @@ -573,7 +573,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -608,7 +608,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/core": "workspace:*", @@ -657,7 +657,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.15.2", + "version": "1.15.3", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 97770a7836ef..a4d6bb59db8c 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.15.2", + "version": "1.15.3", "description": "", "type": "module", "exports": { diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 51dc09cd7d9f..d4be40b6edc2 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -24,6 +24,7 @@ export type Locale = | "th" | "bs" | "tr" + | "it" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten @@ -51,6 +52,7 @@ const LOCALES: readonly Locale[] = [ "br", "th", "tr", + "it", ] const INTL: Record = { @@ -71,6 +73,7 @@ const INTL: Record = { th: "th", bs: "bs", tr: "tr", + it: "it", } const LABEL_KEY: Record = { @@ -91,6 +94,7 @@ const LABEL_KEY: Record = { th: "language.th", bs: "language.bs", tr: "language.tr", + it: "language.it", } const base = i18n.flatten({ ...en, ...uiEn }) @@ -116,6 +120,7 @@ const loaders: Record, () => Promise> = { th: () => merge(import("@/i18n/th"), import("@opencode-ai/ui/i18n/th")), bs: () => merge(import("@/i18n/bs"), import("@opencode-ai/ui/i18n/bs")), tr: () => merge(import("@/i18n/tr"), import("@opencode-ai/ui/i18n/tr")), + it: () => merge(import("@/i18n/it"), import("@opencode-ai/ui/i18n/it")), } function loadDict(locale: Locale) { @@ -154,6 +159,7 @@ const localeMatchers: Array<{ locale: Locale; match: (language: string) => boole { locale: "th", match: (language) => language.startsWith("th") }, { locale: "bs", match: (language) => language.startsWith("bs") }, { locale: "tr", match: (language) => language.startsWith("tr") }, + { locale: "it", match: (language) => language.startsWith("it") }, ] function detectLocale(): Locale { diff --git a/packages/app/src/context/pin-store.ts b/packages/app/src/context/pin-store.ts new file mode 100644 index 000000000000..d4e0d0b683ad --- /dev/null +++ b/packages/app/src/context/pin-store.ts @@ -0,0 +1,46 @@ +import { createSignal } from "solid-js" + +const PIN_STORAGE_KEY = "opencode_pinned_sessions" + +function loadPinned(): string[] { + try { + return JSON.parse(localStorage.getItem(PIN_STORAGE_KEY) ?? "[]") + } catch { + return [] + } +} + +function savePinned(pinned: string[]) { + localStorage.setItem(PIN_STORAGE_KEY, JSON.stringify(pinned)) +} + +const [pinnedIds, setPinnedIds] = createSignal(loadPinned()) + +export function usePinned() { + return { pinnedIds } +} + +export function isPinned(sessionId: string): boolean { + return pinnedIds().includes(sessionId) +} + +export function togglePin(sessionId: string) { + setPinnedIds((prev) => { + const next = prev.includes(sessionId) + ? prev.filter((id) => id !== sessionId) + : [...prev, sessionId] + savePinned(next) + return [...next] + }) +} + +export function sortByPinned(items: T[]): T[] { + const pinned = pinnedIds() + return [...items].sort((a, b) => { + const aPinned = pinned.includes(a.id) + const bPinned = pinned.includes(b.id) + if (aPinned && !bPinned) return -1 + if (!aPinned && bPinned) return 1 + return 0 + }) +} diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index 94f0158f3c68..284bec06767c 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -367,6 +367,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "لغة", "toast.language.description": "تم التبديل إلى {{language}}", "toast.theme.title": "تم تبديل السمة", @@ -527,6 +528,8 @@ export const dict = { "common.learnMore": "اعرف المزيد", "common.rename": "إعادة تسمية", "common.reset": "إعادة تعيين", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "أرشفة", "common.delete": "حذف", "common.close": "إغلاق", diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index 070fa5319cdb..4e7589f084b4 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -368,6 +368,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Idioma", "toast.language.description": "Alterado para {{language}}", "toast.theme.title": "Tema alterado", @@ -534,6 +535,8 @@ export const dict = { "common.learnMore": "Saiba mais", "common.rename": "Renomear", "common.reset": "Redefinir", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Arquivar", "common.delete": "Excluir", "common.close": "Fechar", diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts index 8f3e985aa84a..ff24ad904771 100644 --- a/packages/app/src/i18n/bs.ts +++ b/packages/app/src/i18n/bs.ts @@ -402,6 +402,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Jezik", "toast.language.description": "Prebačeno na {{language}}", @@ -594,6 +595,8 @@ export const dict = { "common.learnMore": "Saznaj više", "common.rename": "Preimenuj", "common.reset": "Resetuj", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Arhiviraj", "common.delete": "Izbriši", "common.close": "Zatvori", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 9ae4b26bbf38..98992dad5b6b 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -400,6 +400,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Sprog", "toast.language.description": "Skiftede til {{language}}", @@ -590,6 +591,8 @@ export const dict = { "common.learnMore": "Lær mere", "common.rename": "Omdøb", "common.reset": "Nulstil", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Arkivér", "common.delete": "Slet", "common.close": "Luk", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 633ff8db248d..6458e1d17623 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -375,6 +375,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", "toast.theme.title": "Thema gewechselt", @@ -542,6 +543,8 @@ export const dict = { "common.learnMore": "Mehr erfahren", "common.rename": "Umbenennen", "common.reset": "Zurücksetzen", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Archivieren", "common.delete": "Löschen", "common.close": "Schließen", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 6bb9d3fc447d..06b45e23a2c8 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -418,6 +418,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", @@ -646,6 +647,11 @@ export const dict = { "common.learnMore": "Learn more", "common.rename": "Rename", "common.reset": "Reset", + "common.pin": "Pin", + "common.unpin": "Unpin", + "common.selectAll": "Select All", + "common.copy": "Copy", + "common.copyUrl": "Copy URL", "common.archive": "Archive", "common.delete": "Delete", "common.close": "Close", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 30777c4b36de..2b5655cef06d 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -402,6 +402,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", @@ -597,6 +598,8 @@ export const dict = { "common.learnMore": "Saber más", "common.rename": "Renombrar", "common.reset": "Restablecer", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Archivar", "common.delete": "Eliminar", "common.close": "Cerrar", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index bde4a8fe2edf..0122b1ca81c3 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -370,6 +370,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Langue", "toast.language.description": "Passé à {{language}}", "toast.theme.title": "Thème changé", @@ -539,6 +540,8 @@ export const dict = { "common.learnMore": "En savoir plus", "common.rename": "Renommer", "common.reset": "Réinitialiser", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Archiver", "common.delete": "Supprimer", "common.close": "Fermer", diff --git a/packages/app/src/i18n/it.ts b/packages/app/src/i18n/it.ts new file mode 100644 index 000000000000..39a12956e913 --- /dev/null +++ b/packages/app/src/i18n/it.ts @@ -0,0 +1,1304 @@ +// Generated from /tmp/it_app.ts +import type { dict as en } from "./en" + +export const dict: Record = { + "common.cancel": "Annulla", + "common.submit": "Invia", + "common.ok": "OK", + "common.save": "Salva", + "common.continue": "Continua", + "common.skip": "Salta", + "common.goBack": "Indietro", + "common.next": "Avanti", + "common.done": "Fatto", + "common.retry": "Riprova", + "common.yes": "Sì", + "common.no": "No", + "common.learnMore": "Scopri di più", + "common.rename": "Rinomina", + "common.reset": "Ripristina", + "common.pin": "Fissa", + "common.unpin": "Rimuovi", + "common.archive": "Archivia", + "common.delete": "Elimina", + "common.close": "Chiudi", + "common.edit": "Modifica", + "common.loadMore": "Carica altro", + "common.key.esc": "ESC", + "common.key.ctrl": "Ctrl", + "common.key.alt": "Alt", + "common.key.shift": "Maiusc", + "common.key.meta": "⌘", + "common.key.space": "Spazio", + "common.key.backspace": "Backspace", + "common.key.enter": "Invio", + "common.key.tab": "Tab", + "common.key.delete": "Canc", + "common.key.home": "Home", + "common.key.end": "Fine", + "common.key.up": "↑", + "common.key.down": "↓", + "common.key.left": "←", + "common.key.right": "→", + "common.key.pageUp": "Pag↑", + "common.key.pageDown": "Pag↓", + "common.key.mod": "Ctrl", + "common.key.modShift": "Ctrl+Maiusc", + "common.access": "Accesso", + "common.loading": "Caricamento…", + "common.error": "Errore", + "common.unknown": "Sconosciuto", + "common.optional": "Opzionale", + "common.required": "Obbligatorio", + "common.invalid": "Non valido", + "common.success": "Operazione completata", + "common.warning": "Attenzione", + "common.info": "Informazioni", + "common.search": "Cerca…", + "common.filter": "Filtra…", + "common.sort": "Ordina", + "common.clear": "Pulisci", + "common.selectAll": "Seleziona tutto", + "common.deselectAll": "Deseleziona tutto", + "common.copy": "Copia", + "common.copied": "Copiato!", + "common.copyUrl": "Copia URL", + "common.paste": "Incolla", + "common.cut": "Taglia", + "common.undo": "Annulla", + "common.redo": "Ripristina", + "common.open": "Apri", + "common.hide": "Nascondi", + "common.show": "Mostra", + "common.enable": "Abilita", + "common.disable": "Disabilita", + "common.on": "Attivo", + "common.off": "Disattivo", + "common.auto": "Auto", + "common.manual": "Manuale", + "common.all": "Tutti", + "common.none": "Nessuno", + "common.some": "Alcuni", + "common.more": "Altro", + "common.less": "Meno", + "common.help": "Aiuto", + "common.settings": "Impostazioni", + "common.preferences": "Preferenze", + "common.configure": "Configura", + "common.donate": "Dona", + "common.upgrade": "Aggiorna", + "common.download": "Scarica", + "common.upload": "Carica", + "common.install": "Installa", + "common.uninstall": "Disinstalla", + "common.attach": "Allega", + "common.detach": "Scollega", + "common.add": "Aggiungi", + "common.create": "Crea", + "common.remove": "Rimuovi", + "common.update": "Aggiorna", + "common.replace": "Sostituisci", + "common.merge": "Unisci", + "common.split": "Dividi", + "common.move": "Sposta", + "common.duplicate": "Duplica", + "common.link": "Collega", + "common.unlink": "Scollega", + "common.lock": "Blocca", + "common.unlock": "Sblocca", + "common.block": "Blocca", + "common.unblock": "Sblocca", + "common.mute": "Silenzia", + "common.unmute": "Riattiva audio", + "common.favorite": "Preferito", + "common.unfavorite": "Rimuovi preferito", + "common.export": "Esporta", + "common.import": "Importa", + "common.share": "Condividi", + "common.print": "Stampa", + "common.preview": "Anteprima", + "common.refresh": "Aggiorna", + "common.sync": "Sincronizza", + "common.syncing": "Sincronizzazione…", + "common.synced": "Sincronizzato", + "common.stop": "Ferma", + "common.start": "Avvia", + "common.pause": "Pausa", + "common.play": "Riproduci", + "common.record": "Registra", + "common.recording": "Registrazione…", + "common.closeTab": "Chiudi scheda", + "common.dismiss": "Ignora", + "common.moreCountSuffix": " (+{{count}} altre)", + "common.requestFailed": "Richiesta fallita", + "common.moreOptions": "Altre opzioni", + "language.en": "Inglese", + "language.zh": "Cinese (semplificato)", + "language.zht": "Cinese (tradizionale)", + "language.ko": "Coreano", + "language.de": "Tedesco", + "language.es": "Spagnolo", + "language.fr": "Francese", + "language.da": "Danese", + "language.ja": "Giapponese", + "language.pl": "Polacco", + "language.ru": "Russo", + "language.ar": "Arabo", + "language.no": "Norvegese", + "language.br": "Portoghese (Brasile)", + "language.th": "Thailandese", + "language.bs": "Bosniaco", + "language.tr": "Turco", + "language.it": "Italiano", + "command.hint": "Premi {{cmd}} per cercare…", + "command.session.new": "Nuova sessione", + "command.session.search": "Cerca sessioni…", + "command.session.clear": "Cancella cronologia", + "command.session.archive": "Archivia sessione", + "command.session.rename": "Rinomina sessione", + "command.session.export": "Esporta sessione", + "command.session.share": "Condividi sessione", + "command.session.copy": "Copia sessione", + "command.session.delete": "Elimina sessione", + "command.session.pin": "Fissa sessione", + "command.session.unpin": "Rimuovi fissaggio sessione", + "command.project.new": "Nuovo progetto", + "command.project.open": "Apri progetto", + "command.project.close": "Chiudi progetto", + "command.project.settings": "Impostazioni progetto", + "command.project.delete": "Elimina progetto", + "command.view.toggleSidebar": "Mostra/nascondi barra laterale", + "command.view.toggleExplorer": "Mostra/nascondi esplora file", + "command.view.togglePanel": "Mostra/nascondi pannello", + "command.view.zoomIn": "Ingrandisci", + "command.view.zoomOut": "Riduci", + "command.view.zoomReset": "Ripristina zoom", + "command.view.fullscreen": "Schermo intero", + "command.view.splitEditor": "Dividi editor", + "command.editor.format": "Formatta documento", + "command.editor.indent": "Aumenta indentazione", + "command.editor.outdent": "Riduci indentazione", + "command.editor.comment": "Commenta/seleziona righe", + "command.editor.toggleWordWrap": "Attiva/disattiva a capo", + "command.editor.toggleMinimap": "Attiva/disattiva minimappa", + "command.terminal.new": "Nuovo terminale", + "command.terminal.clear": "Pulisci terminale", + "command.terminal.toggle": "Mostra/nascondi terminale", + "command.debug.start": "Avvia debug", + "command.debug.stop": "Ferma debug", + "command.debug.restart": "Riavvia debug", + "command.debug.stepOver": "Passa oltre", + "command.debug.stepInto": "Entra in", + "command.debug.stepOut": "Esci da", + "command.debug.continue": "Continua", + "command.debug.toggleBreakpoint": "Attiva/disattiva punto di interruzione", + "command.settings.open": "Apri impostazioni", + "command.settings.openKeyboardShortcuts": "Scorciatoie da tastiera", + "command.settings.openTheme": "Tema", + "command.settings.openExtensions": "Estensioni", + "command.help.about": "Informazioni su", + "command.help.checkForUpdates": "Controlla aggiornamenti", + "command.help.documentation": "Documentazione", + "command.help.reportIssue": "Segnala problema", + "command.help.releaseNotes": "Note di rilascio", + "command.file.new": "Nuovo file", + "command.file.open": "Apri file", + "command.file.save": "Salva", + "command.file.saveAs": "Salva con nome", + "command.file.saveAll": "Salva tutto", + "command.file.close": "Chiudi file", + "command.file.closeAll": "Chiudi tutto", + "session.new": "Nuova sessione", + "session.search": "Cerca sessioni…", + "session.empty": "Nessuna sessione", + "session.rename": "Rinomina sessione", + "session.renameDescription": "Inserisci un nuovo nome per la sessione", + "session.noResults": "Nessuna sessione trovata", + "session.title.placeholder": "Nuova sessione", + "session.today": "Oggi", + "session.yesterday": "Ieri", + "session.last7Days": "Ultimi 7 giorni", + "session.last30Days": "Ultimi 30 giorni", + "session.older": "Più vecchi", + "chat.input.placeholder": "Scrivi un messaggio…", + "chat.input.continue": "Continua su…", + "chat.send": "Invia", + "chat.stop": "Ferma generazione", + "chat.regenerate": "Rigenera risposta", + "chat.edit": "Modifica messaggio", + "chat.copy": "Copia messaggio", + "chat.delete": "Elimina messaggio", + "chat.copyCode": "Copia codice", + "chat.copiedCode": "Codice copiato", + "chat.insertCode": "Inserisci nel file", + "chat.applyEdit": "Applica modifica", + "chat.acceptEdit": "Accetta", + "chat.rejectEdit": "Rifiuta", + "chat.viewDiff": "Vedi differenze", + "chat.noMessages": "Nessun messaggio. Inizia a scrivere!", + "chat.messagesCount": "{{count}} messaggi", + "chat.agent.thinking": "Sto pensando…", + "chat.agent.searching": "Sto cercando…", + "chat.agent.reading": "Sto leggendo…", + "chat.agent.writing": "Sto scrivendo…", + "chat.agent.reviewing": "Sto revisionando…", + "chat.agent.complete": "Completato", + "chat.agent.tooltip.thinking": "L'agente sta analizzando la richiesta", + "chat.agent.tooltip.searching": "L'agente sta cercando informazioni", + "chat.agent.tooltip.reading": "L'agente sta leggendo un file", + "chat.agent.tooltip.writing": "L'agente sta modificando un file", + "chat.agent.tooltip.reviewing": "L'agente sta revisionando il codice", + "chat.agent.tooltip.complete": "Operazione completata", + "chat.usage.tokens": "Token utilizzati: {{count}}", + "chat.usage.cost": "Costo: {{cost}}", + "chat.usage.time": "Tempo: {{time}}s", + "chat.context.full": "Contesto completo", + "chat.context.summary": "Riepilogo contesto", + "provider.title": "Provider", + "provider.configure": "Configura provider", + "provider.select": "Seleziona provider", + "provider.connected": "Connesso", + "provider.disconnected": "Disconnesso", + "provider.error": "Errore di connessione", + "provider.apiKey": "Chiave API", + "provider.apiKey.placeholder": "Inserisci la chiave API", + "provider.apiKey.missing": "Chiave API mancante", + "provider.baseUrl": "URL base", + "provider.baseUrl.placeholder": "https://api.example.com", + "provider.model": "Modello", + "provider.model.select": "Seleziona modello", + "provider.model.search": "Cerca modello…", + "provider.model.noResults": "Nessun modello trovato", + "provider.custom": "Provider personalizzato", + "provider.custom.name": "Nome provider", + "provider.custom.name.placeholder": "Il mio provider", + "provider.delete.confirm": "Sei sicuro di voler eliminare questo provider?", + "model.title": "Modelli", + "model.configure": "Configura modelli", + "model.select": "Seleziona modello", + "model.search": "Cerca modello…", + "model.noResults": "Nessun modello trovato", + "model.temperature": "Temperatura", + "model.topP": "Top P", + "model.topK": "Top K", + "model.maxTokens": "Token massimi", + "model.maxTokens.placeholder": "4096", + "model.systemPrompt": "Prompt di sistema", + "model.systemPrompt.placeholder": "Sei un assistente utile.", + "model.stopSequences": "Sequenze di stop", + "model.stopSequences.placeholder": "Inserisci le sequenze separate da virgola", + "model.frequencyPenalty": "Penalità frequenza", + "model.presencePenalty": "Penalità presenza", + "tool.title": "Strumenti", + "tool.configure": "Configura strumenti", + "tool.installed": "Installati", + "tool.install": "Installa strumento", + "tool.uninstall": "Disinstalla", + "tool.enable": "Abilita", + "tool.disable": "Disabilita", + "tool.search": "Cerca strumenti…", + "tool.noResults": "Nessuno strumento trovato", + "tool.website": "Sito web", + "tool.repository": "Repository", + "context.title": "Contesto", + "context.add": "Aggiungi contesto", + "context.remove": "Rimuovi", + "context.file": "File", + "context.folder": "Cartella", + "context.url": "URL", + "context.image": "Immagine", + "context.terminal": "Terminale", + "context.screenshot": "Screenshot", + "context.selection": "Selezione", + "context.clipboard": "Appunti", + "context.search": "Cerca nel contesto…", + "context.empty": "Nessun contesto aggiunto", + "context.removeAll": "Rimuovi tutto", + "context.maxSize": "Dimensione massima contesto", + "settings.title": "Impostazioni", + "settings.general": "Generali", + "settings.appearance": "Aspetto", + "settings.editor": "Editor", + "settings.terminal": "Terminale", + "settings.extensions": "Estensioni", + "settings.shortcuts": "Scorciatoie", + "settings.about": "Informazioni", + "settings.language": "Lingua", + "settings.language.description": "Seleziona la lingua dell'interfaccia", + "settings.theme": "Tema", + "settings.theme.description": "Seleziona il tema dell'interfaccia", + "settings.theme.light": "Chiaro", + "settings.theme.dark": "Scuro", + "settings.theme.system": "Sistema", + "settings.fontSize": "Dimensione carattere", + "settings.fontSize.description": "Dimensione del carattere nell'editor", + "settings.fontFamily": "Carattere", + "settings.fontFamily.description": "Carattere utilizzato nell'editor", + "settings.tabSize": "Dimensione tabulazione", + "settings.tabSize.description": "Numero di spazi per tabulazione", + "settings.wordWrap": "A capo automatico", + "settings.wordWrap.description": "Abilita il wrapping delle righe lunghe", + "settings.minimap": "Minimappa", + "settings.minimap.description": "Mostra la minimappa a lato dell'editor", + "settings.lineNumbers": "Numeri di riga", + "settings.lineNumbers.description": "Mostra i numeri di riga nell'editor", + "settings.autoSave": "Salvataggio automatico", + "settings.autoSave.description": "Salva automaticamente i file modificati", + "settings.autoSave.off": "Disattivato", + "settings.autoSave.afterDelay": "Dopo ritardo", + "settings.autoSave.onFocusChange": "Al cambio di focus", + "settings.autoSave.onWindowChange": "Al cambio finestra", + "settings.autoSaveDelay": "Ritardo salvataggio automatico", + "settings.autoSaveDelay.description": "Ritardo in millisecondi prima del salvataggio", + "settings.tabCompletion": "Completamento con tab", + "settings.tabCompletion.description": "Abilita completamento con tasto tab", + "settings.bracketPairColorization": "Colorazione parentesi", + "settings.bracketPairColorization.description": "Abbina colori alle parentesi corrispondenti", + "settings.guides.indentation": "Guide indentazione", + "settings.guides.indentation.description": "Mostra linee guida di indentazione", + "settings.guides.bracketPairs": "Guide parentesi", + "settings.guides.bracketPairs.description": "Mostra linee guida tra parentesi corrispondenti", + "settings.formatOnSave": "Formatta al salvataggio", + "settings.formatOnSave.description": "Formatta automaticamente il file al salvataggio", + "settings.formatOnPaste": "Formatta all'incolla", + "settings.formatOnPaste.description": "Formatta automaticamente il testo incollato", + "settings.snippets": "Snippet", + "settings.snippets.description": "Abilita gli snippet di codice", + "settings.suggestions": "Suggerimenti", + "settings.suggestions.description": "Mostra suggerimenti durante la digitazione", + "settings.suggestions.off": "Disattivati", + "settings.suggestions.on": "Attivati", + "settings.suggestions.quick": "Veloce", + "settings.hover": "Anteprima al passaggio", + "settings.hover.description": "Mostra anteprima al passaggio del mouse", + "settings.parameterHints": "Suggerimenti parametri", + "settings.parameterHints.description": "Mostra suggerimenti per i parametri delle funzioni", + "settings.autoClosingBrackets": "Chiusura automatica parentesi", + "settings.autoClosingBrackets.description": "Chiudi automaticamente le parentesi", + "settings.autoClosingQuotes": "Chiusura automatica virgolette", + "settings.autoClosingQuotes.description": "Chiudi automaticamente le virgolette", + "settings.autoSurround": "Circonda automaticamente", + "settings.autoSurround.description": "Circonda automaticamente il testo selezionato con virgolette o parentesi", + "settings.stripTrailingWhitespace": "Rimuovi spazi finali", + "settings.stripTrailingWhitespace.description": "Rimuovi automaticamente gli spazi bianchi alla fine delle righe", + "settings.mouseWheelZoom": "Zoom con rotellina", + "settings.mouseWheelZoom.description": "Modifica la dimensione del carattere con la rotellina del mouse tenendo premuto Ctrl", + "settings.smoothScrolling": "Scorrimento fluido", + "settings.smoothScrolling.description": "Abilita lo scorrimento fluido nell'editor", + "settings.cursorBlinking": "Lampeggio cursore", + "settings.cursorBlinking.description": "Stile di lampeggio del cursore", + "settings.cursorStyle": "Stile cursore", + "settings.cursorStyle.description": "Stile del cursore nell'editor", + "settings.cursorWidth": "Larghezza cursore", + "settings.cursorWidth.description": "Larghezza del cursore in pixel", + "settings.letterSpacing": "Spaziatura lettere", + "settings.letterSpacing.description": "Spaziatura tra i caratteri nell'editor", + "settings.lineHeight": "Altezza riga", + "settings.lineHeight.description": "Altezza delle righe nell'editor", + "settings.padding.top": "Margine superiore", + "settings.padding.bottom": "Margine inferiore", + "settings.scrollbar.vertical": "Barra di scorrimento verticale", + "settings.scrollbar.horizontal": "Barra di scorrimento orizzontale", + "settings.scrollbar.verticalScrollbarSize": "Dimensione barra verticale", + "settings.scrollbar.horizontalScrollbarSize": "Dimensione barra orizzontale", + "settings.scrollbar.scrollByPage": "Scorri per pagina", + "settings.terminal.fontSize": "Dimensione carattere terminale", + "settings.terminal.fontSize.description": "Dimensione del carattere nel terminale", + "settings.terminal.fontFamily": "Carattere terminale", + "settings.terminal.fontFamily.description": "Carattere utilizzato nel terminale", + "settings.terminal.cursorStyle": "Stile cursore terminale", + "settings.terminal.cursorBlinking": "Lampeggio cursore terminale", + "settings.terminal.scrollback": "Buffer di scorrimento", + "settings.terminal.scrollback.description": "Numero di righe mantenute nel buffer", + "settings.terminal.shellPath": "Percorso shell", + "settings.terminal.shellPath.description": "Percorso dell'eseguibile della shell", + "settings.terminal.shellArgs": "Argomenti shell", + "settings.terminal.shellArgs.description": "Argomenti da passare alla shell", + "settings.terminal.defaultProfile": "Profilo predefinito", + "settings.terminal.defaultProfile.description": "Profilo del terminale predefinito", + "settings.terminal.env": "Variabili d'ambiente", + "settings.terminal.env.description": "Variabili d'ambiente aggiuntive per il terminale", + "settings.terminal.cwd": "Directory di lavoro", + "settings.terminal.cwd.description": "Directory di lavoro iniziale del terminale", + "settings.terminal.splitDirection": "Direzione divisione", + "settings.terminal.splitDirection.description": "Direzione in cui dividere il terminale", + "settings.terminal.hideOnStart": "Nascondi all'avvio", + "settings.terminal.hideOnStart.description": "Nascondi il terminale all'avvio", + "settings.extensions.autoUpdate": "Aggiornamento automatico", + "settings.extensions.autoUpdate.description": "Aggiorna automaticamente le estensioni", + "settings.extensions.gallery": "Galleria estensioni", + "settings.extensions.gallery.description": "URL della galleria estensioni", + "settings.proxy": "Proxy", + "settings.proxy.description": "Configurazione del proxy", + "settings.proxy.http": "Proxy HTTP", + "settings.proxy.https": "Proxy HTTPS", + "settings.proxy.noProxy": "Nessun proxy per", + "settings.update.mode": "Modalità aggiornamento", + "settings.update.mode.description": "Modalità di controllo aggiornamenti", + "settings.update.channel": "Canale aggiornamenti", + "settings.update.channel.description": "Canale di rilascio per gli aggiornamenti", + "settings.telemetry": "Telemetria", + "settings.telemetry.description": "Invia dati di utilizzo anonimi", + "settings.telemetry.enableCrashReporter": "Segnalazione crash", + "settings.telemetry.enableCrashReporter.description": "Invia segnalazioni di crash anonime", + "settings.keyboard.dispatch": "Modalità dispatch tastiera", + "settings.keyboard.dispatch.description": "Modalità di dispatch degli eventi tastiera", + "settings.window.title": "Titolo finestra", + "settings.window.title.description": "Formato del titolo della finestra", + "settings.window.newWindowDimensions": "Dimensioni nuova finestra", + "settings.window.newWindowDimensions.description": "Dimensioni predefinite per le nuove finestre", + "settings.window.zoomLevel": "Livello zoom", + "settings.window.zoomLevel.description": "Livello di zoom della finestra", + "settings.window.titleBarStyle": "Stile barra titolo", + "settings.window.titleBarStyle.description": "Stile della barra del titolo", + "settings.window.menuBarVisibility": "Visibilità barra menu", + "settings.window.menuBarVisibility.description": "Mostra o nascondi la barra dei menu", + "settings.workbench.colorTheme": "Tema colore", + "settings.workbench.colorTheme.description": "Seleziona il tema dei colori", + "settings.workbench.iconTheme": "Tema icone", + "settings.workbench.iconTheme.description": "Seleziona il tema delle icone", + "settings.workbench.sidebar.location": "Posizione barra laterale", + "settings.workbench.sidebar.location.description": "Posizione della barra laterale", + "settings.workbench.panel.defaultLocation": "Posizione predefinita pannello", + "settings.workbench.panel.defaultLocation.description": "Posizione predefinita del pannello", + "settings.workbench.statusBar.visible": "Barra di stato visibile", + "settings.workbench.statusBar.visible.description": "Mostra la barra di stato", + "settings.workbench.activityBar.visible": "Barra attività visibile", + "settings.workbench.activityBar.visible.description": "Mostra la barra delle attività", + "settings.workbench.editor.enablePreview": "Anteprima editor", + "settings.workbench.editor.enablePreview.description": "Apri i file in anteprima (senza tenere la scheda aperta)", + "settings.workbench.editor.openPositioning": "Posizionamento editor", + "settings.workbench.editor.openPositioning.description": "Posizione di apertura dei nuovi editor", + "settings.workbench.editor.closeOnFileDelete": "Chiudi alla cancellazione", + "settings.workbench.editor.closeOnFileDelete.description": "Chiudi la scheda quando il file viene eliminato", + "settings.workbench.list.openMode": "Modalità apertura elenco", + "settings.workbench.list.openMode.description": "Modalità di apertura degli elementi negli elenchi", + "settings.workbench.list.smoothScrolling": "Scorrimento fluido elenchi", + "settings.workbench.list.smoothScrolling.description": "Abilita lo scorrimento fluido negli elenchi", + "settings.workbench.list.horizontalScrolling": "Scorrimento orizzontale elenchi", + "settings.workbench.list.horizontalScrolling.description": "Abilita lo scorrimento orizzontale negli elenchi", + "settings.workbench.list.scrollByPage": "Scorrimento per pagina elenchi", + "settings.workbench.list.scrollByPage.description": "Scorri gli elenchi per pagina", + "settings.workbench.tree.indent": "Indentazione albero", + "settings.workbench.tree.indent.description": "Spaziatura di indentazione nell'albero", + "settings.workbench.tree.renderIndentGuides": "Guide indentazione albero", + "settings.workbench.tree.renderIndentGuides.description": "Mostra le guide di indentazione nell'albero", + "settings.workbench.tree.enableStickyScroll": "Scorrimento sticky albero", + "settings.workbench.tree.enableStickyScroll.description": "Mostra lo scorrimento sticky nell'albero", + "settings.files.encoding": "Codifica file", + "settings.files.encoding.description": "Codifica predefinita per i file", + "settings.files.eol": "Fine riga", + "settings.files.eol.description": "Carattere di fine riga predefinito", + "settings.files.exclude": "Escludi file", + "settings.files.exclude.description": "Pattern per escludere file dalla ricerca", + "settings.files.associations": "Associazioni file", + "settings.files.associations.description": "Associa estensioni file a linguaggi", + "settings.search.exclude": "Escludi dalla ricerca", + "settings.search.exclude.description": "Pattern per escludere file dalla ricerca", + "settings.search.quickOpen": "Apertura rapida", + "settings.search.quickOpen.description": "Abilita l'apertura rapida dei risultati di ricerca", + "settings.search.quickOpen.includeHistory": "Includi cronologia", + "settings.search.quickOpen.includeHistory.description": "Includi la cronologia nell'apertura rapida", + "settings.debug.allowBreakpointsEverywhere": "Permetti breakpoint ovunque", + "settings.debug.allowBreakpointsEverywhere.description": "Permette di impostare breakpoint su qualsiasi riga", + "settings.debug.showInStatusBar": "Mostra debug in barra di stato", + "settings.debug.showInStatusBar.description": "Mostra lo stato del debug nella barra di stato", + "settings.debug.showBreakpointsInOverviewRuler": "Breakpoint nella panoramica", + "settings.debug.showBreakpointsInOverviewRuler.description": "Mostra i breakpoint nel righello di panoramica", + "settings.debug.openDebug": "Apri debug", + "settings.debug.openDebug.description": "Apri automaticamente la vista di debug all'avvio", + "settings.debug.internalConsoleOptions": "Opzioni console interna", + "settings.debug.internalConsoleOptions.description": "Comportamento della console interna durante il debug", + "settings.html.autoClosingTags": "Chiusura automatica tag HTML", + "settings.html.autoClosingTags.description": "Chiudi automaticamente i tag HTML", + "settings.html.autoCreateQuotes": "Virgolette automatiche HTML", + "settings.html.autoCreateQuotes.description": "Crea automaticamente le virgolette per gli attributi HTML", + "settings.html.autoUpdateTags": "Aggiornamento automatico tag HTML", + "settings.html.autoUpdateTags.description": "Aggiorna automaticamente i tag HTML corrispondenti", + "settings.css.completion.completePropertyWithSemicolon": "Completa proprietà CSS con ;", + "settings.css.completion.completePropertyWithSemicolon.description": "Aggiungi automaticamente il punto e virgola alle proprietà CSS", + "settings.json.schemas": "Schemi JSON", + "settings.json.schemas.description": "Associa schemi JSON a file JSON", + "settings.json.validate.enable": "Validazione JSON", + "settings.json.validate.enable.description": "Abilita la validazione JSON", + "settings.markdown.preview": "Anteprima Markdown", + "settings.markdown.preview.description": "Apri l'anteprima del Markdown", + "settings.markdown.previewSideBySide": "Anteprima Markdown affiancata", + "settings.markdown.previewSideBySide.description": "Apri l'anteprima del Markdown affiancata all'editor", + "settings.markdown.breaks": "Interruzioni di riga Markdown", + "settings.markdown.breaks.description": "Riconosci le interruzioni di riga nel Markdown", + "settings.markdown.typographer": "Sostituzioni tipografiche", + "settings.markdown.typographer.description": "Abilita le sostituzioni tipografiche nel Markdown", + "settings.markdown.links.open": "Apertura link Markdown", + "settings.markdown.links.open.description": "Modalità di apertura dei link nel Markdown", + "settings.prettier.requireConfig": "Richiedi configurazione Prettier", + "settings.prettier.requireConfig.description": "Richiede un file di configurazione Prettier per formattare", + "settings.prettier.tabWidth": "Larghezza tab Prettier", + "settings.prettier.tabWidth.description": "Numero di spazi per tabulazione in Prettier", + "settings.prettier.useTabs": "Usa tab Prettier", + "settings.prettier.useTabs.description": "Usa tab invece di spazi in Prettier", + "settings.prettier.semi": "Punto e virgola Prettier", + "settings.prettier.semi.description": "Aggiungi punto e virgola in Prettier", + "settings.prettier.singleQuote": "Virgolette singole Prettier", + "settings.prettier.singleQuote.description": "Usa virgolette singole invece che doppie in Prettier", + "settings.prettier.trailingComma": "Virgola finale Prettier", + "settings.prettier.trailingComma.description": "Aggiungi virgola finale in Prettier", + "settings.prettier.bracketSpacing": "Spaziatura parentesi Prettier", + "settings.prettier.bracketSpacing.description": "Aggiungi spazi tra parentesi in Prettier", + "settings.prettier.arrowParens": "Parentesi arrow Prettier", + "settings.prettier.arrowParens.description": "Includi parentesi attorno ai parametri delle arrow function", + "settings.prettier.printWidth": "Larghezza riga Prettier", + "settings.prettier.printWidth.description": "Numero massimo di caratteri per riga in Prettier", + "settings.eslint.enable": "Abilita ESLint", + "settings.eslint.enable.description": "Abilita la linting ESLint", + "settings.eslint.run": "Esecuzione ESLint", + "settings.eslint.run.description": "Modalità di esecuzione di ESLint", + "settings.eslint.run.onSave": "Al salvataggio", + "settings.eslint.run.onType": "Durante la digitazione", + "settings.eslint.format.enable": "Formattazione ESLint", + "settings.eslint.format.enable.description": "Usa ESLint come formattatore", + "settings.eslint.options": "Opzioni ESLint", + "settings.eslint.options.description": "Opzioni di configurazione ESLint", + "settings.eslint.workingDirectories": "Directory di lavoro ESLint", + "settings.eslint.workingDirectories.description": "Directory di lavoro per ESLint", + "settings.eslint.codeAction.disableRuleComment": "Disabilita regola con commento", + "settings.eslint.codeAction.disableRuleComment.description": "Disabilita la regola ESLint con un commento", + "settings.eslint.codeAction.showDocumentation": "Mostra documentazione ESLint", + "settings.eslint.codeAction.showDocumentation.description": "Mostra la documentazione della regola ESLint", + "settings.eslint.codeActionsOnSave.mode": "Code actions ESLint al salvataggio", + "settings.eslint.codeActionsOnSave.mode.description": "Modalità delle code actions ESLint al salvataggio", + "settings.eslint.validate": "Validazione ESLint", + "settings.eslint.validate.description": "Linguaggi da validare con ESLint", + "settings.eslint.probe": "Rilevamento ESLint", + "settings.eslint.probe.description": "Linguaggi da rilevare per ESLint", + "settings.git.enable": "Abilita Git", + "settings.git.enable.description": "Abilita il supporto Git", + "settings.git.autofetch": "Fetch automatico Git", + "settings.git.autofetch.description": "Esegui fetch automatico dei repository Git", + "settings.git.autofetchPeriod": "Periodo fetch automatico Git", + "settings.git.autofetchPeriod.description": "Periodo in secondi tra i fetch automatici", + "settings.git.enableSmartCommit": "Commit intelligente Git", + "settings.git.enableSmartCommit.description": "Abilita il commit intelligente (stage all + commit)", + "settings.git.confirmSync": "Conferma sincronizzazione Git", + "settings.git.confirmSync.description": "Conferma prima di sincronizzare con il remoto", + "settings.git.countBadge": "Badge conteggio Git", + "settings.git.countBadge.description": "Mostra il badge con il conteggio delle modifiche Git", + "settings.git.decorations": "Decorazioni Git", + "settings.git.decorations.description": "Mostra le decorazioni Git nell'esplora file e nell'editor", + "settings.git.enableStatusBar": "Barra di stato Git", + "settings.git.enableStatusBar.description": "Mostra lo stato Git nella barra di stato", + "settings.git.openRepositoryInParentFolders": "Apri repository in cartelle padre", + "settings.git.openRepositoryInParentFolders.description": "Cerca repository Git nelle cartelle padre", + "settings.git.repositoryScanMaxDepth": "Profondità massima scansione repository", + "settings.git.repositoryScanMaxDepth.description": "Profondità massima per la scansione dei repository", + "settings.diffEditor.ignoreTrimWhitespace": "Ignora spazi finali diff", + "settings.diffEditor.ignoreTrimWhitespace.description": "Ignora gli spazi bianchi finali nel diff editor", + "settings.diffEditor.maxComputationTime": "Tempo massimo calcolo diff", + "settings.diffEditor.maxComputationTime.description": "Tempo massimo in millisecondi per il calcolo del diff", + "settings.diffEditor.renderSideBySide": "Diff affiancato", + "settings.diffEditor.renderSideBySide.description": "Mostra il diff in modalità affiancata", + "settings.diffEditor.wordWrap": "A capo diff", + "settings.diffEditor.wordWrap.description": "Abilita il wrapping delle righe nel diff editor", + "settings.diffEditor.showUnused": "Mostra codice non usato", + "settings.diffEditor.showUnused.description": "Mostra il codice non usato nel diff editor", + "settings.diffEditor.codeLens": "CodeLens diff", + "settings.diffEditor.codeLens.description": "Mostra CodeLens nel diff editor", + "settings.section.desktop": "Desktop", + "settings.section.server": "Server", + "settings.tab.general": "Generali", + "settings.tab.shortcuts": "Scorciatoie", + "settings.desktop.section.wsl": "WSL", + "settings.desktop.wsl.title": "Integrazione WSL", + "settings.desktop.wsl.description": "Esegui il server OpenCode all'interno di WSL su Windows.", + "settings.general.section.appearance": "Aspetto", + "settings.general.section.advanced": "Avanzate", + "settings.general.section.notifications": "Notifiche di sistema", + "settings.general.section.updates": "Aggiornamenti", + "settings.general.section.sounds": "Effetti sonori", + "settings.general.section.feed": "Feed", + "settings.general.section.display": "Schermo", + "settings.general.row.language.title": "Lingua", + "settings.general.row.language.description": "Cambia la lingua dell'interfaccia di OpenCode", + "settings.general.row.shell.title": "Shell del terminale", + "settings.general.row.shell.autoDefault": "Auto (Predefinito)", + "settings.general.row.shell.terminalOnly": "solo terminale", + "settings.general.row.appearance.title": "Aspetto", + "settings.general.row.appearance.description": "Personalizza l'aspetto di OpenCode", + "settings.general.row.colorScheme.title": "Schema colori", + "settings.general.row.colorScheme.description": "Scegli se OpenCode segue il tema di sistema, chiaro o scuro", + "settings.general.row.theme.title": "Tema", + "settings.general.row.theme.description": "Personalizza il tema di OpenCode.", + "settings.general.row.font.title": "Carattere codice", + "settings.general.row.font.description": "Personalizza il carattere usato nei blocchi di codice", + "settings.general.row.terminalFont.title": "Carattere terminale", + "settings.general.row.terminalFont.description": "Personalizza il carattere usato nel terminale", + "settings.general.row.uiFont.title": "Carattere interfaccia", + "settings.general.row.uiFont.description": "Personalizza il carattere usato nell'interfaccia", + "settings.general.row.followup.title": "Comportamento seguito", + "settings.general.row.followup.description": "Scegli se i prompt successivi agiscono subito o aspettano in coda", + "settings.general.row.followup.option.queue": "Coda", + "settings.general.row.followup.option.steer": "Diretto", + "settings.general.row.showFileTree.title": "Albero file", + "settings.general.row.showFileTree.description": "Mostra l'albero dei file nelle sessioni desktop", + "settings.general.row.showNavigation.title": "Controlli navigazione", + "settings.general.row.showNavigation.description": "Mostra i pulsanti indietro e avanti nella barra del titolo desktop", + "settings.general.row.showSearch.title": "Paletta comandi", + "settings.general.row.showSearch.description": "Mostra il pulsante di ricerca e paletta comandi nella barra del titolo desktop", + "settings.general.row.showTerminal.title": "Terminale", + "settings.general.row.showTerminal.description": "Mostra il pulsante del terminale nella barra del titolo desktop", + "settings.general.row.showStatus.title": "Stato server", + "settings.general.row.showStatus.description": "Mostra il pulsante di stato del server nella barra del titolo desktop", + "settings.general.row.reasoningSummaries.title": "Mostra riassunti ragionamento", + "settings.general.row.reasoningSummaries.description": "Mostra i riassunti del ragionamento del modello nella sequenza temporale", + "settings.general.row.shellToolPartsExpanded.title": "Espandi parti strumenti shell", + "settings.general.row.editToolPartsExpanded.title": "Espandi parti strumenti modifica", + "settings.general.row.showSessionProgressBar.title": "Mostra barra progresso sessione", + "settings.general.row.wayland.title": "Usa Wayland nativo", + "settings.general.row.wayland.description": "Disabilita il fallback X11 su Wayland. Richiede riavvio.", + "settings.general.row.releaseNotes.title": "Note di rilascio", + "settings.general.row.releaseNotes.description": "Mostra i popup Novità dopo gli aggiornamenti", + "settings.updates.row.startup.title": "Controlla aggiornamenti all'avvio", + "settings.updates.row.startup.description": "Controlla automaticamente gli aggiornamenti all'avvio di OpenCode", + "settings.updates.row.check.title": "Controlla aggiornamenti", + "settings.updates.row.check.description": "Controlla manualmente gli aggiornamenti e installa se disponibili", + "settings.updates.action.checkNow": "Controlla ora", + "settings.updates.action.checking": "Controllo in corso...", + "settings.updates.toast.latest.title": "Sei aggiornato", + "settings.updates.toast.latest.description": "Stai usando l'ultima versione di OpenCode.", + "settings.general.notifications.agent.title": "Agente", + "settings.general.notifications.permissions.title": "Permessi", + "settings.general.notifications.permissions.description": "Mostra notifica di sistema quando è richiesto un permesso", + "settings.general.notifications.errors.title": "Errori", + "settings.general.notifications.errors.description": "Mostra notifica di sistema quando si verifica un errore", + "settings.general.sounds.agent.title": "Agente", + "settings.general.sounds.agent.description": "Riproduci suono quando l'agente completa o richiede attenzione", + "settings.general.sounds.permissions.title": "Permessi", + "settings.general.sounds.permissions.description": "Riproduci suono quando è richiesto un permesso", + "settings.general.sounds.errors.title": "Errori", + "settings.general.sounds.errors.description": "Riproduci suono quando si verifica un errore", + "settings.shortcuts.title": "Scorciatoie da tastiera", + "settings.shortcuts.reset.button": "Ripristina predefiniti", + "settings.shortcuts.reset.toast.title": "Scorciatoie ripristinate", + "settings.shortcuts.reset.toast.description": "Le scorciatoie da tastiera sono state ripristinate ai valori predefiniti.", + "settings.shortcuts.conflict.title": "Scorciatoia già in uso", + "settings.shortcuts.conflict.description": "{{keybind}} è già assegnata a {{titles}}.", + "settings.shortcuts.unassigned": "Non assegnata", + "settings.shortcuts.pressKeys": "Premi tasti", + "settings.shortcuts.search.placeholder": "Cerca scorciatoie", + "settings.shortcuts.search.empty": "Nessuna scorciatoia trovata", + "settings.shortcuts.group.general": "Generali", + "settings.shortcuts.group.session": "Sessione", + "settings.shortcuts.group.navigation": "Navigazione", + "settings.shortcuts.group.modelAndAgent": "Modello e agente", + "settings.shortcuts.group.terminal": "Terminale", + "settings.shortcuts.group.prompt": "Prompt", + "settings.providers.title": "Provider", + "settings.providers.description": "Le impostazioni dei provider saranno configurabili qui.", + "settings.providers.section.connected": "Provider collegati", + "settings.providers.connected.empty": "Nessun provider collegato", + "settings.providers.connected.environmentDescription": "Collegato dalle variabili d'ambiente", + "settings.providers.section.popular": "Provider popolari", + "settings.providers.custom.description": "Aggiungi un provider compatibile con OpenAI tramite URL base.", + "settings.providers.tag.environment": "Ambiente", + "settings.providers.tag.config": "Config", + "settings.providers.tag.custom": "Personalizzato", + "settings.providers.tag.other": "Altro", + "settings.models.title": "Modelli", + "settings.models.description": "Le impostazioni dei modelli saranno configurabili qui.", + "settings.agents.title": "Agenti", + "settings.agents.description": "Le impostazioni degli agenti saranno configurabili qui.", + "settings.commands.title": "Comandi", + "settings.commands.description": "Le impostazioni dei comandi saranno configurabili qui.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "Le impostazioni MCP saranno configurabili qui.", + "settings.permissions.title": "Permessi", + "settings.permissions.description": "Controlla quali strumenti il server può usare di default.", + "settings.permissions.section.tools": "Strumenti", + "settings.permissions.toast.updateFailed.title": "Impossibile aggiornare i permessi", + "settings.permissions.action.allow": "Consenti", + "settings.permissions.action.ask": "Chiedi", + "settings.permissions.action.deny": "Nega", + "settings.permissions.tool.read.title": "Lettura", + "settings.permissions.tool.read.description": "Leggere un file (corrisponde al percorso file)", + "settings.permissions.tool.edit.title": "Modifica", + "settings.permissions.tool.edit.description": "Modificare file, incluse modifiche, scritture e patch", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Cercare file usando pattern glob", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Cercare contenuti file usando espressioni regolari", + "settings.permissions.tool.list.title": "Elenco", + "settings.permissions.tool.list.description": "Elencare file in una directory", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Eseguire comandi shell", + "settings.permissions.tool.task.title": "Attività", + "settings.permissions.tool.task.description": "Avviare sub-agenti", + "settings.permissions.tool.skill.title": "Skill", + "settings.permissions.tool.skill.description": "Caricare una skill per nome", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Eseguire query del server linguistico", + "settings.permissions.tool.todowrite.title": "Todo Write", + "settings.permissions.tool.todowrite.description": "Aggiornare la lista delle attività", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "Recuperare contenuti da un URL", + "settings.permissions.tool.websearch.title": "Ricerca Web", + "settings.permissions.tool.websearch.description": "Cercare sul web", + "settings.permissions.tool.external_directory.title": "Directory esterna", + "settings.permissions.tool.external_directory.description": "Accedere a file fuori dalla directory del progetto", + "settings.permissions.tool.doom_loop.title": "Ciclo bloccato", + "settings.permissions.tool.doom_loop.description": "Rilevare chiamate strumento ripetute con input identico", + "notification.title": "Notifiche", + "notification.noNotifications": "Nessuna notifica", + "notification.markAsRead": "Segna come letto", + "notification.markAllAsRead": "Segna tutti come letti", + "notification.clear": "Pulisci", + "notification.clearAll": "Pulisci tutto", + "notification.settings": "Impostazioni notifiche", + "notification.showNotifications": "Mostra notifiche", + "notification.hideNotifications": "Nascondi notifiche", + "notification.newNotifications": "{{count}} nuove notifiche", + "permission.title": "Permessi", + "permission.allow": "Consenti", + "permission.deny": "Nega", + "permission.alwaysAllow": "Consenti sempre", + "permission.alwaysDeny": "Nega sempre", + "permission.ask": "Chiedi sempre", + "permission.file.read": "Leggere il file", + "permission.file.write": "Scrivere il file", + "permission.file.delete": "Eliminare il file", + "permission.file.rename": "Rinominare il file", + "permission.directory.read": "Leggere la directory", + "permission.directory.create": "Creare la directory", + "permission.directory.delete": "Eliminare la directory", + "permission.command.exec": "Eseguire il comando", + "permission.network.request": "Effettuare una richiesta di rete", + "permission.clipboard.read": "Leggere gli appunti", + "permission.clipboard.write": "Scrivere negli appunti", + "permission.environment.read": "Leggere le variabili d'ambiente", + "permission.extension.install": "Installare l'estensione", + "permission.terminal.write": "Scrivere nel terminale", + "permission.agent.state": "Modificare lo stato dell'agente", + "permission.request": "Richiesta autorizzazione", + "permission.request.count": "{{count}} richieste di autorizzazione", + "permission.request.description": "L'agente richiede l'autorizzazione per:", + "permission.autoRespond.title": "Risposta automatica", + "permission.autoRespond.description": "Rispondi automaticamente alle richieste di autorizzazione per i permessi selezionati", + "permission.autoRespond.enable": "Abilita risposta automatica", + "permission.autoRespond.disable": "Disabilita risposta automatica", + "permission.autoRespond.timeout": "Timeout risposta automatica", + "permission.autoRespond.timeout.description": "Timeout in secondi per la risposta automatica", + "permission.autoRespond.timeout.placeholder": "30", + "sidebar.explorer": "Esplora file", + "sidebar.search": "Cerca", + "sidebar.sourceControl": "Controllo versione", + "sidebar.extensions": "Estensioni", + "sidebar.debug": "Debug", + "sidebar.tasks": "Attività", + "sidebar.outline": "Struttura", + "sidebar.timeline": "Cronologia", + "sidebar.projects": "Progetti", + "sidebar.project": "Progetto", + "sidebar.project.noProjects": "Nessun progetto aperto", + "sidebar.project.addProject": "Aggiungi progetto", + "sidebar.project.openProject": "Apri progetto", + "sidebar.project.closeProject": "Chiudi progetto", + "sidebar.project.projectSettings": "Impostazioni progetto", + "sidebar.project.removeProject": "Rimuovi progetto", + "sidebar.project.removeProject.confirm": "Sei sicuro di voler rimuovere questo progetto?", + "sidebar.project.removeProject.confirmDescription": "I file del progetto non verranno eliminati.", + "sidebar.project.deleteProject": "Elimina progetto", + "sidebar.project.deleteProject.confirm": "Sei sicuro di voler eliminare questo progetto?", + "sidebar.project.deleteProject.confirmDescription": "Tutti i file associati verranno eliminati.", + "panel.output": "Output", + "panel.problems": "Problemi", + "panel.terminal": "Terminale", + "panel.debugConsole": "Console di debug", + "panel.comments": "Commenti", + "panel.notifications": "Notifiche", + "panel.tasks": "Attività", + "panel.ports": "Porte", + "statusBar.remote": "Remoto", + "statusBar.remote.description": "Connesso a un ambiente remoto", + "statusBar.branch": "Branch", + "statusBar.branch.noBranch": "Nessun branch", + "statusBar.error": "Errore", + "statusBar.warning": "Attenzione", + "statusBar.info": "Informazioni", + "statusBar.hint": "Suggerimento", + "statusBar.line": "Riga {{line}}", + "statusBar.column": "Colonna {{column}}", + "statusBar.lineCol": "Riga {{line}}, Colonna {{column}}", + "statusBar.indentation": "Indentazione: {{indent}}", + "statusBar.encoding": "Codifica: {{encoding}}", + "statusBar.eol": "Fine riga: {{eol}}", + "statusBar.language": "Linguaggio: {{language}}", + "statusBar.notifications": "Notifiche", + "statusBar.noNotifications": "Nessuna notifica", + "statusBar.sync": "Sincronizzazione", + "statusBar.problems": "Problemi", + "statusBar.noProblems": "Nessun problema", + "statusBar.feedback": "Feedback", + "problems.title": "Problemi", + "problems.noProblems": "Nessun problema rilevato", + "problems.filter": "Filtra problemi", + "problems.filterBySeverity": "Filtra per gravità", + "problems.error": "Errore", + "problems.warning": "Avviso", + "problems.info": "Informazioni", + "problems.hint": "Suggerimento", + "problems.errorsCount": "{{count}} errori", + "problems.warningsCount": "{{count}} avvisi", + "problems.infosCount": "{{count}} informazioni", + "problems.hintsCount": "{{count}} suggerimenti", + "problems.totalCount": "{{total}} problemi totali", + "problems.quickFix": "Correzione rapida", + "problems.showErrorsOnly": "Mostra solo errori", + "problems.showWarningsOnly": "Mostra solo avvisi", + "problems.showInfosOnly": "Mostra solo informazioni", + "problems.showHintsOnly": "Mostra solo suggerimenti", + "problems.autoFix": "Correggi automaticamente", + "problems.autoFixAll": "Correggi tutto automaticamente", + "output.title": "Output", + "output.noOutput": "Nessun output", + "output.clear": "Pulisci output", + "output.toggleAutoScroll": "Scorrimento automatico", + "output.showChannel": "Mostra canale", + "output.switchChannel": "Cambia canale", + "debug.title": "Debug", + "debug.start": "Avvia debug", + "debug.stop": "Ferma", + "debug.restart": "Riavvia", + "debug.continue": "Continua", + "debug.stepOver": "Passa oltre", + "debug.stepInto": "Entra in", + "debug.stepOut": "Esci da", + "debug.pause": "Pausa", + "debug.addBreakpoint": "Aggiungi breakpoint", + "debug.removeBreakpoint": "Rimuovi breakpoint", + "debug.enableBreakpoint": "Abilita breakpoint", + "debug.disableBreakpoint": "Disabilita breakpoint", + "debug.breakpoints": "Breakpoint", + "debug.noBreakpoints": "Nessun breakpoint", + "debug.variables": "Variabili", + "debug.noVariables": "Nessuna variabile", + "debug.watch": "Osservazione", + "debug.addWatch": "Aggiungi espressione", + "debug.callStack": "Stack di chiamata", + "debug.callStack.noFrames": "Nessun frame", + "debug.callStack.loadMore": "Carica altri frame", + "debug.threads": "Thread", + "debug.threads.noThreads": "Nessun thread", + "debug.loadedScripts": "Script caricati", + "debug.loadedScripts.noScripts": "Nessuno script", + "debug.console": "Console di debug", + "debug.console.placeholder": "Inserisci espressione…", + "debug.console.clear": "Pulisci console", + "debug.console.copy": "Copia tutto", + "debug.console.clearHistory": "Pulisci cronologia", + "sourceControl.title": "Controllo versione", + "sourceControl.noRepositories": "Nessun repository aperto", + "sourceControl.openRepository": "Apri repository", + "sourceControl.cloneRepository": "Clona repository", + "sourceControl.initRepository": "Inizializza repository", + "sourceControl.changes": "Modifiche", + "sourceControl.stagedChanges": "Modifiche in stage", + "sourceControl.mergeChanges": "Modifiche in merge", + "sourceControl.stash": "Salva modifiche", + "sourceControl.commit": "Commit", + "sourceControl.commitMessage": "Messaggio di commit", + "sourceControl.commitMessage.placeholder": "Inserisci messaggio di commit…", + "sourceControl.commitAndPush": "Commit e push", + "sourceControl.commitAndSync": "Commit e sincronizza", + "sourceControl.push": "Push", + "sourceControl.pull": "Pull", + "sourceControl.sync": "Sincronizza", + "sourceControl.fetch": "Fetch", + "sourceControl.stage": "Aggiungi all'stage", + "sourceControl.stageAll": "Aggiungi tutto all'stage", + "sourceControl.unstage": "Rimuovi dall'stage", + "sourceControl.unstageAll": "Rimuovi tutto dall'stage", + "sourceControl.discard": "Scarta modifiche", + "sourceControl.discardAll": "Scarta tutte le modifiche", + "sourceControl.clean": "Pulisci", + "sourceControl.rollback": "Rollback", + "sourceControl.viewDiff": "Vedi differenze", + "sourceControl.openFile": "Apri file", + "sourceControl.refresh": "Aggiorna", + "sourceControl.moreActions": "Altre azioni", + "sourceControl.branch": "Branch", + "sourceControl.createBranch": "Crea branch", + "sourceControl.createBranchFrom": "Crea branch da…", + "sourceControl.deleteBranch": "Elimina branch", + "sourceControl.renameBranch": "Rinomina branch", + "sourceControl.mergeBranch": "Unisci branch", + "sourceControl.rebaseBranch": "Rebase branch", + "sourceControl.switchBranch": "Cambia branch", + "sourceControl.checkout": "Checkout", + "sourceControl.checkoutTo": "Checkout su…", + "sourceControl.publishBranch": "Pubblica branch", + "sourceControl.unpublishBranch": "Non pubblicare più", + "sourceControl.tag": "Tag", + "sourceControl.createTag": "Crea tag", + "sourceControl.deleteTag": "Elimina tag", + "sourceControl.remote": "Remoto", + "sourceControl.addRemote": "Aggiungi remoto", + "sourceControl.removeRemote": "Rimuovi remoto", + "sourceControl.updateRemote": "Aggiorna remoto", + "sourceControl.stashChanges": "Salva modifiche", + "sourceControl.stashChanges.placeholder": "Messaggio stash (opzionale)", + "sourceControl.popStash": "Applica e rimuovi stash", + "sourceControl.applyStash": "Applica stash", + "sourceControl.dropStash": "Elimina stash", + "sourceControl.fileStatus.added": "Aggiunto", + "sourceControl.fileStatus.modified": "Modificato", + "sourceControl.fileStatus.deleted": "Eliminato", + "sourceControl.fileStatus.renamed": "Rinominato", + "sourceControl.fileStatus.copied": "Copiato", + "sourceControl.fileStatus.untracked": "Non tracciato", + "sourceControl.fileStatus.conflict": "Conflitto", + "sourceControl.repositoryCount": "{{count}} repository", + "sourceControl.changeCount": "{{count}} modifiche", + "sourceControl.stashCount": "{{count}} stash", + "sourceControl.untrackedCount": "{{count}} non tracciati", + "search.title": "Cerca", + "search.search": "Cerca", + "search.search.placeholder": "Cerca nei file…", + "search.replace": "Sostituisci", + "search.replace.placeholder": "Sostituisci con…", + "search.replaceAll": "Sostituisci tutto", + "search.replaceAll.confirm": "Sei sicuro di voler sostituire tutte le occorrenze?", + "search.replaceAll.confirmDescription": "{{count}} occorrenze saranno sostituite in {{files}} file.", + "search.matchCase": "Maiuscole/minuscole", + "search.matchWholeWord": "Parola intera", + "search.useRegex": "Usa regex", + "search.include": "Includi pattern", + "search.include.placeholder": "Includi file…", + "search.exclude": "Escludi pattern", + "search.exclude.placeholder": "Escludi file…", + "search.onlyOpenEditors": "Solo editor aperti", + "search.collapseResults": "Comprimi risultati", + "search.expandResults": "Espandi risultati", + "search.clearResults": "Pulisci risultati", + "search.noResults": "Nessun risultato trovato", + "search.resultsCount": "{{count}} risultati in {{files}} file", + "search.collapseAll": "Comprimi tutto", + "search.findInSelection": "Trova nella selezione", + "search.searchHistory": "Cronologia ricerca", + "search.searchHistory.clear": "Pulisci cronologia", + "search.searchHistory.clear.confirm": "Pulisci la cronologia delle ricerche?", + "search.replaceHistory": "Cronologia sostituzioni", + "search.replaceHistory.clear": "Pulisci cronologia sostituzioni", + "search.replaceHistory.clear.confirm": "Pulisci la cronologia delle sostituzioni?", + "search.useExcludeSettings": "Usa impostazioni di esclusione", + "search.useExcludeSettings.description": "Usa le impostazioni di esclusione dei file dalla ricerca", + "search.actions": "Azioni", + "search.actions.openInEditor": "Apri nell'editor", + "search.actions.openInSidebar": "Apri nella barra laterale", + "search.actions.copyPath": "Copia percorso", + "search.actions.copyResults": "Copia risultati", + "search.actions.revealInExplorer": "Mostra nell'esplora file", + "search.actions.showInFolder": "Mostra nella cartella", + "extensions.title": "Estensioni", + "extensions.installed": "Installate", + "extensions.recommended": "Raccomandate", + "extensions.popular": "Popolari", + "extensions.enabled": "Abilitate", + "extensions.disabled": "Disabilitate", + "extensions.all": "Tutte", + "extensions.search": "Cerca estensioni…", + "extensions.noResults": "Nessuna estensione trovata", + "extensions.install": "Installa", + "extensions.uninstall": "Disinstalla", + "extensions.enable": "Abilita", + "extensions.disable": "Disabilita", + "extensions.update": "Aggiorna", + "extensions.reload": "Ricarica", + "extensions.development": "Sviluppo", + "extensions.installFromVSIX": "Installa da VSIX…", + "extensions.installFromVSIX.description": "Installa un'estensione da un file VSIX", + "extensions.autoUpdate": "Aggiornamento automatico", + "extensions.autoUpdate.description": "Aggiorna automaticamente le estensioni", + "extensions.manage": "Gestisci", + "extensions.open": "Apri", + "extensions.details": "Dettagli", + "extensions.featureContributions": "Contributi funzionalità", + "extensions.changelog": "Registro modifiche", + "extensions.dependencies": "Dipendenze", + "extensions.pack": "Pacchetto", + "extensions.category": "Categoria", + "extensions.tags": "Tag", + "extensions.installCount": "{{count}} installazioni", + "extensions.rating": "Valutazione", + "extensions.downloadCount": "{{count}} download", + "extensions.released": "Rilasciata il {{date}}", + "extensions.lastUpdated": "Ultimo aggiornamento {{date}}", + "extensions.license": "Licenza", + "extensions.homepage": "Homepage", + "extensions.repository": "Repository", + "extensions.issues": "Problemi", + "extensions.publisher": "Editore", + "extensions.version": "Versione", + "extensions.extensionPack": "Pacchetto di estensioni", + "extensions.extensionPack.description": "Estensione che include un pacchetto di altre estensioni", + "tasks.title": "Attività", + "tasks.noTasks": "Nessuna attività", + "tasks.runTask": "Esegui attività", + "tasks.configureTask": "Configura attività", + "tasks.terminate": "Termina", + "tasks.restart": "Riavvia", + "tasks.reuseTerminal": "Riutilizza terminale", + "tasks.showOutput": "Mostra output", + "tasks.scanForTasks": "Cerca attività…", + "tasks.allowAutomaticTasks": "Consenti attività automatiche", + "tasks.allowAutomaticTasks.description": "Consenti l'esecuzione automatica delle attività alla creazione", + "tasks.suppressTaskName": "Nascondi nome attività", + "tasks.suppressTaskName.description": "Nascondi il nome dell'attività nell'output", + "tasks.showInStatusBar": "Mostra nella barra di stato", + "tasks.showInStatusBar.description": "Mostra lo stato delle attività nella barra di stato", + "tasks.problemMatcher": "Rilevamento problemi", + "tasks.problemMatcher.description": "Pattern per rilevare problemi nell'output dell'attività", + "tasks.presentationOptions": "Opzioni di presentazione", + "tasks.presentationOptions.description": "Opzioni di presentazione per l'output dell'attività", + "tasks.group": "Gruppo attività", + "tasks.group.description": "Gruppo a cui appartiene l'attività", + "tasks.detail": "Dettaglio attività", + "tasks.detail.description": "Dettaglio dell'attività", + "tasks.isBackground": "Attività in background", + "tasks.isBackground.description": "L'attività rimane in esecuzione in background", + "tasks.options": "Opzioni attività", + "tasks.options.description": "Opzioni avanzate per l'attività", + "tasks.runOptions": "Opzioni di esecuzione", + "tasks.runOptions.description": "Opzioni di esecuzione per l'attività", + "tasks.runOn": "Esegui su", + "tasks.runOn.description": "Evento che attiva l'esecuzione dell'attività", + "tasks.runOn.folderOpen": "Apertura cartella", + "tasks.runOn.folderOpen.description": "Esegui l'attività quando si apre la cartella", + "tasks.windowsOptions": "Opzioni Windows", + "tasks.windowsOptions.description": "Opzioni specifiche per Windows", + "tasks.macOptions": "Opzioni macOS", + "tasks.macOptions.description": "Opzioni specifiche per macOS", + "tasks.linuxOptions": "Opzioni Linux", + "tasks.linuxOptions.description": "Opzioni specifiche per Linux", + "tasks.shellOptions": "Opzioni shell", + "tasks.shellOptions.description": "Opzioni della shell per l'attività", + "tasks.command": "Comando", + "tasks.command.description": "Comando da eseguire", + "tasks.args": "Argomenti", + "tasks.args.description": "Argomenti da passare al comando", + "tasks.label": "Etichetta attività", + "tasks.label.description": "Etichetta visualizzata per l'attività", + "tasks.type": "Tipo attività", + "tasks.type.description": "Tipo di attività", + "tasks.type.shell": "Shell", + "tasks.type.process": "Processo", + "tasks.problems": "Problemi attività", + "tasks.problems.description": "Problemi rilevati durante l'esecuzione dell'attività", + "tasks.problems.owner": "Proprietario problema", + "tasks.problems.fileLocation": "Posizione file", + "tasks.problems.pattern": "Pattern problema", + "tasks.problems.severity": "Gravità problema", + "tasks.problems.severity.error": "Errore", + "tasks.problems.severity.warning": "Avviso", + "tasks.problems.severity.info": "Informazione", + "tasks.problems.severity.hint": "Suggerimento", + "tasks.problems.applyTo": "Applica a", + "tasks.problems.applyTo.allDocuments": "Tutti i documenti", + "tasks.problems.applyTo.openDocuments": "Documenti aperti", + "tasks.problems.applyTo.closedDocuments": "Documenti chiusi", + "tasks.problems.watcher": "Osservatore", + "tasks.problems.watcher.description": "Osserva l'output per nuovi problemi", + "tasks.problems.backgroundPattern": "Pattern background", + "tasks.problems.backgroundPattern.description": "Pattern per rilevare l'avvio del task in background", + "tasks.problems.backgroundReady": "Pronto", + "tasks.problems.backgroundBegins": "Inizia", + "tasks.problems.backgroundEnds": "Termina", + "tasks.quickOpen": "Apertura rapida attività", + "tasks.quickOpen.description": "Usa l'apertura rapida per cercare ed eseguire attività", + "tasks.showTasks": "Mostra attività", + "tasks.showTasks.description": "Mostra l'elenco delle attività disponibili", + "tasks.hideTasks": "Nascondi attività", + "tasks.hideTasks.description": "Nascondi l'elenco delle attività", + "tasks.recentlyUsed": "Usate di recente", + "tasks.recentlyUsed.description": "Mostra le attività usate di recente", + "tasks.configuredTasks": "Attività configurate", + "tasks.configuredTasks.description": "Mostra le attività configurate nel progetto", + "tasks.detectedTasks": "Attività rilevate", + "tasks.detectedTasks.description": "Mostra le attività rilevate automaticamente", + "tasks.allTasks": "Tutte le attività", + "tasks.allTasks.description": "Mostra tutte le attività disponibili", + "tasks.userTasks": "Attività utente", + "tasks.userTasks.description": "Attività definite dall'utente", + "tasks.hiddenTasks": "Attività nascoste", + "tasks.hiddenTasks.description": "Attività nascoste", + "tasks.customTasks": "Attività personalizzate", + "tasks.customTasks.description": "Attività personalizzate", + "tasks.recentTasks": "Attività recenti", + "tasks.recentTasks.description": "Attività eseguite di recente", + "tasks.noRecentTasks": "Nessuna attività recente", + "tasks.noConfiguredTasks": "Nessuna attività configurata", + "tasks.noDetectedTasks": "Nessuna attività rilevata", + "tasks.openTasks": "Apri attività", + "tasks.openTasks.description": "Apri l'elenco delle attività in esecuzione", + "profile.title": "Profili", + "profile.create": "Crea profilo", + "profile.delete": "Elimina profilo", + "profile.rename": "Rinomina profilo", + "profile.duplicate": "Duplica profilo", + "profile.export": "Esporta profilo", + "profile.import": "Importa profilo", + "profile.switch": "Cambia profilo", + "profile.default": "Predefinito", + "profile.current": "Profilo corrente", + "profile.noProfiles": "Nessun profilo", + "profile.create.description": "Crea un nuovo profilo con le impostazioni personalizzate", + "profile.delete.confirm": "Eliminare il profilo {{name}}?", + "profile.delete.confirmDescription": "Questa azione non può essere annullata.", + "profile.rename.placeholder": "Nome profilo…", + "profile.settings": "Impostazioni profilo", + "profile.settings.description": "Gestisci le impostazioni del profilo", + "profile.extensions": "Estensioni profilo", + "profile.extensions.description": "Gestisci le estensioni del profilo", + "profile.sync": "Profilo sincronizzato", + "profile.sync.description": "Sincronizza il profilo tra gli ambienti", + "keyboard": "Tastiera", + "keyboard.shortcuts": "Scorciatoie da tastiera", + "keyboard.shortcuts.description": "Personalizza le scorciatoie da tastiera", + "keyboard.shortcuts.placeholder": "Cerca scorciatoie…", + "keyboard.shortcuts.noResults": "Nessuna scorciatoia trovata", + "keyboard.shortcuts.record": "Registra scorciatoia", + "keyboard.shortcuts.record.placeholder": "Premi la combinazione di tasti…", + "keyboard.shortcuts.record.conflict": "Conflitto con {{existing}}", + "keyboard.shortcuts.reset": "Ripristina", + "keyboard.shortcuts.resetAll": "Ripristina tutto", + "keyboard.shortcuts.resetAll.confirm": "Ripristinare tutte le scorciatoie da tastiera?", + "keyboard.shortcuts.remove": "Rimuovi", + "keyboard.shortcuts.change": "Cambia", + "keyboard.shortcuts.changeWhen": "Cambia condizione", + "keyboard.shortcuts.when": "Condizione", + "keyboard.shortcuts.command": "Comando", + "keyboard.shortcuts.key": "Tasto", + "keyboard.shortcuts.source": "Origine", + "keyboard.shortcuts.source.default": "Predefinito", + "keyboard.shortcuts.source.user": "Utente", + "keyboard.shortcuts.source.extension": "Estensione", + "keyboard.shortcuts.source.system": "Sistema", + "snippet.title": "Snippet", + "snippet.create": "Crea snippet", + "snippet.edit": "Modifica snippet", + "snippet.delete": "Elimina snippet", + "snippet.delete.confirm": "Eliminare lo snippet?", + "snippet.prefix": "Prefisso", + "snippet.body": "Corpo", + "snippet.description": "Descrizione", + "snippet.scope": "Ambito", + "snippet.scope.placeholder": "JavaScript, TypeScript, HTML…", + "snippet.noSnippets": "Nessuno snippet", + "snippet.placeholder": "Crea un nuovo snippet…", + "snippet.import": "Importa snippet", + "snippet.export": "Esporta snippet", + "snippet.share": "Condividi snippet", + "walkthrough.title": "Tour guidato", + "walkthrough.start": "Inizia il tour guidato", + "walkthrough.step": "Passo {{current}} di {{total}}", + "walkthrough.next": "Avanti", + "walkthrough.previous": "Indietro", + "walkthrough.skip": "Salta", + "walkthrough.done": "Completato", + "walkthrough.restart": "Riavvia", + "walkthrough.close": "Chiudi", + "walkthrough.progress": "Progresso: {{current}}/{{total}}", + "walkthrough.completed": "Tour completato!", + "walkthrough.completed.description": "Hai completato il tour guidato.", + "welcome.title": "Benvenuto", + "welcome.getStarted": "Inizia", + "welcome.getStarted.description": "Configura il tuo ambiente di lavoro", + "welcome.newProject": "Nuovo progetto", + "welcome.newProject.description": "Crea un nuovo progetto da zero", + "welcome.openProject": "Apri progetto", + "welcome.openProject.description": "Apri un progetto esistente dal tuo computer", + "welcome.cloneRepository": "Clona repository", + "welcome.cloneRepository.description": "Clona un repository Git da Internet", + "welcome.openFile": "Apri file", + "welcome.openFile.description": "Apri un singolo file per visualizzarlo o modificarlo", + "welcome.openFolder": "Apri cartella", + "welcome.openFolder.description": "Apri una cartella come progetto", + "welcome.recent": "Recenti", + "welcome.recent.empty": "Nessun progetto recente", + "welcome.help": "Aiuto", + "welcome.help.description": "Scopri di più su come usare l'applicazione", + "welcome.documentation": "Documentazione", + "welcome.documentation.description": "Leggi la documentazione ufficiale", + "welcome.releaseNotes": "Note di rilascio", + "welcome.releaseNotes.description": "Scopri le novità dell'ultima versione", + "welcome.reportIssue": "Segnala problema", + "welcome.reportIssue.description": "Segnala un problema o richiedi una funzionalità", + "welcome.troubleshooting": "Risoluzione problemi", + "welcome.troubleshooting.description": "Trova soluzioni ai problemi comuni", + "welcome.community": "Community", + "welcome.community.description": "Unisciti alla community", + "welcome.twitter": "Twitter", + "welcome.github": "GitHub", + "welcome.discord": "Discord", + "welcome.youtube": "YouTube", + "welcome.privacy": "Privacy", + "welcome.privacy.description": "Leggi l'informativa sulla privacy", + "welcome.license": "Licenza", + "welcome.license.description": "Visualizza informazioni sulla licenza", + "welcome.version": "Versione {{version}}", + "welcome.build": "Build {{build}}", + "welcome.commit": "Commit {{commit}}", + "welcome.date": "Data {{date}}", + "welcome.updateAvailable": "Aggiornamento disponibile", + "welcome.updateAvailable.description": "La versione {{version}} è disponibile", + "welcome.updateNow": "Aggiorna ora", + "welcome.checkForUpdates": "Controlla aggiornamenti", + "welcome.checkingForUpdates": "Controllo aggiornamenti in corso…", + "welcome.upToDate": "L'applicazione è aggiornata", + "welcome.downloading": "Download in corso…", + "welcome.installing": "Installazione in corso…", + "welcome.restartToUpdate": "Riavvia per aggiornare", + "welcome.restart": "Riavvia", + "welcome.later": "Più tardi", + "welcome.dismiss": "Ignora", + "welcome.gettingStarted": "Come iniziare", + "welcome.gettingStarted.description": "Scopri le basi per iniziare a usare l'applicazione", + "welcome.newToApplication": "Nuovo? Inizia da qui", + "welcome.newToApplication.description": "Segui il tour guidato per conoscere le funzionalità principali", + "welcome.moreActions": "Altre azioni", + "welcome.moreActions.description": "Esplora altre azioni disponibili", + "welcome.showOnStartup": "Mostra all'avvio", + "welcome.showOnStartup.description": "Mostra la schermata di benvenuto all'avvio", + "welcome.customize": "Personalizza", + "welcome.customize.description": "Personalizza l'aspetto e le impostazioni", + "welcome.interfaceOverview": "Panoramica interfaccia", + "welcome.interfaceOverview.description": "Esplora i componenti dell'interfaccia", + "welcome.shortcutsOverview": "Scorciatoie principali", + "welcome.shortcutsOverview.description": "Scopri le scorciatoie da tastiera più utili", + "welcome.tipsAndTricks": "Suggerimenti", + "welcome.tipsAndTricks.description": "Consigli e trucchi per essere più produttivo", + "welcome.keyboardShortcuts": "Scorciatoie da tastiera", + "welcome.keyboardShortcuts.description": "Personalizza le scorciatoie da tastiera", + "welcome.colorTheme": "Tema colore", + "welcome.colorTheme.description": "Scegli il tema dei colori", + "welcome.settings": "Impostazioni", + "welcome.settings.description": "Configura l'applicazione", + "welcome.extensions": "Estensioni", + "welcome.extensions.description": "Aggiungi funzionalità con le estensioni", + "welcome.language": "Lingua", + "welcome.language.description": "Cambia la lingua dell'interfaccia", + "welcome.telemetry": "Telemetria", + "welcome.telemetry.description": "Configura le impostazioni di telemetria", + "welcome.proxy": "Proxy", + "welcome.proxy.description": "Configura le impostazioni del proxy", + "welcome.about": "Informazioni", + "welcome.about.description": "Informazioni sull'applicazione", + "welcome.credits": "Crediti", + "welcome.credits.description": "Ringraziamenti e crediti", + "welcome.licenses": "Licenze", + "welcome.licenses.description": "Informazioni sulle licenze dei componenti utilizzati", + "welcome.thirdPartyLicenses": "Licenze di terze parti", + "welcome.thirdPartyLicenses.description": "Visualizza le licenze dei componenti di terze parti", + "welcome.termsOfService": "Termini di servizio", + "welcome.termsOfService.description": "Leggi i termini di servizio", + "welcome.privacyPolicy": "Informativa privacy", + "welcome.privacyPolicy.description": "Leggi l'informativa sulla privacy" +} diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 6dd404169495..131a6840773a 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -367,6 +367,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "言語", "toast.language.description": "{{language}}に切り替えました", "toast.theme.title": "テーマが切り替わりました", @@ -531,6 +532,8 @@ export const dict = { "common.learnMore": "詳細", "common.rename": "名前変更", "common.reset": "リセット", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "アーカイブ", "common.delete": "削除", "common.close": "閉じる", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 9038af615685..5deafaa5d4db 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -366,6 +366,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", "toast.theme.title": "테마 전환됨", @@ -528,6 +529,8 @@ export const dict = { "common.learnMore": "더 알아보기", "common.rename": "이름 바꾸기", "common.reset": "초기화", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "보관", "common.delete": "삭제", "common.close": "닫기", diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts index f0fa26b58e63..783dfcb60b1b 100644 --- a/packages/app/src/i18n/no.ts +++ b/packages/app/src/i18n/no.ts @@ -403,6 +403,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Språk", "toast.language.description": "Byttet til {{language}}", @@ -597,6 +598,8 @@ export const dict = { "common.learnMore": "Lær mer", "common.rename": "Gi nytt navn", "common.reset": "Tilbakestill", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Arkiver", "common.delete": "Slett", "common.close": "Lukk", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index cc7689ef14cb..6374122fcc4a 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -368,6 +368,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Język", "toast.language.description": "Przełączono na {{language}}", "toast.theme.title": "Przełączono motyw", @@ -532,6 +533,8 @@ export const dict = { "common.learnMore": "Dowiedz się więcej", "common.rename": "Zmień nazwę", "common.reset": "Resetuj", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Archiwizuj", "common.delete": "Usuń", "common.close": "Zamknij", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index 6f20d73ecbfb..e87ed20fcbc4 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -402,6 +402,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Язык", "toast.language.description": "Переключено на {{language}}", @@ -594,6 +595,8 @@ export const dict = { "common.learnMore": "Подробнее", "common.rename": "Переименовать", "common.reset": "Сбросить", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Архивировать", "common.delete": "Удалить", "common.close": "Закрыть", diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts index b978c6ea040b..c605f9e9efdc 100644 --- a/packages/app/src/i18n/th.ts +++ b/packages/app/src/i18n/th.ts @@ -400,6 +400,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "ภาษา", "toast.language.description": "สลับไปที่ {{language}}", @@ -588,6 +589,8 @@ export const dict = { "common.learnMore": "เรียนรู้เพิ่มเติม", "common.rename": "เปลี่ยนชื่อ", "common.reset": "รีเซ็ต", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "จัดเก็บ", "common.delete": "ลบ", "common.close": "ปิด", diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts index e0a55845540a..d9b4921443e4 100644 --- a/packages/app/src/i18n/tr.ts +++ b/packages/app/src/i18n/tr.ts @@ -405,6 +405,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "Dil", "toast.language.description": "{{language}} diline geçildi", @@ -600,6 +601,8 @@ export const dict = { "common.learnMore": "Daha fazla bilgi", "common.rename": "Yeniden adlandır", "common.reset": "Sıfırla", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "Arşivle", "common.delete": "Sil", "common.close": "Kapat", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 787f2b622728..6160e3c5024b 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -415,6 +415,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", @@ -587,6 +588,8 @@ export const dict = { "common.learnMore": "了解更多", "common.rename": "重命名", "common.reset": "重置", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "归档", "common.delete": "删除", "common.close": "关闭", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index a5747bea0290..6b8de2bd39bf 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -399,6 +399,7 @@ export const dict = { "language.bs": "Bosanski", "language.th": "ไทย", "language.tr": "Türkçe", + "language.it": "Italian", "toast.language.title": "語言", "toast.language.description": "已切換到 {{language}}", @@ -584,6 +585,8 @@ export const dict = { "common.learnMore": "深入了解", "common.rename": "重新命名", "common.reset": "重設", + "common.pin": "Pin", + "common.unpin": "Unpin", "common.archive": "封存", "common.delete": "刪除", "common.close": "關閉", diff --git a/packages/app/src/pages/layout/sidebar-items.tsx b/packages/app/src/pages/layout/sidebar-items.tsx index 77d9a03d9de2..407c05582c42 100644 --- a/packages/app/src/pages/layout/sidebar-items.tsx +++ b/packages/app/src/pages/layout/sidebar-items.tsx @@ -1,13 +1,15 @@ import type { Session } from "@opencode-ai/sdk/v2/client" import { Avatar } from "@opencode-ai/ui/avatar" +import { ContextMenu } from "@opencode-ai/ui/context-menu" import { Icon } from "@opencode-ai/ui/icon" import { IconButton } from "@opencode-ai/ui/icon-button" import { Spinner } from "@opencode-ai/ui/spinner" import { Tooltip } from "@opencode-ai/ui/tooltip" import { getFilename } from "@opencode-ai/core/util/path" import { A, useParams } from "@solidjs/router" -import { type Accessor, createMemo, For, type JSX, Match, Show, Switch } from "solid-js" +import { createMemo, createSignal, For, onCleanup, onMount, type Accessor, type JSX, Match, Show, Switch } from "solid-js" import { useGlobalSync } from "@/context/global-sync" +import { useGlobalSDK } from "@/context/global-sdk" import { useLanguage } from "@/context/language" import { getAvatarColors, type LocalProject, useLayout } from "@/context/layout" import { useNotification } from "@/context/notification" @@ -16,6 +18,7 @@ import { messageAgentColor } from "@/utils/agent" import { sessionTitle } from "@/utils/session-title" import { sessionPermissionRequest } from "../session/composer/session-request-tree" import { childSessionOnPath, hasProjectPermissions } from "./helpers" +import { isPinned, togglePin } from "@/context/pin-store" const OPENCODE_PROJECT_ID = "4b0ea68d7af9a6031a7ffda7ad66e0cb83315750" @@ -93,6 +96,7 @@ export type SessionItemProps = { clearHoverProjectSoon: () => void prefetchSession: (session: Session, priority?: "high" | "low") => void archiveSession: (session: Session) => Promise + onRename?: (session: Session) => void } const SessionRow = (props: { @@ -109,43 +113,117 @@ const SessionRow = (props: { sidebarOpened: Accessor warmPress: () => void warmFocus: () => void + isPinned: Accessor + onTogglePin: () => void + onRename: () => void }): JSX.Element => { + const language = useLanguage() const title = () => sessionTitle(props.session.title) + const [hasSelection, setHasSelection] = createSignal(false) + + onMount(() => { + const handler = () => { + const sel = window.getSelection() + setHasSelection(!!sel && !sel.isCollapsed) + } + document.addEventListener("selectionchange", handler) + onCleanup(() => document.removeEventListener("selectionchange", handler)) + }) + + const onSelectAll = () => { + const el = document.querySelector(`[data-session-id="${props.session.id}"] [data-title]`) as HTMLElement | null + if (!el) return + setTimeout(() => { + const range = document.createRange() + range.selectNodeContents(el) + const sel = window.getSelection() + if (sel) { + sel.removeAllRanges() + sel.addRange(range) + setHasSelection(true) + } + el.focus({ preventScroll: true }) + }, 50) + } + + const onCopy = () => { + const sel = window.getSelection() + const text = sel?.toString() + if (text) navigator.clipboard.writeText(text) + else navigator.clipboard.writeText(title() ?? "") + } + + const onCopyUrl = () => { + const url = `${window.location.origin}/${props.slug}/session/${props.session.id}` + navigator.clipboard.writeText(url) + } return ( - { - if (props.sidebarOpened()) return - props.clearHoverProjectSoon() - }} - > - 0}> -
+ + { + if (props.sidebarOpened()) return + props.clearHoverProjectSoon() + }} + onContextMenu={(e) => e.preventDefault()} > - - - - - -
- - -
- - 0}> -
- - -
- - {title()} -
+ 0}> +
+ + + + + +
+ + +
+ + 0}> +
+ + +
+ + + + + {title()} + + + + + + {language.t("common.selectAll")} + + + + {language.t("common.copy")} + + + + {language.t("common.copyUrl")} + + + + {language.t("common.rename")} + + + + {props.isPinned() ? language.t("common.unpin") : language.t("common.pin")} + + + + + ) } @@ -156,6 +234,19 @@ export const SessionItem = (props: SessionItemProps): JSX.Element => { const notification = useNotification() const permission = usePermission() const globalSync = useGlobalSync() + const globalSDK = useGlobalSDK() + const sessionIsPinned = createMemo(() => isPinned(props.session.id)) + const onTogglePin = () => togglePin(props.session.id) + const onRename = async () => { + const newTitle = window.prompt(language.t("common.rename"), sessionTitle(props.session.title)) + if (newTitle && newTitle !== props.session.title) { + await globalSDK.client.session.update({ + directory: props.session.directory, + sessionID: props.session.id, + title: newTitle, + }) + } + } const unseenCount = createMemo(() => notification.session.unseenCount(props.session.id)) const hasError = createMemo(() => notification.session.unseenHasError(props.session.id)) const [sessionStore] = globalSync.child(props.session.directory) @@ -178,13 +269,13 @@ export const SessionItem = (props: SessionItemProps): JSX.Element => { const warm = (span: number, priority: "high" | "low") => { const nav = props.navList?.() - const list = nav?.some((item) => item.id === props.session.id && item.directory === props.session.directory) + const list = nav?.some((item: Session) => item.id === props.session.id && item.directory === props.session.directory) ? nav : props.list props.prefetchSession(props.session, priority) - const idx = list.findIndex((item) => item.id === props.session.id && item.directory === props.session.directory) + const idx = list.findIndex((item: Session) => item.id === props.session.id && item.directory === props.session.directory) if (idx === -1) return for (let step = 1; step <= span; step++) { @@ -211,6 +302,9 @@ export const SessionItem = (props: SessionItemProps): JSX.Element => { sidebarOpened={layout.sidebar.opened} warmPress={() => warm(2, "high")} warmFocus={() => warm(2, "high")} + isPinned={sessionIsPinned} + onTogglePin={onTogglePin} + onRename={onRename} /> ) diff --git a/packages/app/src/pages/layout/sidebar-workspace.tsx b/packages/app/src/pages/layout/sidebar-workspace.tsx index f423c13d1e7a..acff1753af29 100644 --- a/packages/app/src/pages/layout/sidebar-workspace.tsx +++ b/packages/app/src/pages/layout/sidebar-workspace.tsx @@ -18,6 +18,7 @@ import { useGlobalSync, useQueryOptions } from "@/context/global-sync" import { useLanguage } from "@/context/language" import { pathKey } from "@/utils/path-key" import { NewSessionItem, SessionItem, SessionSkeleton } from "./sidebar-items" +import { sortByPinned } from "@/context/pin-store" import { sortedRootSessions } from "./helpers" import { useIsFetching } from "@tanstack/solid-query" @@ -256,11 +257,11 @@ const WorkspaceSessionList = (props: { - + {(session) => ( `, models: ``, "arrow-undo-down": ``, + pin: ``, } const spriteID = "opencode-icon-sprite" diff --git a/packages/ui/src/i18n/it.ts b/packages/ui/src/i18n/it.ts new file mode 100644 index 000000000000..b547f946f238 --- /dev/null +++ b/packages/ui/src/i18n/it.ts @@ -0,0 +1,132 @@ +import type { dict as en } from "./en" + +export const dict: Record = { + "common.cancel": "Annulla", + "common.confirm": "Conferma", + "common.ok": "OK", + "common.save": "Salva", + "common.continue": "Continua", + "common.skip": "Salta", + "common.goBack": "Indietro", + "common.next": "Avanti", + "common.done": "Fatto", + "common.retry": "Riprova", + "common.yes": "Sì", + "common.no": "No", + "common.learnMore": "Scopri di più", + "common.rename": "Rinomina", + "common.reset": "Ripristina", + "common.archive": "Archivia", + "common.delete": "Elimina", + "common.close": "Chiudi", + "common.edit": "Modifica", + "common.loadMore": "Carica altro", + "common.key.esc": "ESC", + "common.key.ctrl": "Ctrl", + "common.key.alt": "Alt", + "common.key.shift": "Maiusc", + "common.key.meta": "⌘", + "common.key.space": "Spazio", + "common.key.backspace": "Backspace", + "common.key.enter": "Invio", + "common.key.tab": "Tab", + "common.key.delete": "Canc", + "common.key.home": "Home", + "common.key.end": "Fine", + "common.key.up": "↑", + "common.key.down": "↓", + "common.key.left": "←", + "common.key.right": "→", + "common.key.pageUp": "Pag↑", + "common.key.pageDown": "Pag↓", + "common.key.mod": "Ctrl", + "common.key.modShift": "Ctrl+Maiusc", + "common.access": "Accesso", + "common.loading": "Caricamento…", + "common.error": "Errore", + "common.unknown": "Sconosciuto", + "common.optional": "Opzionale", + "common.required": "Obbligatorio", + "common.invalid": "Non valido", + "common.success": "Operazione completata", + "common.warning": "Attenzione", + "common.info": "Informazioni", + "common.copy": "Copia", + "common.copied": "Copiato!", + "common.paste": "Incolla", + "common.cut": "Taglia", + "common.undo": "Annulla", + "common.redo": "Ripristina", + "common.open": "Apri", + "common.hide": "Nascondi", + "common.show": "Mostra", + "common.enable": "Abilita", + "common.disable": "Disabilita", + "common.on": "Attivo", + "common.off": "Disattivo", + "common.auto": "Auto", + "common.manual": "Manuale", + "common.all": "Tutti", + "common.none": "Nessuno", + "common.some": "Alcuni", + "common.more": "Altro", + "common.less": "Meno", + "common.help": "Aiuto", + "common.settings": "Impostazioni", + "common.preferences": "Preferenze", + "common.configure": "Configura", + "common.download": "Scarica", + "common.upload": "Carica", + "common.install": "Installa", + "common.uninstall": "Disinstalla", + "common.add": "Aggiungi", + "common.create": "Crea", + "common.remove": "Rimuovi", + "common.update": "Aggiorna", + "common.replace": "Sostituisci", + "common.merge": "Unisci", + "common.split": "Dividi", + "common.move": "Sposta", + "common.duplicate": "Duplica", + "common.link": "Collega", + "common.unlink": "Scollega", + "common.lock": "Blocca", + "common.unlock": "Sblocca", + "common.block": "Blocca", + "common.unblock": "Sblocca", + "common.mute": "Silenzia", + "common.unmute": "Riattiva audio", + "common.favorite": "Preferito", + "common.unfavorite": "Rimuovi preferito", + "common.export": "Esporta", + "common.import": "Importa", + "common.share": "Condividi", + "common.print": "Stampa", + "common.preview": "Anteprima", + "common.refresh": "Aggiorna", + "common.sync": "Sincronizza", + "common.syncing": "Sincronizzazione…", + "common.synced": "Sincronizzato", + "common.stop": "Ferma", + "common.start": "Avvia", + "common.pause": "Pausa", + "common.play": "Riproduci", + "common.record": "Registra", + "common.recording": "Registrazione…", + "common.closeTab": "Chiudi scheda", + "common.dismiss": "Ignora", + "common.moreCountSuffix": " (+{{count}} altre)", + "common.requestFailed": "Richiesta fallita", + "common.moreOptions": "Altre opzioni", + "common.search": "Cerca…", + "common.filter": "Filtra…", + "common.sort": "Ordina", + "common.clear": "Pulisci", + "common.selectAll": "Seleziona tutto", + "common.deselectAll": "Deseleziona tutto", + "common.pin": "Fissa", + "common.unpin": "Rimuovi", + "ui.permission.deny": "Nega", + "ui.permission.allowAlways": "Consenti sempre", + "ui.permission.allowOnce": "Consenti una volta", +} diff --git a/packages/web/package.json b/packages/web/package.json index e6db9d4b0da0..49ae5f1cbfc8 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.15.2", + "version": "1.15.3", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 459ac51e1055..05ed4ab3b8ae 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.15.2", + "version": "1.15.3", "publisher": "sst-dev", "repository": { "type": "git",