diff --git a/ui/goose2/src/features/extensions/ui/ExtensionsSettings.tsx b/ui/goose2/src/features/extensions/ui/ExtensionsSettings.tsx index cb88e7fe..30de2308 100644 --- a/ui/goose2/src/features/extensions/ui/ExtensionsSettings.tsx +++ b/ui/goose2/src/features/extensions/ui/ExtensionsSettings.tsx @@ -143,7 +143,6 @@ export function ExtensionsSettings() { return ( +
+ {label} + + {value} + +
+ ); +} + +export function AboutSettings() { + const { t } = useTranslation("settings"); + const [appInfo, setAppInfo] = useState(null); + + useEffect(() => { + let cancelled = false; + + async function loadAppInfo() { + if (!window.__TAURI_INTERNALS__) { + return; + } + + try { + const { getIdentifier, getName, getTauriVersion, getVersion } = + await import("@tauri-apps/api/app"); + const [name, version, tauriVersion, identifier] = await Promise.all([ + getName(), + getVersion(), + getTauriVersion(), + getIdentifier(), + ]); + + if (!cancelled) { + setAppInfo({ name, version, tauriVersion, identifier }); + } + } catch { + if (!cancelled) { + setAppInfo(null); + } + } + } + + void loadAppInfo(); + + return () => { + cancelled = true; + }; + }, []); + + const fallback = t("about.unavailable"); + + return ( + +
+
+ + + + + + +
+
+
); } diff --git a/ui/goose2/src/features/settings/ui/ChatsSettings.tsx b/ui/goose2/src/features/settings/ui/ChatsSettings.tsx index adddf036..393f248e 100644 --- a/ui/goose2/src/features/settings/ui/ChatsSettings.tsx +++ b/ui/goose2/src/features/settings/ui/ChatsSettings.tsx @@ -24,7 +24,7 @@ export function ChatsSettings() { } return ( - +

{t("chats.sectionTitle")}

{!loadingArchivedChats && archivedChats.length === 0 ? ( diff --git a/ui/goose2/src/features/settings/ui/CompactionSettings.tsx b/ui/goose2/src/features/settings/ui/CompactionSettings.tsx index 0bb42722..f2416139 100644 --- a/ui/goose2/src/features/settings/ui/CompactionSettings.tsx +++ b/ui/goose2/src/features/settings/ui/CompactionSettings.tsx @@ -9,10 +9,7 @@ export function CompactionSettings() { const icon = getProviderIcon("goose", "size-6"); return ( - +
diff --git a/ui/goose2/src/features/settings/ui/DoctorSettings.tsx b/ui/goose2/src/features/settings/ui/DoctorSettings.tsx index 73cfbe63..f288abc0 100644 --- a/ui/goose2/src/features/settings/ui/DoctorSettings.tsx +++ b/ui/goose2/src/features/settings/ui/DoctorSettings.tsx @@ -103,7 +103,6 @@ export function DoctorSettings() { variant="outline" size="xxs" onClick={copyDebugInfo} - className="text-muted-foreground hover:text-foreground" > {copied ? ( @@ -120,7 +119,6 @@ export function DoctorSettings() { variant="outline" size="xxs" onClick={runChecksAndRefresh} - className="text-muted-foreground hover:text-foreground" > {t("doctor.rerun")} diff --git a/ui/goose2/src/features/settings/ui/GeneralSettings.tsx b/ui/goose2/src/features/settings/ui/GeneralSettings.tsx index 6d0ed437..a3515813 100644 --- a/ui/goose2/src/features/settings/ui/GeneralSettings.tsx +++ b/ui/goose2/src/features/settings/ui/GeneralSettings.tsx @@ -36,10 +36,7 @@ export function GeneralSettings() { const { preference, setLocalePreference, systemLocaleLabel } = useLocale(); return ( - + -
-

+

+

{t(`${translationKeyPrefix}.label`)}

-

- {t(`${translationKeyPrefix}.description`)} -

+
+ {isSavingThreshold ? ( + + ) : null} + {autoCompactValueLabel} +
-
- - {t(`${translationKeyPrefix}.current`)} - -
- {isSavingThreshold ? ( - - ) : null} - - {autoCompactValueLabel} - -
-
- - +

{t("projects.sectionTitle")} diff --git a/ui/goose2/src/features/settings/ui/VoiceInputSettings.tsx b/ui/goose2/src/features/settings/ui/VoiceInputSettings.tsx index 7c449f67..86be45d5 100644 --- a/ui/goose2/src/features/settings/ui/VoiceInputSettings.tsx +++ b/ui/goose2/src/features/settings/ui/VoiceInputSettings.tsx @@ -222,10 +222,7 @@ export function VoiceInputSettings() { if (loading) { return ( - +

{t("common:labels.loading")}

@@ -236,7 +233,6 @@ export function VoiceInputSettings() { return (
diff --git a/ui/goose2/src/features/settings/ui/__tests__/GooseAutoCompactSettings.test.tsx b/ui/goose2/src/features/settings/ui/__tests__/GooseAutoCompactSettings.test.tsx index 4a568064..ec22cd54 100644 --- a/ui/goose2/src/features/settings/ui/__tests__/GooseAutoCompactSettings.test.tsx +++ b/ui/goose2/src/features/settings/ui/__tests__/GooseAutoCompactSettings.test.tsx @@ -41,7 +41,7 @@ describe("GooseAutoCompactSettings", () => { render(); const slider = screen.getByRole("slider", { - name: /auto-compact context/i, + name: /auto-compact threshold/i, }); slider.focus(); await user.keyboard("{ArrowRight}"); @@ -62,7 +62,7 @@ describe("GooseAutoCompactSettings", () => { render(); const slider = screen.getByRole("slider", { - name: /auto-compact context/i, + name: /auto-compact threshold/i, }); expect(screen.getByText("Off")).toBeInTheDocument(); diff --git a/ui/goose2/src/shared/i18n/locales/en/settings.json b/ui/goose2/src/shared/i18n/locales/en/settings.json index 9a5ec35a..f8f9ef1d 100644 --- a/ui/goose2/src/shared/i18n/locales/en/settings.json +++ b/ui/goose2/src/shared/i18n/locales/en/settings.json @@ -1,6 +1,18 @@ { "about": { - "description": "View app version, build info, and licenses.", + "buildModes": { + "development": "Development", + "production": "Production" + }, + "fields": { + "buildMode": "Build mode", + "identifier": "App identifier", + "license": "License", + "name": "App name", + "tauriVersion": "Tauri version", + "version": "App version" + }, + "unavailable": "Not available", "title": "About" }, "appearance": { @@ -39,7 +51,6 @@ "title": "Appearance" }, "chats": { - "description": "View and restore your archived chats.", "empty": "No archived chats.", "messageCount_one": "{{displayCount}} message", "messageCount_other": "{{displayCount}} messages", @@ -51,19 +62,16 @@ } }, "compaction": { - "description": "Manage how Goose trims older context in long-running chats.", "goose": { "autoCompact": { - "current": "Threshold", - "description": "Choose when Goose should compact older context before replying. This applies to all Goose chats.", "helper": "Set to 100% to turn auto-compaction off.", - "label": "Auto-compact context", + "label": "Auto-compact threshold", "loading": "Loading...", "off": "Off", "saveError": "Failed to save auto-compaction setting." }, "builtIn": "Built in", - "description": "Goose-specific context controls for long-running chats.", + "description": "Choose when the Goose agent compacts older context during sessions. This applies to all goose chats.", "label": "Goose (Agent)" }, "title": "Compaction" @@ -74,7 +82,6 @@ }, "extensions": { "title": "Extensions", - "description": "Manage MCP extensions that add tools and capabilities to Goose.", "search": "Search extensions...", "enabled": "Enabled", "enabledCount": "Enabled ({{count}})", @@ -82,7 +89,7 @@ "availableCount": "Available ({{count}})", "empty": "No extensions configured.", "noResults": "No extensions match your search.", - "addExtension": "Add Extension", + "addExtension": "Add extension", "editExtension": "Edit Extension", "deleteExtension": "Delete Extension", "toggle": "Toggle {{name}}", @@ -133,7 +140,6 @@ "tools": "Tools" }, "general": { - "description": "Manage language and other app preferences.", "language": { "description": "Choose how Goose formats and displays the interface.", "english": "English", @@ -143,8 +149,7 @@ }, "title": "General", "voiceInput": { - "label": "Voice Input", - "description": "Configure voice dictation for hands-free input.", + "label": "Voice input", "providerLabel": "Transcription Provider", "disabled": "Disabled", "notConfiguredSuffix": "(not configured)", @@ -198,7 +203,6 @@ "voice": "Voice" }, "projects": { - "description": "Manage your projects.", "empty": "No archived projects.", "sectionTitle": "Archived projects", "title": "Projects" diff --git a/ui/goose2/src/shared/i18n/locales/es/settings.json b/ui/goose2/src/shared/i18n/locales/es/settings.json index 2ef8fe56..249a0d68 100644 --- a/ui/goose2/src/shared/i18n/locales/es/settings.json +++ b/ui/goose2/src/shared/i18n/locales/es/settings.json @@ -1,6 +1,18 @@ { "about": { - "description": "La información de Goose aparecerá aquí.", + "buildModes": { + "development": "Desarrollo", + "production": "Producción" + }, + "fields": { + "buildMode": "Modo de compilación", + "identifier": "Identificador de la app", + "license": "Licencia", + "name": "Nombre de la app", + "tauriVersion": "Versión de Tauri", + "version": "Versión de la app" + }, + "unavailable": "No disponible", "title": "Acerca de" }, "appearance": { @@ -39,7 +51,6 @@ "title": "Apariencia" }, "chats": { - "description": "Restaura chats archivados.", "empty": "No hay chats archivados.", "messageCount_one": "{{displayCount}} mensaje", "messageCount_other": "{{displayCount}} mensajes", @@ -51,19 +62,16 @@ } }, "compaction": { - "description": "Administra cómo Goose compacta el contexto anterior en chats largos.", "goose": { "autoCompact": { - "current": "Umbral", - "description": "Elige cuándo Goose debe compactar el contexto anterior antes de responder. Esto se aplica a todos los chats de Goose.", "helper": "Ajústalo al 100% para desactivar la compactación automática.", - "label": "Compactación automática del contexto", + "label": "Umbral de compactación automática", "loading": "Cargando...", "off": "Desactivado", "saveError": "No se pudo guardar la configuración de compactación automática." }, "builtIn": "Integrado", - "description": "Controles de contexto específicos de Goose para chats largos.", + "description": "Elige cuándo el agente Goose compacta el contexto anterior durante las sesiones. Esto se aplica a todos los chats de Goose.", "label": "Goose (Agente)" }, "title": "Compactación" @@ -74,7 +82,6 @@ }, "extensions": { "title": "Extensiones", - "description": "Administra las extensiones MCP que agregan herramientas y capacidades a Goose.", "search": "Buscar extensiones...", "enabled": "Habilitadas", "enabledCount": "Habilitadas ({{count}})", @@ -133,7 +140,6 @@ "tools": "Herramientas" }, "general": { - "description": "Administra el idioma y otras preferencias de la app.", "language": { "description": "Elige cómo Goose formatea y muestra la interfaz.", "english": "Inglés", @@ -144,7 +150,6 @@ "title": "General", "voiceInput": { "label": "Entrada de voz", - "description": "Configura el dictado por voz para entrada manos libres.", "providerLabel": "Proveedor de transcripción", "disabled": "Desactivado", "notConfiguredSuffix": "(no configurado)", @@ -198,7 +203,6 @@ "voice": "Voz" }, "projects": { - "description": "Administra tus proyectos.", "empty": "No hay proyectos archivados.", "sectionTitle": "Proyectos archivados", "title": "Proyectos"