From ae4acd34ed0c2f1ebb174fa52d67b8804428481e Mon Sep 17 00:00:00 2001 From: Emre Sokullu Date: Mon, 19 Oct 2026 19:45:27 +0300 Subject: [PATCH 1/6] Split Settings into Settings, Providers and Permissions pages Settings is now three pages that share one controller (settings.js) and one stylesheet (settings.css, moved out of the inline + @@ -1551,9 +16,13 @@

-

+

+ + + + @@ -1566,29 +35,24 @@

- - - + -
-
- - -
-
-
-
-
- -
+ + + +
+

+
@@ -1600,20 +64,6 @@

-
-
-
-
-
- -
-
- - 100% - - -
-
@@ -1682,22 +132,6 @@

-
-
-
50
-
-
- -
-
-
-
120s
-
-
- -
@@ -1710,6 +144,32 @@

+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+

+
- -
-
- -
-
- -
-

- - -

-
-
-
- -
-
- - IN-BROWSER -
-
-
- - -
-
-
-
-
-
-
- - -
-
- - -
-
- - -
-
- -
-
-
- - -
-
-
- -

-
-
- -
- - -
-
- -
- - -
-
- -
- - + + -
- -
-
- -

-
-
+
-
-
+
50
+
- -
-
-
- -

- - -

-
-
-
- - -
-
- - -
-
- - -
-
- - - -
-
-
- -

- - -

-
-
-
- - -
-
- - -
-
- - -
- - - -
- - -
-
- - - +
-
-
- -

- - -

-
-

- -
- -
- - - -
-
-

- - - -

- - -
@@ -2756,24 +480,195 @@

-
-
-
-
-
-
-
- -
- +
+

+
+
+

+

+ +
+
+

CapSolver

+ +
+

+

+
+ + +
+
+ + + +
+
+
+ +
+ + +
+
+
-
-
-
@@ -2838,6 +733,226 @@

+
+

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
Notification sounds
+
Play a distinct sound for plans awaiting review and a short chime for completion or clarification. No sound when you cancel a run.
+
+ +
+
+
+
+
+
+ +
+
+
+
Flash tabs for alerts
+
Blink a background tab’s title and icon when a plan is ready for review or a task finishes. Plans use a ⚠️ icon.
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+ @@ -2845,6 +960,5 @@

- diff --git a/src/chrome/src/ui/settings.js b/src/chrome/src/ui/settings.js index f762a33d88..b8357e15a8 100644 --- a/src/chrome/src/ui/settings.js +++ b/src/chrome/src/ui/settings.js @@ -3,21 +3,18 @@ import { normalizeLeanModeSetting } from '../agent/lean-mode.js'; import { D1_MODEL_ID } from '../providers/d1-config.js'; import { initD1Settings } from './d1-settings.js'; /** - * WebBrain Settings Page — provider configuration + display settings. + * WebBrain Settings pages — settings.html (preferences, budgets, memory, + * skills, CAPTCHA, Bridge, advanced), providers.html (the chat provider and + * the assistive models) and permissions.html (site permissions). + * + * One controller serves all three pages: each section below wires itself up + * only when its markup is on the current page. */ -import { t, getLocale, setLocale, LANGUAGES } from './i18n.js'; +import { t } from './i18n.js'; import { escapeHtml } from './utils.js'; import { MEDIA_PROVIDERS, mediaProvider, validateMediaConfig } from '../agent/media-config.js'; import { THEME_MODES, applyMode, loadMode, watch } from './theme.js'; -import { - UI_SCALE_LEVELS, - UI_SCALE_STORAGE_KEY, - loadUiScale, - nextUiScale, - normalizeUiScale, - saveUiScale, -} from './ui-scale.js'; import { renderSkillMarkdown } from './skill-markdown.js'; import { CAPABILITY_LABEL } from '../agent/permission-gate.js'; import { @@ -106,10 +103,8 @@ const SUBSCRIPTION_GUIDE_PRODUCTS = Object.freeze({ const EXT_VERSION = '42.0.6'; const providersContainer = document.getElementById('providers'); -const displaySettings = document.getElementById('display-settings'); const generalSearchInput = document.getElementById('input-general-search'); const generalSearchEmpty = document.getElementById('general-search-empty'); -const advancedSettings = document.querySelector('.advanced-settings'); const apocalypseModeLink = document.getElementById('apocalypse-mode-link'); const apocalypseModeStatus = document.getElementById('apocalypse-mode-status'); const verboseToggle = document.getElementById('toggle-verbose'); @@ -152,7 +147,6 @@ const completionConfettiToggle = document.getElementById('toggle-completion-conf const completionFlashTabToggle = document.getElementById('toggle-completion-flash-tab'); const tracingToggle = document.getElementById('toggle-tracing'); const feedbackDiagnosticsToggle = document.getElementById('toggle-feedback-diagnostics'); -const losslessTracingToggle = document.getElementById('toggle-lossless-tracing'); const strictSecretToggle = document.getElementById('toggle-strict-secret'); const strictGuardsToggle = document.getElementById('toggle-strict-guards'); const leanModeSelect = document.getElementById('select-lean-mode'); @@ -286,8 +280,19 @@ function activeProviderIsCompass() { const config = providersData?.[activeProviderId]; return !!activeProviderId && (providerDefinitionId(activeProviderId) === 'webbrain_cloud' || config?.providerName === 'webbrain-cloud'); } +// The Strict Secret Mode switch is on settings.html and the decision card on +// providers.html, so the card follows the stored setting, not the switch. +let strictSecretModeOn = false; +if (globalThis.chrome?.storage?.onChanged) { + chrome.storage.onChanged.addListener((changes, area) => { + if (area !== 'local' || !changes.strictSecretMode) return; + strictSecretModeOn = changes.strictSecretMode.newValue === true; + void syncDecisionStatus(); + }); +} let decisionStatusSequence = 0; async function syncDecisionStatus() { + if (!decisionModeInputs.length) return; const mode = selectedDecisionMode(); for (const description of document.querySelectorAll('[data-decision-mode-desc]')) description.hidden = description.dataset.decisionModeDesc !== mode; const configured = document.getElementById('decision-configured'); @@ -301,7 +306,7 @@ async function syncDecisionStatus() { return; } // Strict Secret Mode keeps page content away from every decision model, so Auto has nothing to use. - const strict = strictSecretToggle?.checked === true; + const strict = strictSecretModeOn; const compass = !strict && activeProviderIsCompass(); if (sequence !== decisionStatusSequence || selectedDecisionMode() !== 'auto') return; const key = strict ? 'st.decision.status.strict' : compass ? 'st.decision.status.compass' : 'st.decision.status.none'; @@ -344,14 +349,7 @@ const systemOneBrowserToggle = document.getElementById('toggle-system-one-browse const btnTestSystemOne = document.getElementById('btn-test-system-one'); const btnClearSystemOne = document.getElementById('btn-clear-system-one'); const systemOneTestResult = document.getElementById('test-system-one'); -const languageSelect = document.getElementById('select-language'); const themeSelect = document.getElementById('select-theme'); -const settingsUiScaleDecrease = document.getElementById('settings-ui-scale-decrease'); -const settingsUiScaleValue = document.getElementById('settings-ui-scale-value'); -const settingsUiScaleIncrease = document.getElementById('settings-ui-scale-increase'); -const settingsUiScaleReset = document.getElementById('settings-ui-scale-reset'); -const settingsUiScaleShortcuts = document.getElementById('settings-ui-scale-shortcuts'); -const settingsUiScaleManageShortcuts = document.getElementById('settings-ui-scale-manage-shortcuts'); const downloadDirectoryInput = document.getElementById('input-download-directory'); const subtitleEl = document.getElementById('subtitle'); @@ -359,95 +357,36 @@ const subtitleEl = document.getElementById('subtitle'); // Loaded from chrome.storage.local (canonical) with a localStorage mirror // kept in sync by theme.js — so the FOUC bootstrap in always has the // latest mode on next page open. watch() keeps every open extension page -// (this settings tab + the side panel) in sync if any one of them flips it. +// (the settings pages + the side panel) in sync if any one of them flips it. +// Only settings.html has the picker; the other pages still follow changes. let currentThemeMode = 'system'; -if (themeSelect) { - loadMode().then((mode) => { - currentThemeMode = mode; - themeSelect.value = mode; - applyMode(mode, { syncStorage: false }); // already loaded, just paint - }); - themeSelect.addEventListener('change', async () => { - const mode = THEME_MODES.includes(themeSelect.value) ? themeSelect.value : 'system'; - currentThemeMode = mode; - await applyMode(mode); - }); - watch(() => currentThemeMode); - // If another Settings tab or the side panel flips the theme, watch() - // already re-paints this page — but the closure variable and the select - // value won't update on their own. Without this, the picker drifts out - // of sync and a later OS-theme flip can re-apply the stale 'system'. - if (globalThis.chrome?.storage?.onChanged) { - chrome.storage.onChanged.addListener((changes, area) => { - if (area !== 'local' || !changes.themeMode) return; - const next = changes.themeMode.newValue; - if (!THEME_MODES.includes(next)) return; - currentThemeMode = next; - if (themeSelect.value !== next) themeSelect.value = next; - }); - } -} - -let currentSettingsUiScale = 100; -let settingsUiScaleReady = false; - -function renderSettingsUiScale(value) { - currentSettingsUiScale = normalizeUiScale(value); - settingsUiScaleReady = true; - if (settingsUiScaleValue) settingsUiScaleValue.textContent = `${currentSettingsUiScale}%`; - if (settingsUiScaleDecrease) settingsUiScaleDecrease.disabled = currentSettingsUiScale === UI_SCALE_LEVELS[0]; - if (settingsUiScaleIncrease) settingsUiScaleIncrease.disabled = currentSettingsUiScale === UI_SCALE_LEVELS[UI_SCALE_LEVELS.length - 1]; -} - -// Serialized so each step reads the scale rendered by the step before it: -// holding Enter on a focused +/- button repeats faster than the storage write -// resolves, and an unqueued step would keep re-reading the same stale scale. -let settingsUiScaleWriteQueue = Promise.resolve(); - -function changeSettingsUiScale(action) { - if (!settingsUiScaleReady) return Promise.resolve(); - const write = settingsUiScaleWriteQueue.then(async () => { - const next = nextUiScale(currentSettingsUiScale, action); - await saveUiScale(chrome.storage.local, next); - renderSettingsUiScale(next); - }); - // Keep the chain alive after a rejected write while still handing the - // failure to this caller. - settingsUiScaleWriteQueue = write.catch(() => {}); - return write; -} - -loadUiScale(chrome.storage.local).then(renderSettingsUiScale); -if (settingsUiScaleDecrease) settingsUiScaleDecrease.disabled = true; -if (settingsUiScaleIncrease) settingsUiScaleIncrease.disabled = true; -settingsUiScaleDecrease?.addEventListener('click', () => changeSettingsUiScale('decrease').catch(() => {})); -settingsUiScaleIncrease?.addEventListener('click', () => changeSettingsUiScale('increase').catch(() => {})); -settingsUiScaleReset?.addEventListener('click', () => changeSettingsUiScale('reset').catch(() => {})); -chrome.storage.onChanged.addListener((changes, area) => { - if (area === 'local' && changes[UI_SCALE_STORAGE_KEY]) { - renderSettingsUiScale(changes[UI_SCALE_STORAGE_KEY].newValue); - } +loadMode().then((mode) => { + currentThemeMode = mode; + if (themeSelect) themeSelect.value = mode; + applyMode(mode, { syncStorage: false }); // already loaded, just paint }); - -const UI_SCALE_COMMAND_NAMES = ['decrease-ui-scale', 'increase-ui-scale', 'reset-ui-scale']; - -async function refreshUiScaleShortcuts() { - if (!settingsUiScaleShortcuts) return; - const commands = await chrome.commands.getAll(); - const shortcuts = UI_SCALE_COMMAND_NAMES.map((name) => commands.find((command) => command.name === name)?.shortcut) - .filter(Boolean); - const summary = shortcuts.length ? shortcuts.join(' · ') : t('st.display.ui_scale.shortcuts_none'); - settingsUiScaleShortcuts.textContent = t('st.display.ui_scale.shortcuts', { shortcuts: summary }); -} - -refreshUiScaleShortcuts().catch(() => {}); -window.addEventListener('focus', () => refreshUiScaleShortcuts().catch(() => {})); -settingsUiScaleManageShortcuts?.addEventListener('click', () => { - chrome.tabs.create({ url: 'chrome://extensions/shortcuts' }); +themeSelect?.addEventListener('change', async () => { + const mode = THEME_MODES.includes(themeSelect.value) ? themeSelect.value : 'system'; + currentThemeMode = mode; + await applyMode(mode); }); +watch(() => currentThemeMode); +// If another Settings tab or the side panel flips the theme, watch() +// already re-paints this page — but the closure variable and the select +// value won't update on their own. Without this, the picker drifts out +// of sync and a later OS-theme flip can re-apply the stale 'system'. +if (globalThis.chrome?.storage?.onChanged) { + chrome.storage.onChanged.addListener((changes, area) => { + if (area !== 'local' || !changes.themeMode) return; + const next = changes.themeMode.newValue; + if (!THEME_MODES.includes(next)) return; + currentThemeMode = next; + if (themeSelect && themeSelect.value !== next) themeSelect.value = next; + }); +} function renderSubtitle() { - if (subtitleEl) subtitleEl.textContent = t('st.subtitle', { version: EXT_VERSION }); + if (subtitleEl) subtitleEl.textContent = t(subtitleEl.dataset.subtitleKey || 'st.subtitle', { version: EXT_VERSION }); } renderSubtitle(); @@ -482,65 +421,45 @@ function setGeneralSearchHidden(item, hidden) { item.classList.toggle('general-search-hidden', hidden); } +// The search box covers the tabs marked data-search (General, Budgets, +// CAPTCHA and Advanced). With a query, those tabs show together and keep only +// their matching rows; settings-tabs.js clears the query when a tab is picked. +const searchPanels = Array.from(document.querySelectorAll('.tab-panel[data-search]')); + function filterGeneralSettings() { - if (!displaySettings || !generalSearchInput) return; + if (!generalSearchInput || !searchPanels.length) return; const query = normalizeGeneralSearchText(generalSearchInput.value); - const visibleItems = Array.from(displaySettings.children) - .filter((el) => el.classList?.contains('setting-row')); - const advancedBody = advancedSettings?.querySelector('.advanced-settings-body'); - const advancedItems = advancedBody - ? Array.from(advancedBody.children).filter((el) => el.classList?.contains('setting-row') || el.classList?.contains('provider-card')) - : []; - - let visibleMatches = 0; - let advancedMatches = 0; - visibleItems.forEach((item) => { - const matches = !query || searchTextForGeneralItem(item).includes(query); - setGeneralSearchHidden(item, !!query && !matches); - if (matches) visibleMatches += 1; - }); - advancedItems.forEach((item) => { - const matches = !query || searchTextForGeneralItem(item).includes(query); - setGeneralSearchHidden(item, !!query && !matches); - if (matches) advancedMatches += 1; - }); - - if (advancedSettings) { - setGeneralSearchHidden(advancedSettings, !!query && advancedMatches === 0); - if (query && advancedMatches > 0) advancedSettings.open = true; + document.body.classList.toggle('settings-searching', !!query); + let totalMatches = 0; + for (const panel of searchPanels) { + const scope = panel.querySelector('[data-search-scope]') || panel; + let panelMatches = 0; + for (const item of Array.from(scope.children)) { + const matches = !query || searchTextForGeneralItem(item).includes(query); + setGeneralSearchHidden(item, !!query && !matches); + if (matches) panelMatches += 1; + } + setGeneralSearchHidden(panel, !!query && panelMatches === 0); + totalMatches += panelMatches; } if (generalSearchEmpty) { - generalSearchEmpty.hidden = !query || (visibleMatches + advancedMatches) > 0; + generalSearchEmpty.hidden = !query || totalMatches > 0; } } -if (generalSearchInput) { - generalSearchInput.addEventListener('input', filterGeneralSettings); -} +generalSearchInput?.addEventListener('input', filterGeneralSettings); -if (languageSelect) { - languageSelect.innerHTML = LANGUAGES.map((l) => ``).join(''); - languageSelect.value = getLocale(); - languageSelect.addEventListener('change', async () => { - await setLocale(languageSelect.value); - // Re-render dynamic bits whose text comes from JS. - renderSubtitle(); - refreshUiScaleShortcuts().catch(() => {}); - filterGeneralSettings(); - renderProviders(); - }); - document.addEventListener('wb-locale-changed', () => { - languageSelect.value = getLocale(); - renderSubtitle(); - refreshUiScaleShortcuts().catch(() => {}); - filterGeneralSettings(); - if (providersContainer) renderProviders(); - renderSkills(); - renderPermissions(); - refreshProfileSyncState(); - refreshApocalypseModeStatus(); - }); -} +// The language is chosen in the side panel; i18n.js re-translates the static +// markup, and this re-renders what the script writes itself. +document.addEventListener('wb-locale-changed', () => { + renderSubtitle(); + filterGeneralSettings(); + renderProviders(); + renderSkills(); + renderPermissions(); + if (profileSyncStatus) refreshProfileSyncState(); + refreshApocalypseModeStatus(); +}); globalThis.addEventListener('focus', () => { refreshApocalypseModeStatus(); loadVisionConfig().catch(() => {}); @@ -727,11 +646,12 @@ async function init() { chrome.storage.local.remove(['authToken', 'authEmail', 'authDefaultModel']).catch(() => {}); // Load display settings - const stored = await chrome.storage.local.get([...DECISION_SETTINGS_KEYS, 'verboseMode', 'composerDeliveryMode', 'selectionShortcutEnabled', 'pdfViewerEnabled', AUTO_GROUP_TABS_KEY, 'helpImproveWebBrain', 'newTabEnabled', 'screenshotFallback', 'maxAgentSteps', 'autoScreenshot', 'useSiteAdapters', 'researchEscalationEnabled', 'researchEscalationEngine', 'voiceInputEnabled', 'alwaysAllowApiMutations', 'apiMutationObserverEnabled', 'webMcpEnabled', 'openaiAskStreamingEnabled', 'planBeforeActMode', 'planBeforeAct', 'planReviewMode', 'planReviewConfidenceThreshold', DOWNLOAD_DIRECTORY_STORAGE_KEY, 'notifySound', 'completionConfetti', 'completionFlashTab', 'tracingEnabled', 'feedbackDiagnosticsEnabled', 'losslessTrace', 'strictSecretMode', 'strictGuards', 'leanMode', 'agentAllowLocalNetwork', 'scheduledTasksEnabled', 'scheduledRequireConsequentialConfirmation', 'systemOneEnabled', 'systemOneWatchEnabled', 'systemOneCompletionEnabled', 'systemOneFastClassifications', 'systemOneFastBrowser', 'systemOneWatchThreshold', 'systemOneCompletionThreshold', 'typesafeApiKey', 'providerFilter', 'requestTimeoutMs', 'clarifyTimeoutSec', 'clarifyTimeoutSemanticsV2', 'clarifyTimeoutPolicy', 'costAllowanceSessionUsd', 'costAllowanceTotalUsd', 'meteredProviderCostSpentUsd', 'screenshotRedaction', 'imageDetail', 'maxScreenshotsPerTurn', 'maxImageDimension']); + const stored = await chrome.storage.local.get([...DECISION_SETTINGS_KEYS, 'verboseMode', 'composerDeliveryMode', 'selectionShortcutEnabled', 'pdfViewerEnabled', AUTO_GROUP_TABS_KEY, 'helpImproveWebBrain', 'newTabEnabled', 'screenshotFallback', 'maxAgentSteps', 'autoScreenshot', 'useSiteAdapters', 'researchEscalationEnabled', 'researchEscalationEngine', 'voiceInputEnabled', 'alwaysAllowApiMutations', 'apiMutationObserverEnabled', 'webMcpEnabled', 'openaiAskStreamingEnabled', 'planBeforeActMode', 'planBeforeAct', 'planReviewMode', 'planReviewConfidenceThreshold', DOWNLOAD_DIRECTORY_STORAGE_KEY, 'notifySound', 'completionConfetti', 'completionFlashTab', 'tracingEnabled', 'feedbackDiagnosticsEnabled', 'strictSecretMode', 'strictGuards', 'leanMode', 'agentAllowLocalNetwork', 'scheduledTasksEnabled', 'scheduledRequireConsequentialConfirmation', 'systemOneEnabled', 'systemOneWatchEnabled', 'systemOneCompletionEnabled', 'systemOneFastClassifications', 'systemOneFastBrowser', 'systemOneWatchThreshold', 'systemOneCompletionThreshold', 'typesafeApiKey', 'providerFilter', 'requestTimeoutMs', 'clarifyTimeoutSec', 'clarifyTimeoutSemanticsV2', 'clarifyTimeoutPolicy', 'costAllowanceSessionUsd', 'costAllowanceTotalUsd', 'meteredProviderCostSpentUsd', 'screenshotRedaction', 'imageDetail', 'maxScreenshotsPerTurn', 'maxImageDimension']); if (typeof stored.providerFilter === 'string' && ['all','active','local','cloud','router'].includes(stored.providerFilter)) { providerFilter = stored.providerFilter; } - verboseToggle.checked = stored.verboseMode || false; + strictSecretModeOn = stored.strictSecretMode === true; + if (verboseToggle) verboseToggle.checked = stored.verboseMode || false; if (composerDeliveryModeSelect) { composerDeliveryModeSelect.value = stored.composerDeliveryMode === 'steer' ? 'steer' : 'queue'; } @@ -740,13 +660,15 @@ async function init() { if (autoGroupTabsToggle) autoGroupTabsToggle.checked = stored[AUTO_GROUP_TABS_KEY] !== false; if (helpImproveToggle) helpImproveToggle.checked = stored.helpImproveWebBrain !== false; // on by default if (newTabToggle) newTabToggle.checked = stored.newTabEnabled === true; // opt-in: off until chosen - screenshotToggle.checked = stored.screenshotFallback ?? true; // on by default - if (isUnlimitedMaxAgentSteps(stored.maxAgentSteps)) { - maxStepsRange.value = MAX_AGENT_STEPS_UNLIMITED_SENTINEL; - stepsValueLabel.textContent = '∞'; - } else { - maxStepsRange.value = boundedMaxAgentSteps(stored.maxAgentSteps); - stepsValueLabel.textContent = maxStepsRange.value; + if (screenshotToggle) screenshotToggle.checked = stored.screenshotFallback ?? true; // on by default + if (maxStepsRange && stepsValueLabel) { + if (isUnlimitedMaxAgentSteps(stored.maxAgentSteps)) { + maxStepsRange.value = MAX_AGENT_STEPS_UNLIMITED_SENTINEL; + stepsValueLabel.textContent = '∞'; + } else { + maxStepsRange.value = boundedMaxAgentSteps(stored.maxAgentSteps); + stepsValueLabel.textContent = maxStepsRange.value; + } } // requestTimeoutMs is stored in milliseconds, displayed as seconds. // Default 60s when unset. Floor 10s / ceiling 600s matches the slider. @@ -781,15 +703,17 @@ async function init() { if (clarifyTimeoutPolicySelect) { clarifyTimeoutPolicySelect.value = stored.clarifyTimeoutPolicy === 'safe' ? 'safe' : 'finish'; } - autoScreenshotSelect.value = stored.autoScreenshot || 'state_change'; - imageDetailSelect.value = stored.imageDetail || 'auto'; - maxScreenshotsSelect.value = String(stored.maxScreenshotsPerTurn != null ? stored.maxScreenshotsPerTurn : 0); - maxImageDimensionSelect.value = String(stored.maxImageDimension || 1568); - siteAdaptersToggle.checked = stored.useSiteAdapters ?? true; + // On navigation (default) captures after the agent opens a page, not after + // every click or keystroke. + if (autoScreenshotSelect) autoScreenshotSelect.value = stored.autoScreenshot || 'navigation'; + if (imageDetailSelect) imageDetailSelect.value = stored.imageDetail || 'auto'; + if (maxScreenshotsSelect) maxScreenshotsSelect.value = String(stored.maxScreenshotsPerTurn != null ? stored.maxScreenshotsPerTurn : 0); + if (maxImageDimensionSelect) maxImageDimensionSelect.value = String(stored.maxImageDimension || 1568); + if (siteAdaptersToggle) siteAdaptersToggle.checked = stored.useSiteAdapters ?? true; if (researchEscalationToggle) researchEscalationToggle.checked = stored.researchEscalationEnabled === true; if (voiceInputToggle) voiceInputToggle.checked = stored.voiceInputEnabled ?? true; - alwaysAllowApiMutationsToggle.checked = stored.alwaysAllowApiMutations === undefined || stored.alwaysAllowApiMutations === true; - apiMutationObserverToggle.checked = stored.apiMutationObserverEnabled === undefined || stored.apiMutationObserverEnabled === true; + if (alwaysAllowApiMutationsToggle) alwaysAllowApiMutationsToggle.checked = stored.alwaysAllowApiMutations === undefined || stored.alwaysAllowApiMutations === true; + if (apiMutationObserverToggle) apiMutationObserverToggle.checked = stored.apiMutationObserverEnabled === undefined || stored.apiMutationObserverEnabled === true; if (webMcpToggle) webMcpToggle.checked = stored.webMcpEnabled !== false; // on by default if (openAIAskStreamingToggle) openAIAskStreamingToggle.checked = stored.openaiAskStreamingEnabled !== false; if (planBeforeActModeSelect) { @@ -805,15 +729,12 @@ async function init() { if (downloadDirectoryInput) { downloadDirectoryInput.value = normalizeDownloadDirectory(stored[DOWNLOAD_DIRECTORY_STORAGE_KEY]); } - notifySoundToggle.checked = stored.notifySound ?? true; // on by default - completionConfettiToggle.checked = stored.completionConfetti ?? true; // on by default - completionFlashTabToggle.checked = stored.completionFlashTab ?? true; // on by default - tracingToggle.checked = stored.tracingEnabled === true; + if (notifySoundToggle) notifySoundToggle.checked = stored.notifySound ?? true; // on by default + if (completionConfettiToggle) completionConfettiToggle.checked = stored.completionConfetti ?? true; // on by default + if (completionFlashTabToggle) completionFlashTabToggle.checked = stored.completionFlashTab ?? true; // on by default + // One switch records traces with full request details, or neither. + if (tracingToggle) tracingToggle.checked = stored.tracingEnabled === true; if (feedbackDiagnosticsToggle) feedbackDiagnosticsToggle.checked = stored.feedbackDiagnosticsEnabled !== false; - losslessTracingToggle.checked = stored.losslessTrace === true; - // Lossless recording only means something when tracing is on; mirror the - // disabled state so the disclosure reads honestly. - losslessTracingToggle.disabled = tracingToggle.checked !== true; const sessionLimit = normalizeCostAmount(stored.costAllowanceSessionUsd); const totalLimit = normalizeCostAmount(stored.costAllowanceTotalUsd); const totalSpent = normalizeCostAmount(stored.meteredProviderCostSpentUsd, 0); @@ -840,31 +761,33 @@ async function init() { } // The On fields show the configuration On uses: a profile in On as it is // stored, any other with On's defaults. - const storedDecisionMode = resolveDecisionMode(stored); - setDecisionMode(storedDecisionMode); - const decisionConfig = resolveDecisionConfig(storedDecisionMode === 'on' ? stored : { ...stored, [DECISION_MODE_KEY]: 'on' }); - decisionProviderInput.value = previousDecisionProvider = decisionConfig.provider; - decisionModelInput.value = decisionConfig.model; - decisionEndpointInput.value = stored.decisionBaseUrl || 'http://127.0.0.1:8009'; - decisionVisionInput.value = stored.decisionVisionMode || 'auto'; - decisionVisionSupported = stored.decisionVisionSupported === true; - decisionThresholdInput.value = String(decisionConfig.threshold * 100); - await refreshD1Settings(); - syncWebgpuDecisionProvider(); - decisionKeyDrafts.set('typesafe', stored.typesafeApiKey || ''); - decisionKeyDrafts.set('openrouter', stored.decisionApiKey || ''); - decisionKeyDrafts.set('local', stored.decisionLocalApiKey || ''); - document.getElementById('decision-endpoint-field').hidden = decisionConfig.provider !== 'local'; - decisionDoneToggle.checked = decisionConfig.features.done; - if (systemOneWatchToggle) systemOneWatchToggle.checked = decisionConfig.features.watch; - if (systemOneClassificationsToggle) systemOneClassificationsToggle.checked = decisionConfig.features.classifications; - if (systemOneBrowserToggle) systemOneBrowserToggle.checked = decisionConfig.features.browser; - if (systemOneCompletionToggle) systemOneCompletionToggle.checked = decisionConfig.features.completion; - if (systemOneApiKeyInput) systemOneApiKeyInput.value = decisionConfig.apiKey; - if (systemOneWatchThresholdRange) systemOneWatchThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneWatchThreshold) * 100); - if (systemOneCompletionThresholdRange) systemOneCompletionThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneCompletionThreshold) * 100); - void syncDecisionStatus(); - updateSystemOneThresholdLabels(); + if (decisionProviderInput) { + const storedDecisionMode = resolveDecisionMode(stored); + setDecisionMode(storedDecisionMode); + const decisionConfig = resolveDecisionConfig(storedDecisionMode === 'on' ? stored : { ...stored, [DECISION_MODE_KEY]: 'on' }); + decisionProviderInput.value = previousDecisionProvider = decisionConfig.provider; + decisionModelInput.value = decisionConfig.model; + decisionEndpointInput.value = stored.decisionBaseUrl || 'http://127.0.0.1:8009'; + decisionVisionInput.value = stored.decisionVisionMode || 'auto'; + decisionVisionSupported = stored.decisionVisionSupported === true; + decisionThresholdInput.value = String(decisionConfig.threshold * 100); + await refreshD1Settings(); + syncWebgpuDecisionProvider(); + decisionKeyDrafts.set('typesafe', stored.typesafeApiKey || ''); + decisionKeyDrafts.set('openrouter', stored.decisionApiKey || ''); + decisionKeyDrafts.set('local', stored.decisionLocalApiKey || ''); + document.getElementById('decision-endpoint-field').hidden = decisionConfig.provider !== 'local'; + decisionDoneToggle.checked = decisionConfig.features.done; + if (systemOneWatchToggle) systemOneWatchToggle.checked = decisionConfig.features.watch; + if (systemOneClassificationsToggle) systemOneClassificationsToggle.checked = decisionConfig.features.classifications; + if (systemOneBrowserToggle) systemOneBrowserToggle.checked = decisionConfig.features.browser; + if (systemOneCompletionToggle) systemOneCompletionToggle.checked = decisionConfig.features.completion; + if (systemOneApiKeyInput) systemOneApiKeyInput.value = decisionConfig.apiKey; + if (systemOneWatchThresholdRange) systemOneWatchThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneWatchThreshold) * 100); + if (systemOneCompletionThresholdRange) systemOneCompletionThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneCompletionThreshold) * 100); + void syncDecisionStatus(); + updateSystemOneThresholdLabels(); + } // Load vision model config await loadVisionConfig(); @@ -901,11 +824,16 @@ async function init() { await initScreenshotRedactionToggle(); await refreshApocalypseModeStatus(); - // Load providers - const res = await sendToBackground('get_providers'); - providersData = res.providers; - activeProviderId = res.active; - renderProviders(); + // Load providers. The decision card's Auto status reads the active one too. + if (providersContainer || decisionModeInputs.length) { + const res = await sendToBackground('get_providers'); + providersData = res.providers; + activeProviderId = res.active; + renderProviders(); + void syncDecisionStatus(); + } + // Tooling (UI tests, docs screenshots) waits for this before reading the page. + document.documentElement.dataset.settingsReady = 'true'; } // --- Site permissions (capability × origin grants) --- @@ -1423,7 +1351,7 @@ downloadDirectoryInput?.addEventListener('change', async () => { await chrome.storage.local.set({ [DOWNLOAD_DIRECTORY_STORAGE_KEY]: directory }).catch(() => {}); }); -verboseToggle.addEventListener('change', async () => { +verboseToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ verboseMode: verboseToggle.checked }).catch(() => {}); }); @@ -1447,15 +1375,15 @@ helpImproveToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ helpImproveWebBrain: helpImproveToggle.checked }).catch(() => {}); }); -screenshotToggle.addEventListener('change', async () => { +screenshotToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ screenshotFallback: screenshotToggle.checked }).catch(() => {}); }); -maxStepsRange.addEventListener('input', () => { +maxStepsRange?.addEventListener('input', () => { stepsValueLabel.textContent = Number(maxStepsRange.value) === MAX_AGENT_STEPS_UNLIMITED_SENTINEL ? '∞' : maxStepsRange.value; }); -maxStepsRange.addEventListener('change', async () => { +maxStepsRange?.addEventListener('change', async () => { await chrome.storage.local.set({ maxAgentSteps: Number(maxStepsRange.value) === MAX_AGENT_STEPS_UNLIMITED_SENTINEL ? 0 @@ -1501,18 +1429,18 @@ clarifyTimeoutPolicySelect?.addEventListener('change', async () => { await chrome.storage.local.set({ clarifyTimeoutPolicy: policy }).catch(() => {}); }); -autoScreenshotSelect.addEventListener('change', async () => { +autoScreenshotSelect?.addEventListener('change', async () => { await chrome.storage.local.set({ autoScreenshot: autoScreenshotSelect.value }).catch(() => {}); }); -imageDetailSelect.addEventListener('change', async () => { +imageDetailSelect?.addEventListener('change', async () => { const v = imageDetailSelect.value; const imageDetail = (v === 'high' || v === 'low' || v === 'auto') ? v : 'auto'; imageDetailSelect.value = imageDetail; await chrome.storage.local.set({ imageDetail }).catch(() => {}); }); -maxScreenshotsSelect.addEventListener('change', async () => { +maxScreenshotsSelect?.addEventListener('change', async () => { let n = parseInt(maxScreenshotsSelect.value, 10); if (!Number.isFinite(n) || n < 0) n = 0; if (n > 5) n = 5; @@ -1520,7 +1448,7 @@ maxScreenshotsSelect.addEventListener('change', async () => { await chrome.storage.local.set({ maxScreenshotsPerTurn: n }).catch(() => {}); }); -maxImageDimensionSelect.addEventListener('change', async () => { +maxImageDimensionSelect?.addEventListener('change', async () => { let n = parseInt(maxImageDimensionSelect.value, 10); if (!Number.isFinite(n) || n <= 0) n = 1568; n = Math.max(1, Math.min(2048, n)); @@ -1528,7 +1456,7 @@ maxImageDimensionSelect.addEventListener('change', async () => { await chrome.storage.local.set({ maxImageDimension: n }).catch(() => {}); }); -siteAdaptersToggle.addEventListener('change', async () => { +siteAdaptersToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ useSiteAdapters: siteAdaptersToggle.checked }).catch(() => {}); }); @@ -1547,11 +1475,11 @@ if (voiceInputToggle) { }); } -apiMutationObserverToggle.addEventListener('change', async () => { +apiMutationObserverToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ apiMutationObserverEnabled: apiMutationObserverToggle.checked }).catch(() => {}); }); -alwaysAllowApiMutationsToggle.addEventListener('change', async () => { +alwaysAllowApiMutationsToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ alwaysAllowApiMutations: alwaysAllowApiMutationsToggle.checked }).catch(() => {}); }); @@ -1597,29 +1525,23 @@ if (planReviewConfidenceRange) { }); } -notifySoundToggle.addEventListener('change', async () => { +notifySoundToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ notifySound: notifySoundToggle.checked }).catch(() => {}); }); -completionConfettiToggle.addEventListener('change', async () => { +completionConfettiToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ completionConfetti: completionConfettiToggle.checked }).catch(() => {}); }); -completionFlashTabToggle.addEventListener('change', async () => { +completionFlashTabToggle?.addEventListener('change', async () => { await chrome.storage.local.set({ completionFlashTab: completionFlashTabToggle.checked }).catch(() => {}); }); -tracingToggle.addEventListener('change', async () => { - await chrome.storage.local.set({ tracingEnabled: tracingToggle.checked }).catch(() => {}); - losslessTracingToggle.disabled = tracingToggle.checked !== true; - if (!tracingToggle.checked) { - losslessTracingToggle.checked = false; - await chrome.storage.local.set({ losslessTrace: false }).catch(() => {}); - } -}); - -losslessTracingToggle.addEventListener('change', async () => { - await chrome.storage.local.set({ losslessTrace: losslessTracingToggle.checked }).catch(() => {}); +// Record traces is one switch for both trace tiers: on records every run with +// its full request details (losslessTrace), off records neither. +tracingToggle?.addEventListener('change', async () => { + const enabled = tracingToggle.checked; + await chrome.storage.local.set({ tracingEnabled: enabled, losslessTrace: enabled }).catch(() => {}); }); feedbackDiagnosticsToggle?.addEventListener('change', async () => { @@ -1994,6 +1916,7 @@ async function refreshLocalVision() { } async function loadVisionConfig() { + if (!visionBaseUrlInput) return; const stored = await chrome.storage.local.get([ 'visionModel', WEBGPU_VISION_ENABLED_KEY, @@ -2101,7 +2024,7 @@ btnUseWebgpuVision?.addEventListener('click', async () => { } }); -btnSaveVision.addEventListener('click', async () => { +btnSaveVision?.addEventListener('click', async () => { const baseUrl = normalizeOpenAICompatibleBaseUrl(visionBaseUrlInput.value); const apiKey = visionApiKeyInput.value.trim(); const model = visionModelInput.value.trim(); @@ -2116,7 +2039,7 @@ btnSaveVision.addEventListener('click', async () => { flashVisionResult('ok', t('st.vision.saved')); }); -btnTestVision.addEventListener('click', async () => { +btnTestVision?.addEventListener('click', async () => { const baseUrl = normalizeOpenAICompatibleBaseUrl(visionBaseUrlInput.value); const apiKey = visionApiKeyInput.value.trim(); const model = visionModelInput.value.trim(); @@ -2148,7 +2071,7 @@ btnTestVision.addEventListener('click', async () => { } }); -btnClearVision.addEventListener('click', async () => { +btnClearVision?.addEventListener('click', async () => { if (isWebgpuVisionEnabled()) { // Back to Auto; downloaded files stay cached. await setWebgpuVisionChoice(WEBGPU_VISION_CHOICE_AUTO); @@ -2387,7 +2310,7 @@ async function reloadProfileSyncData() { if (profileTextArea) profileTextArea.value = stored.profileText || ''; if (stored.visionModel?.type === 'webgpu') { await loadVisionConfig(); - } else { + } else if (visionBaseUrlInput) { renderVisionConfig(stored.visionModel || {}); } const transcription = stored.transcriptionModel || {}; @@ -2397,6 +2320,7 @@ async function reloadProfileSyncData() { updateMultimodalDetectedProvider('transcription'); renderImageGenConfig(stored.imageGenModel || {}); await loadUserMemorySettings(); + if (!providersContainer) return; const res = await sendToBackground('get_providers'); providersData = res.providers; activeProviderId = res.active; @@ -2449,7 +2373,7 @@ btnProfileSyncLock?.addEventListener('click', () => profileSyncAction('profile_s btnProfileSyncChange?.addEventListener('click', async () => { const oldPassword = window.prompt(t('st.sync.prompt.current_password')); if (!oldPassword) return; let newPassword; try { newPassword = promptConfirmedSyncPassword(); } catch (e) { showProfileSyncResult(false, e.message); return; } if (newPassword) await profileSyncAction('profile_sync_change_password', { oldPassword, newPassword }).catch(() => {}); }); btnProfileSyncDisable?.addEventListener('click', () => { if (window.confirm(t('st.sync.confirm.disable'))) profileSyncAction('profile_sync_disable').catch(() => {}); }); btnProfileSyncReset?.addEventListener('click', async () => { if (!window.confirm(t('st.sync.confirm.reset'))) return; let password; try { password = promptConfirmedSyncPassword(t('st.sync.prompt.replacement_password')); } catch (e) { showProfileSyncResult(false, e.message); return; } if (password) await profileSyncAction('profile_sync_reset', { password }).catch(() => {}); }); -refreshProfileSyncState(); +if (profileSyncStatus) refreshProfileSyncState(); // Persisted to chrome.storage.local in plaintext; the agent picks the // changes up via the storage.onChanged listener in background.js and @@ -2597,6 +2521,7 @@ function renderUserMemoryRecords(records = []) { } async function loadUserMemorySettings() { + if (!userMemoryList) return; const res = await sendToBackground('get_user_memory').catch((error) => ({ ok: false, error: error.message })); if (!res?.ok) { renderUserMemoryRecords([]); @@ -3153,7 +3078,7 @@ function providerSubscriptionGuideHtml(definitionId) { `; } -// The WebGPU chat error points users at Settings > Providers > WebGPU, so the +// The WebGPU chat error points users at Providers > WebGPU, so the // card needs its own download surface instead of sending everyone to // Apocalypse Mode. This drives the same background routes // (`start/stop/get_webgpu_download_status`) with a start/stop button and a @@ -3448,6 +3373,7 @@ async function refreshWebbrainPaymentNotice() { } function renderProviders() { + if (!providersContainer) return; providersContainer.innerHTML = ''; void syncDecisionStatus(); diff --git a/src/chrome/src/ui/sidepanel.js b/src/chrome/src/ui/sidepanel.js index 1934eb53de..35f583e1ca 100644 --- a/src/chrome/src/ui/sidepanel.js +++ b/src/chrome/src/ui/sidepanel.js @@ -340,7 +340,7 @@ const pinCoachmarkDismissed = (async function initPinCoachmark() { function openProviderSettings() { try { - chrome.tabs.create({ url: chrome.runtime.getURL('src/ui/settings.html#providers') }); + chrome.tabs.create({ url: chrome.runtime.getURL('src/ui/providers.html#llm') }); } catch { chrome.runtime.openOptionsPage(); } @@ -469,7 +469,7 @@ const pinCoachmarkDismissed = (async function initPinCoachmark() { if (!providerStatus) return; providerStatus.textContent = ''; const changeLink = document.createElement('a'); - changeLink.href = chrome.runtime.getURL('src/ui/settings.html#providers'); + changeLink.href = chrome.runtime.getURL('src/ui/providers.html#llm'); changeLink.target = '_blank'; changeLink.rel = 'noopener noreferrer'; changeLink.textContent = t('ob.cloud.change'); @@ -1806,7 +1806,7 @@ chrome.storage.onChanged.addListener((changes) => { }); -// Composer switch for the same storage-backed gate as Settings → Permissions and +// Composer switch for the same storage-backed gate as the permissions page and // /dangerously-skip-permissions. Turning prompts off posts the command's // persistent notice. A permission card already waiting is left for the user to // answer: a display switch must never approve a pending action on its own. @@ -2045,7 +2045,7 @@ function closePermissionGatePopover() { } async function openPermissionsSettingsPage() { - const url = chrome.runtime.getURL('src/ui/settings.html#permissions'); + const url = chrome.runtime.getURL('src/ui/permissions.html'); try { await chrome.tabs.create({ url }); } catch { @@ -8585,7 +8585,7 @@ async function loadProviders() { } async function openProvidersSettingsPage() { - const url = chrome.runtime.getURL('src/ui/settings.html#providers'); + const url = chrome.runtime.getURL('src/ui/providers.html#llm'); try { await chrome.tabs.create({ url }); } catch { @@ -13050,7 +13050,7 @@ function parseCostAllowanceError(content) { return { scope: match[1].toLowerCase() === 'this session' ? 'session' : 'total', limitUsd, - message: content.replace(/\s*Increase or reset the allowance in Settings\.\s*$/i, '').trim(), + message: content.replace(/\s*Increase or reset the allowance in Settings(?: → Budgets)?\.\s*$/i, '').trim(), }; } diff --git a/src/firefox/src/agent/agent.js b/src/firefox/src/agent/agent.js index 88e9fa925c..8d6b49edd6 100644 --- a/src/firefox/src/agent/agent.js +++ b/src/firefox/src/agent/agent.js @@ -706,14 +706,14 @@ export class Agent extends LoopDetector { // Permission/form-submit prompts are never timed out. // Loaded from browser.storage.local in background.js (default 60). this.clarifyTimeoutSec = 60; - // Settings → General → "When a question times out": 'finish' (default) + // Settings → Budgets → "When a question times out": 'finish' (default) // keeps the task moving, 'safe' takes the safe default. See clarify-timeout.js. this.clarifyTimeoutPolicy = 'finish'; - // Settings → General → "Strict checks" (off by default): quality + // Settings → Advanced → "Strict checks" (off by default): quality // guards advise instead of refusing. See guard-policy.js. this.strictGuards = false; this._guardRunStates = new Map(); - // Settings → General → "Lean mode": 'auto' (default) | 'on' | 'off'. A run + // Settings → Advanced → "Lean mode": 'auto' (default) | 'on' | 'off'. A run // resolves it once at its start (_beginLeanRun) and keeps the answer in // _leanRuns, so its tools, prompt and guards agree. See lean-mode.js. this.leanMode = 'auto'; @@ -746,7 +746,9 @@ export class Agent extends LoopDetector { // next step (compact-every-step thrash). A genuine token-budget overflow is // never suppressed — see _manageContext. this._compactCooldown = new Map(); - this.autoScreenshot = 'state_change'; + // Auto-screenshot mode; the default captures after the agent navigates, + // not after every click or keystroke. Loaded from storage in background.js. + this.autoScreenshot = 'navigation'; this.useSiteAdapters = true; this.researchEscalationEnabled = false; this.researchEscalationEngine = RESEARCH_ESCALATION_ENGINE; @@ -933,7 +935,7 @@ export class Agent extends LoopDetector { try { await browser.storage.local.set({ wb_permissions: grants }); } catch { /* best-effort */ } }, }); - // Master switch (Settings → Permissions): when the user turns OFF "Ask + // Master switch (permissions page and side panel): when the user turns OFF "Ask // before consequential actions", the permission gate is bypassed entirely // for fast/trusted usage. Default ON. Layers 1 & 2 (untrusted-content // wrapping + system-prompt contract) stay active regardless — they cost @@ -941,7 +943,7 @@ export class Agent extends LoopDetector { this._skipPermissionGate = false; this._gateSettingLoaded = false; // Keep in-memory state in sync when storage changes out-of-band — a grant - // revoked in Settings, or the master switch toggled. + // revoked on the permissions page, or the master switch toggled. try { browser.storage.onChanged.addListener((changes, area) => { if (area !== 'local') return; @@ -5226,7 +5228,7 @@ export class Agent extends LoopDetector { }; } - // Completion guards under the default policy (Settings → General → + // Completion guards under the default policy (Settings → Advanced → // "Strict checks" off; see guard-policy.js). A completion guard refuses a // done or a plain final at most once per run, and that refusal is the // model's note. The next completion the same guard would refuse is @@ -8499,7 +8501,7 @@ export class Agent extends LoopDetector { _costAllowanceMessage(scope, spentUsd, limitUsd) { const scopeText = scope === 'session' ? 'this session' : 'total cloud/router usage'; - return `Cloud cost allowance reached: ${scopeText} is ${this._formatUsd(spentUsd)} against the ${this._formatUsd(limitUsd)} limit. Stopping before further cloud/router model calls. Increase or reset the allowance in Settings.`; + return `Cloud cost allowance reached: ${scopeText} is ${this._formatUsd(spentUsd)} against the ${this._formatUsd(limitUsd)} limit. Stopping before further cloud/router model calls. Increase or reset the allowance in Settings → Budgets.`; } // `pending`: which requests in flight to count at their most (see @@ -18999,7 +19001,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d * wait forever). Invalid values fall back to the product default of 60s. * Stored slider values above 1200 mean Off. */ - // Settings → General → "Strict checks": every quality guard blocks again. + // Settings → Advanced → "Strict checks": every quality guard blocks again. _guardStrict() { return this.strictGuards === true; } @@ -19104,7 +19106,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d } /** - * Settings → General → "Lean mode" for a run on `tabId` with `provider` + * Settings → Advanced → "Lean mode" for a run on `tabId` with `provider` * (the tab's active provider by default): 'on' and 'off' decide; 'auto' * turns it on only for a strong model on a cloud provider whose prompt tier * is Full (lean-mode.js). Act mode only: Ask, Dev and standalone chat keep @@ -28805,7 +28807,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d * 'once' lets this one step go ahead, anything else refuses it. Returns * 'once' | 'deny', or null when Stop or a correction cancelled the card. * - * A quality guard's card (`hard: false`) follows Settings → General: the + * A quality guard's card (`hard: false`) follows Settings → Budgets: the * clarify timeout (Off waits for the user, Instant answers at once) and * "When a question times out" ('finish' goes ahead, 'safe' does not). A * hard-class card never times out, like the recipient and deletion cards, @@ -43240,7 +43242,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d const stored = await browser.storage.local.get(CAPTCHA_SETTINGS_KEYS); const providers = getCaptchaProviders(stored); if (!providers.length) { - return noDispatchFailure('No CAPTCHA solver is enabled with a valid API key. Save and enable a CAPTCHA provider key in Settings → General → Advanced, or ask the user to solve the CAPTCHA manually.'); + return noDispatchFailure('No CAPTCHA solver is enabled with a valid API key. Save and enable a CAPTCHA provider key in Settings → CAPTCHA, or ask the user to solve the CAPTCHA manually.'); } let websiteURL = ''; @@ -45643,7 +45645,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d if (stagedVisionRoute && !stagedVisionRoute.provider && stagedVisionRoute.visionStatus) continue; if (!provider?.supportsVision && (!stagedVisionRoute?.provider || stagedVisionRoute.rawImage)) { const overrideHint = provider?.config?.visionMode != null - ? ' If automatic detection is unavailable or incorrect, set Vision capability to Force on in Settings.' + ? ' If automatic detection is unavailable or incorrect, set Vision capability to Force on in Providers.' : ''; return { ok: false, @@ -45678,7 +45680,7 @@ Rules: no prose intro, no conclusion, no "this screenshot shows...", no layout d } if (!provider?.supportsVision && (!stagedVisionRoute?.provider || stagedVisionRoute.rawImage)) { const overrideHint = provider?.config?.visionMode != null - ? ' If automatic detection is unavailable or incorrect, set Vision capability to Force on in Settings.' + ? ' If automatic detection is unavailable or incorrect, set Vision capability to Force on in Providers.' : ''; return { ok: false, diff --git a/src/firefox/src/agent/clarify-timeout.js b/src/firefox/src/agent/clarify-timeout.js index a591ea67b3..d19bd3f619 100644 --- a/src/firefox/src/agent/clarify-timeout.js +++ b/src/firefox/src/agent/clarify-timeout.js @@ -1,6 +1,6 @@ // What WebBrain does when nobody answers a clarify question in time. // -// The user chooses this in Settings → General ("When a question times out"): +// The user chooses this in Settings → Budgets ("When a question times out"): // - 'finish' (default) keeps the task moving. The option the model named as // finish_option applies as the answer; without one, the model continues // with the choice that best completes the task. Runs no longer stall diff --git a/src/firefox/src/agent/fal-media.js b/src/firefox/src/agent/fal-media.js index e30efcfa4f..c3ee2a92d4 100644 --- a/src/firefox/src/agent/fal-media.js +++ b/src/firefox/src/agent/fal-media.js @@ -1,6 +1,6 @@ // fal.ai generative media (assistive model). // -// Configured in Settings -> Assistive Models -> Generative Media (fal.ai provider). +// Configured in Providers -> Generative (fal.ai provider). // and stored in extension storage as `imageGenModel = { apiKey, model }`. // fal.ai uses a queue API: submit a prompt, poll status_url, then fetch // response_url. Auth uses `Authorization: Key `. diff --git a/src/firefox/src/agent/generative-media.js b/src/firefox/src/agent/generative-media.js index ef0d80ec60..ffbf00b497 100644 --- a/src/firefox/src/agent/generative-media.js +++ b/src/firefox/src/agent/generative-media.js @@ -219,7 +219,7 @@ export async function generateImage(args, options = {}) { const fetchImpl = typeof options === 'function' ? options : options.fetchImpl || fetch; try { const config = Object.hasOwn(options, 'config') ? options.config : await readMediaConfig(); - if (!config) throw new Error('Configure Generative Media in Settings → Assistive Models.'); + if (!config) throw new Error('Configure Generative Media in Providers → Generative.'); const result = await runMediaGeneration({ prompt: args?.prompt, config, fetchImpl, signal: options.signal }); if (result.url.startsWith('data:')) { const asset = await storeGeneratedMedia(result.url); diff --git a/src/firefox/src/agent/lean-mode.js b/src/firefox/src/agent/lean-mode.js index 1401297945..8adefde3f5 100644 --- a/src/firefox/src/agent/lean-mode.js +++ b/src/firefox/src/agent/lean-mode.js @@ -1,4 +1,4 @@ -// Lean mode: Settings → General → "Lean mode" ('auto' | 'on' | 'off'). +// Lean mode: Settings → Advanced → "Lean mode" ('auto' | 'on' | 'off'). // // A strong model does not need WebBrain's verification scaffolding: the // extra tools, readbacks, completion judges and forced re-check turns that diff --git a/src/firefox/src/agent/media-config.js b/src/firefox/src/agent/media-config.js index e434710fba..62937413d6 100644 --- a/src/firefox/src/agent/media-config.js +++ b/src/firefox/src/agent/media-config.js @@ -1,6 +1,6 @@ // Provider settings are user-authored. Model tool arguments never select a host or key. export const IMAGE_GEN_MODEL_KEY = 'imageGenModel'; -export const GENERATIVE_MEDIA_SETUP_NOTE = 'Built-in media generation requires setup in Settings → Assistive Models → Generative Media.'; +export const GENERATIVE_MEDIA_SETUP_NOTE = 'Built-in media generation requires setup in Providers → Generative.'; export const GENERATIVE_MEDIA_TIER_NOTE = 'Built-in media generation requires Full-tier Act mode.'; export const MEDIA_PROVIDERS = Object.freeze({ fal: { label: 'fal.ai', model: 'fal-ai/flux/schnell', keyPlaceholder: 'FAL_KEY', docs: 'https://fal.ai/dashboard/keys' }, diff --git a/src/firefox/src/agent/rich-text-toolbar-probe.js b/src/firefox/src/agent/rich-text-toolbar-probe.js index 5fd5603610..e4d2e56f1c 100644 --- a/src/firefox/src/agent/rich-text-toolbar-probe.js +++ b/src/firefox/src/agent/rich-text-toolbar-probe.js @@ -341,7 +341,7 @@ export class RichTextToolbarProbe { || el.getAttribute('data-slate-editor') === 'true' || el.getAttribute('data-lexical-editor') === 'true' || Array.from(el.children).some(child => child.getAttribute('data-contents') === 'true'))) { return { ok: false, dispatched: false, trustedTypeRequired: true, - error: 'This rich-text editor requires Firefox trusted automation. Enable it in Settings → General → Advanced and retry.' }; + error: 'This rich-text editor requires Firefox trusted automation. Enable it in Settings → Advanced and retry.' }; } // Preparation only binds a marker. Focus belongs after this frame's // dispatch fence and must retain the exact marked target. diff --git a/src/firefox/src/agent/terminal-messages.js b/src/firefox/src/agent/terminal-messages.js index a091c90107..1c9638b84a 100644 --- a/src/firefox/src/agent/terminal-messages.js +++ b/src/firefox/src/agent/terminal-messages.js @@ -103,6 +103,6 @@ export function stepLimitUserMessage(steps, lastAssistantText = '') { const lines = [`I reached the step limit${count ? ` (${count} step${count === 1 ? '' : 's'})` : ''} before finishing the task.`]; const snippet = String(lastAssistantText || '').replace(/\s+/g, ' ').trim(); if (snippet) lines.push(`Where I stopped: "${snippet.slice(0, 280)}${snippet.length > 280 ? '...' : ''}"`); - lines.push('This usually means the task is too complex for the current model, the step limit is too low (you can raise it in Settings), or the task should be split into smaller parts.'); + lines.push('This usually means the task is too complex for the current model, the step limit is too low (you can raise it in Settings → Budgets), or the task should be split into smaller parts.'); return lines.join('\n\n'); } diff --git a/src/firefox/src/agent/tools.js b/src/firefox/src/agent/tools.js index c61e526cf0..86bfb6fe9d 100644 --- a/src/firefox/src/agent/tools.js +++ b/src/firefox/src/agent/tools.js @@ -1298,7 +1298,7 @@ export const AGENT_TOOLS = [ type: 'function', function: { name: 'solve_captcha', - description: "Solve a CAPTCHA using compatible providers enabled in Settings → General → Advanced, in descending weight order. A single call may charge multiple providers on fallback. Follow the runtime CAPTCHA gate: never repurchase an unresolved challenge from an attempted provider. A new challenge or a runtime-offered AWS fallback can proceed after fresh inspection. Omit providerTasks for automatic reCAPTCHA v2/v3, hCaptcha, Turnstile, AWS WAF, and image handling. AWS WAF observes initial or secondary verification inputs and applies its cookie; reload once and read the page to verify clearance. For ALL other documented methods, first read get_captcha_capabilities and the selected method schemas, then provide one native task per compatible enabled provider with observed parameters and inject:false. Native methods preserve tokens, cookies, coordinates, audio/text, and structured answers; apply them using apply_captcha_solution. Unknown or missing parameters fail before spending. Verify page progress; a returned answer is not proof of clearance. Missing provider/input or failed solving requires manual completion.", + description: "Solve a CAPTCHA using compatible providers enabled in Settings → CAPTCHA, in descending weight order. A single call may charge multiple providers on fallback. Follow the runtime CAPTCHA gate: never repurchase an unresolved challenge from an attempted provider. A new challenge or a runtime-offered AWS fallback can proceed after fresh inspection. Omit providerTasks for automatic reCAPTCHA v2/v3, hCaptcha, Turnstile, AWS WAF, and image handling. AWS WAF observes initial or secondary verification inputs and applies its cookie; reload once and read the page to verify clearance. For ALL other documented methods, first read get_captcha_capabilities and the selected method schemas, then provide one native task per compatible enabled provider with observed parameters and inject:false. Native methods preserve tokens, cookies, coordinates, audio/text, and structured answers; apply them using apply_captcha_solution. Unknown or missing parameters fail before spending. Verify page progress; a returned answer is not proof of clearance. Missing provider/input or failed solving requires manual completion.", parameters: { type: 'object', properties: { @@ -1342,7 +1342,7 @@ export const AGENT_TOOLS = [ type: 'function', function: { name: 'generate_image', - description: 'Generate media (usually an image) from a text prompt using the user\'s configured generative media provider (Settings → Assistive Models → Generative Media). Supports fal.ai, OpenRouter, Comfy Router and local ComfyUI workflows; generation may take several minutes. Returns a media URL or inline media displayed in the chat. Not available in Ask mode.', + description: 'Generate media (usually an image) from a text prompt using the user\'s configured generative media provider (Providers → Generative). Supports fal.ai, OpenRouter, Comfy Router and local ComfyUI workflows; generation may take several minutes. Returns a media URL or inline media displayed in the chat. Not available in Ask mode.', parameters: { type: 'object', properties: { @@ -1799,7 +1799,7 @@ export function getToolsForMode(mode, opts = {}) { const tier = opts.tier || (opts.compact ? 'compact' : 'full'); const normalizedMode = mode === 'dev' ? 'dev' : (mode === 'ask' ? 'ask' : 'act'); const devCompactBlocked = normalizedMode === 'dev' && tier === 'compact'; - // Lean mode (Settings → General → "Lean mode", Act only): strong models get + // Lean mode (Settings → Advanced → "Lean mode", Act only): strong models get // a small subset of the normal tools instead of the tier's list. Same // schemas, no new tools; see lean-mode.js and LEAN_TOOL_NAMES below. const lean = opts.lean === true && normalizedMode === 'act'; @@ -2447,7 +2447,7 @@ LISTINGS: - On listing/search-result pages, EXTRACT first, paginate second: list each visible item to the user (title + price/date + link), then move to the next page. For "give me the links/items" tasks, call done with what you have as soon as it's useful — partial-but-delivered beats complete-but-never-delivered.`; /** - * Lean tool set (Settings → General → "Lean mode", Act only). A thin surface + * Lean tool set (Settings → Advanced → "Lean mode", Act only). A thin surface * in the spirit of Claude in Chrome for strong models: read the page, act by * ref or by a point from a screenshot, type, press keys, scroll, navigate, * wait, upload, and ask or finish. Tabs are not model-callable in WebBrain, so diff --git a/src/firefox/src/background.js b/src/firefox/src/background.js index ccac3d340b..4b93ebb145 100644 --- a/src/firefox/src/background.js +++ b/src/firefox/src/background.js @@ -529,6 +529,22 @@ async function loadAutoScreenshot() { } loadAutoScreenshot(); +// Settings has one Record traces switch for both trace tiers: full request +// details are recorded whenever traces are. A profile from before the merge +// can have the two set apart; line them up once so the switch shows what is +// recorded. Harnesses that set the tiers apart afterwards keep their choice. +const TRACE_TIERS_MERGED_KEY = 'traceTiersMergedV1'; +async function mergeTraceTiers() { + const stored = await browser.storage.local.get(['tracingEnabled', 'losslessTrace', TRACE_TIERS_MERGED_KEY]); + if (stored[TRACE_TIERS_MERGED_KEY] === true) return; + const updates = { [TRACE_TIERS_MERGED_KEY]: true }; + if ((stored.tracingEnabled === true) !== (stored.losslessTrace === true)) { + updates.losslessTrace = stored.tracingEnabled === true; + } + await browser.storage.local.set(updates); +} +mergeTraceTiers().catch(() => {}); + async function loadSiteAdapters() { const stored = await browser.storage.local.get('useSiteAdapters'); if (stored.useSiteAdapters != null) agent.useSiteAdapters = stored.useSiteAdapters; @@ -3885,7 +3901,11 @@ async function handleMessage(msg, sender) { imported.settings, ) : imported.settings; - await browser.storage.local.set(settings); + // A restored export carries Record traces only; full request details follow + // it, as they do in Settings. Provisioning patches keep their own tiers. + await browser.storage.local.set(msg.action === 'import_config' && Object.hasOwn(settings, 'tracingEnabled') + ? { ...settings, losslessTrace: settings.tracingEnabled === true } + : settings); await providerManager.load(); await Promise.all([ loadMaxSteps(), @@ -4273,9 +4293,10 @@ async function handleMessage(msg, sender) { } case 'd1_control': { + // The D1 controls are on the Decision tab of the Providers page. const api = globalThis.browser || globalThis.chrome; - const settingsUrl = api.runtime.getURL('src/ui/settings.html'); - if (sender.id !== api.runtime.id || String(sender.url || '').split('#')[0] !== settingsUrl) return { success: false, error: 'D1 model controls are available only from extension Settings.' }; + const providersUrl = api.runtime.getURL('src/ui/providers.html'); + if (sender.id !== api.runtime.id || String(sender.url || '').split(/[?#]/)[0] !== providersUrl) return { success: false, error: 'D1 model controls are available only from the extension Providers page.' }; try { await strictSecretModeReady; if (agent.strictSecretMode && !['dispose', 'reset', 'stop', 'clear', 'status'].includes(msg.command)) throw new Error('D1 is disabled in Strict Secret Mode.'); @@ -4534,10 +4555,11 @@ browser.commands.onCommand.addListener(async (command, tab) => { } }); -// Connection controls belong only to the packaged Settings page, never a tab. +// Connection controls belong only to the packaged Settings page (its Advanced +// tab, which may be opened as settings.html#advanced), never a tab. browser.runtime.onMessage.addListener((message, sender) => { if (message?.type !== 'WB_BIDI_CONNECT' && message?.type !== 'WB_BIDI_DISCONNECT') return; - if (sender.id !== browser.runtime.id || sender.url !== browser.runtime.getURL('src/ui/settings.html')) return; + if (sender.id !== browser.runtime.id || String(sender.url || '').split(/[?#]/)[0] !== browser.runtime.getURL('src/ui/settings.html')) return; if (message.type === 'WB_BIDI_DISCONNECT') { firefoxBidi.disconnect(); return Promise.resolve({ success: true }); } return firefoxBidi.connect().then(() => ({ success: true }), error => ({ success: false, error: error.message })); }); diff --git a/src/firefox/src/bidi/client.js b/src/firefox/src/bidi/client.js index 67e0b664fd..12cab921da 100644 --- a/src/firefox/src/bidi/client.js +++ b/src/firefox/src/bidi/client.js @@ -152,7 +152,7 @@ export class FirefoxBidiClient { async captureFullPage(tabId, beforeCapture = async () => {}) { const epoch = this.connectionEpoch; const settings = await this.api.storage.local.get('firefoxBidiEnabled'); - if (!settings.firefoxBidiEnabled) throw new Error('Full-page screenshots require Firefox trusted automation. Install the local companion and enable it in Settings → General → Advanced.'); + if (!settings.firefoxBidiEnabled) throw new Error('Full-page screenshots require Firefox trusted automation. Install the local companion and enable it in Settings → Advanced.'); if (this.captures.has(tabId)) throw new Error('A full-page screenshot is already in progress for this tab'); const owner = {}; this.captures.set(tabId, owner); diff --git a/src/firefox/src/config-transfer.js b/src/firefox/src/config-transfer.js index c4a0923ca7..c2acb8703a 100644 --- a/src/firefox/src/config-transfer.js +++ b/src/firefox/src/config-transfer.js @@ -36,7 +36,7 @@ export const DEFAULT_CONFIG_SETTINGS = Object.freeze({ clarifyTimeoutSec: 60, clarifyTimeoutSemanticsV2: true, clarifyTimeoutPolicy: 'finish', - autoScreenshot: 'state_change', + autoScreenshot: 'navigation', useSiteAdapters: true, researchEscalationEnabled: false, researchEscalationEngine: 'chatgpt', diff --git a/src/firefox/src/content/content.js b/src/firefox/src/content/content.js index bc8bfce710..b29dc9fc47 100644 --- a/src/firefox/src/content/content.js +++ b/src/firefox/src/content/content.js @@ -3030,7 +3030,7 @@ if (isModelManagedEditor(el)) { // Framework editors own their DOM. Native BiDi input bypasses this // fallback; without it, leave the draft intact instead of corrupting it. - return failure('This rich-text editor requires Firefox trusted automation. Enable it in Settings → General → Advanced and retry.', + return failure('This rich-text editor requires Firefox trusted automation. Enable it in Settings → Advanced and retry.', { trustedTypeRequired: true, recoveryRequired: 'trusted_input', retryable: false }); } if (typeof doc.execCommand !== 'function') { diff --git a/src/firefox/src/providers/d1-cache.js b/src/firefox/src/providers/d1-cache.js index a40fc2e419..e245e783dd 100644 --- a/src/firefox/src/providers/d1-cache.js +++ b/src/firefox/src/providers/d1-cache.js @@ -48,7 +48,7 @@ export async function readD1Manifest(directory, { download = false, signal } = { let bytes; try { bytes = new Uint8Array(await (await (await directory.getFileHandle('package-manifest.json')).getFile()).arrayBuffer()); } catch { - if (!download) throw new Error('Download D1 explicitly in Settings > Assistive Models > Decision models first.'); + if (!download) throw new Error('Download D1 explicitly in Providers > Decision first.'); const response = await fetch(d1BaseURL() + 'package-manifest.json', { credentials: 'omit', redirect: 'follow', signal }); if (!response.ok || Number(response.headers.get('content-length')) > 1024 * 1024) throw new Error('D1 package manifest download failed.'); bytes = new Uint8Array(await response.arrayBuffer()); diff --git a/src/firefox/src/providers/d1-diagnostic.js b/src/firefox/src/providers/d1-diagnostic.js index 6231ce1f85..18fc1997b5 100644 --- a/src/firefox/src/providers/d1-diagnostic.js +++ b/src/firefox/src/providers/d1-diagnostic.js @@ -3,8 +3,8 @@ import { validateSystemOneAnswers } from '../agent/systemone-judge.js'; import { D1_CONSENT_KEY, D1_CONSENT_VERSION } from './d1-config.js'; export async function evaluateD1LocalFixture({ fixture, sender, api, strictSecretMode, agent, client }) { - const settingsUrl = api.runtime.getURL('src/ui/settings.html'); - if (sender?.id !== api.runtime.id || String(sender.url || '').split('#')[0] !== settingsUrl) throw new Error('Local D1 fixture tests are available only from extension Settings.'); + const providersUrl = api.runtime.getURL('src/ui/providers.html'); + if (sender?.id !== api.runtime.id || String(sender.url || '').split(/[?#]/)[0] !== providersUrl) throw new Error('Local D1 fixture tests are available only from the extension Providers page.'); if (strictSecretMode) throw new Error('Decision requests are disabled in Strict Secret Mode.'); const stored = await api.storage.local.get(DECISION_SETTINGS_KEYS); if (stored.decisionProvider !== 'webgpu_d1' || resolveDecisionMode(stored) !== 'on' || stored[D1_CONSENT_KEY] !== D1_CONSENT_VERSION) throw new Error('Select, enable and explicitly consent to the local D1 provider before testing a fixture.'); diff --git a/src/firefox/src/providers/fetch-timeout.js b/src/firefox/src/providers/fetch-timeout.js index 1b95cd3179..acb56a0711 100644 --- a/src/firefox/src/providers/fetch-timeout.js +++ b/src/firefox/src/providers/fetch-timeout.js @@ -8,7 +8,7 @@ * 1. The same 120s default and 10–600s range apply to every LLM call. * 2. There's one cached timeout value across the providers — not three * copies each with its own storage read and onChanged listener. - * 3. Changing the setting in Settings → Display → "LLM request timeout" + * 3. Changing the setting in Settings → Budgets → "LLM request timeout" * takes effect on the next request without an extension reload. * * The timer aborts ONLY the connection / time-to-headers phase. Once @@ -96,7 +96,7 @@ export async function fetchWithTimeout(url, options = {}) { `Request to ${url} timed out after ${timeoutMs}ms. ` + `The endpoint may be unreachable, blocked by CORS, or stalled. ` + `If this is a local model that needs more time, raise the timeout ` + - `in Settings → Display → "LLM request timeout".` + `in Settings → Budgets → "LLM request timeout".` ); } throw e; diff --git a/src/firefox/src/providers/oauth-claude.js b/src/firefox/src/providers/oauth-claude.js index 67ad5f18c8..d6707195f7 100644 --- a/src/firefox/src/providers/oauth-claude.js +++ b/src/firefox/src/providers/oauth-claude.js @@ -220,7 +220,7 @@ async function _doRefreshClaudeAccessToken() { export async function getClaudeAccessToken() { const stored = await browser.storage.local.get([STORAGE_KEY]); const tokens = stored[STORAGE_KEY]; - if (!tokens?.accessToken) throw new Error('Not signed in to Claude. Open Settings → Claude (Pro/Max) → Sign in.'); + if (!tokens?.accessToken) throw new Error('Not signed in to Claude. Open Providers → Claude (Pro/Max) → Sign in.'); if (Date.now() >= tokens.expiresAt) { const refreshed = await refreshClaudeAccessToken(); return refreshed.accessToken; diff --git a/src/firefox/src/providers/oauth-subscriptions.js b/src/firefox/src/providers/oauth-subscriptions.js index 153d2718ec..de65f7d8fe 100644 --- a/src/firefox/src/providers/oauth-subscriptions.js +++ b/src/firefox/src/providers/oauth-subscriptions.js @@ -252,7 +252,7 @@ function makeOAuthClient(def) { async function getAccessToken() { const stored = await browser.storage.local.get([STORAGE_KEY]); const tokens = stored[STORAGE_KEY]; - if (!tokens?.accessToken) throw new Error(`Not signed in to ${def.label}. Open Settings and sign in.`); + if (!tokens?.accessToken) throw new Error(`Not signed in to ${def.label}. Open Providers and sign in.`); if (Date.now() >= tokens.expiresAt) return (await refresh()).accessToken; return tokens.accessToken; } diff --git a/src/firefox/src/safesocial/background.js b/src/firefox/src/safesocial/background.js index a4507a45f7..ddd6ab3892 100644 --- a/src/firefox/src/safesocial/background.js +++ b/src/firefox/src/safesocial/background.js @@ -3,7 +3,8 @@ import { SETTINGS_KEY, CACHE_NAME, normalizeSettings, isInstagramUrl, isMediaUrl export function installSafeSocialBackground(api, runHost) { let generation = 0; let transition = Promise.resolve(); - const settingsUrl = api.runtime.getURL('src/ui/settings.html'); + // SafeSocial is managed from its tab on the Providers page. + const providersUrl = api.runtime.getURL('src/ui/providers.html'); api.storage.onChanged.addListener((changes, area) => { if (area !== 'local' || !changes[SETTINGS_KEY]) return; generation++; @@ -14,7 +15,7 @@ export function installSafeSocialBackground(api, runHost) { }); async function handle(message, sender) { if (sender.id !== api.runtime.id) throw new Error('Invalid classifier caller.'); - const trustedSettings = String(sender.url || '').split(/[?#]/)[0] === settingsUrl; + const trustedSettings = String(sender.url || '').split(/[?#]/)[0] === providersUrl; if (message.command === 'classify') { if (!sender.tab || sender.frameId !== 0 || !isInstagramUrl(sender.url) || !isMediaUrl(message.url)) { throw new Error('Classifier is limited to Instagram images.'); diff --git a/src/firefox/src/ui/d1-settings.js b/src/firefox/src/ui/d1-settings.js index 74eb4e039c..4565db55ed 100644 --- a/src/firefox/src/ui/d1-settings.js +++ b/src/firefox/src/ui/d1-settings.js @@ -3,6 +3,8 @@ import { t } from './i18n.js'; export function initD1Settings(send) { const provider = document.getElementById('decision-provider'), controls = document.getElementById('d1-controls'), line = document.getElementById('d1-status'), consent = document.getElementById('d1-consent'); + // The decision card is on providers.html; the other settings pages have nothing to wire. + if (!provider || !controls) return async () => {}; let timer = null, busy = false; const show = async () => { const selected = provider.value === 'webgpu_d1'; controls.hidden = !selected; diff --git a/src/firefox/src/ui/locales/apocalypse-copy.mjs b/src/firefox/src/ui/locales/apocalypse-copy.mjs index 1b99b1186c..09f4a8c8e3 100644 --- a/src/firefox/src/ui/locales/apocalypse-copy.mjs +++ b/src/firefox/src/ui/locales/apocalypse-copy.mjs @@ -38,7 +38,7 @@ const englishApocalypseModeCopy = { 'ap.models.status.error': 'Error', 'ap.models.remove': 'Remove', 'ap.models.confirm_remove': 'Remove the {model} and its cached files? You will need to download it again to use it offline.', - 'ap.vision.auto': 'Local vision is optional and never downloads on its own. WebBrain VL 2 450M first needs your consent in Settings → Assistive Models → Vision.', + 'ap.vision.auto': 'Local vision is optional and never downloads on its own. WebBrain VL 2 450M first needs your consent in Providers → Vision.', 'ap.vision.waiting': 'Disabled until you explicitly enable local vision', 'ap.vision.text_model_sees': 'Your Text Model, Ternary Bonsai 2 2B Vision, already reads images. No extra download.', 'ap.enabled': 'Enabled', diff --git a/src/firefox/src/ui/locales/apocalypse-translations.mjs b/src/firefox/src/ui/locales/apocalypse-translations.mjs index e10c43599e..c820a6344e 100644 --- a/src/firefox/src/ui/locales/apocalypse-translations.mjs +++ b/src/firefox/src/ui/locales/apocalypse-translations.mjs @@ -16,7 +16,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Conocimiento sin conexión bajo tu control", "ap.hero.desc": "Configura los cuatro elementos esenciales para el chat local privado: un modelo de texto, un modelo de visión, una edición de Wikipedia sin conexión y la Caja de Emergencia.", "ap.hero.consent": "Al activar este modo se inician las descargas del modelo de texto y de la pequeña Wikipedia en inglés simple. La visión local sigue siendo opcional y debe habilitarse por separado.", - "ap.vision.auto": "La visión local es opcional y nunca se descarga sola. WebBrain VL 2 450M necesita antes tu consentimiento en Ajustes → Modelos auxiliares → Visión.", + "ap.vision.auto": "La visión local es opcional y nunca se descarga sola. WebBrain VL 2 450M necesita antes tu consentimiento en Proveedores → Visión.", "ap.vision.waiting": "Desactivada hasta que habilites explícitamente la visión local", "ap.vision.text_model_sees": "Tu modelo de texto, Ternary Bonsai 2 2B Vision, ya lee imágenes. Sin descarga adicional.", "ap.enabled": "Activado", @@ -143,7 +143,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Connaissance hors ligne, sous votre contrôle", "ap.hero.desc": "Configurez les quatre éléments essentiels du chat local privé : un modèle de texte, un modèle de vision, une édition hors ligne de Wikipédia et la Boîte d'urgence.", "ap.hero.consent": "L’activation de ce mode lance les téléchargements du modèle de texte et de la petite Wikipédia en anglais simple. La vision locale reste facultative et doit être activée séparément.", - "ap.vision.auto": "La vision locale est facultative et ne se télécharge jamais d’elle-même. WebBrain VL 2 450M demande d’abord votre consentement dans Paramètres → Modèles auxiliaires → Vision.", + "ap.vision.auto": "La vision locale est facultative et ne se télécharge jamais d’elle-même. WebBrain VL 2 450M demande d’abord votre consentement dans Fournisseurs → Vision.", "ap.vision.waiting": "Désactivée jusqu’à l’activation explicite de la vision locale", "ap.vision.text_model_sees": "Votre modèle de texte, Ternary Bonsai 2 2B Vision, lit déjà les images. Aucun téléchargement supplémentaire.", "ap.enabled": "Activé", @@ -270,7 +270,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Kendi kontrolünüzde çevrimdışı bilgi", "ap.hero.desc": "Özel yerel sohbet için dört temel bileşeni kurun: Metin Modeli, Görüntü Modeli, bir çevrimdışı Vikipedi sürümü ve Acil Durum Kutusu.", "ap.hero.consent": "Bu modu açmak Metin Modeli ve küçük Basit İngilizce Vikipedi indirmelerini başlatır. Yerel görüntü işleme isteğe bağlı kalır ve ayrıca etkinleştirilmelidir.", - "ap.vision.auto": "Yerel görme isteğe bağlıdır ve kendiliğinden hiçbir şey indirmez. WebBrain VL 2 450M için önce Ayarlar → Yardımcı Modeller → Görme bölümünden onay vermeniz gerekir.", + "ap.vision.auto": "Yerel görme isteğe bağlıdır ve kendiliğinden hiçbir şey indirmez. WebBrain VL 2 450M için önce Sağlayıcılar → Görme bölümünden onay vermeniz gerekir.", "ap.vision.waiting": "Yerel görüntü işlemeyi açıkça etkinleştirene kadar devre dışı", "ap.vision.text_model_sees": "Metin modeliniz Ternary Bonsai 2 2B Vision zaten görüntü okuyabiliyor. Ek indirme gerekmez.", "ap.enabled": "Etkin", @@ -397,7 +397,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "由您掌控的离线知识", "ap.hero.desc": "设置私人本地聊天所需的四项核心内容:文本模型、视觉模型、一个离线维基百科版本和应急箱。", "ap.hero.consent": "开启此模式会开始下载文本模型和较小的简明英语维基百科。本地视觉仍为可选功能,必须单独启用。", - "ap.vision.auto": "本地视觉是可选的,绝不会自行下载。WebBrain VL 2 450M 需要先在“设置 → 辅助模型 → 视觉”中获得你的同意。", + "ap.vision.auto": "本地视觉是可选的,绝不会自行下载。WebBrain VL 2 450M 需要先在“提供商 → 视觉”中获得你的同意。", "ap.vision.waiting": "在您明确启用本地视觉之前保持禁用", "ap.vision.text_model_sees": "你的文本模型 Ternary Bonsai 2 2B Vision 已经能读取图像,无需额外下载。", "ap.enabled": "已启用", @@ -524,7 +524,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Офлайн-знания под вашим контролем", "ap.hero.desc": "Настройте четыре основных компонента для приватного локального чата: текстовую модель, модель компьютерного зрения, одну офлайн-версию Википедии и Аварийный ящик.", "ap.hero.consent": "Включение этого режима запускает загрузку текстовой модели и уменьшенной Википедии на упрощённом английском. Локальное зрение остаётся необязательным и включается отдельно.", - "ap.vision.auto": "Локальное зрение необязательно и никогда не загружается само. Для WebBrain VL 2 450M сначала нужно ваше согласие в разделе Настройки → Вспомогательные модели → Зрение.", + "ap.vision.auto": "Локальное зрение необязательно и никогда не загружается само. Для WebBrain VL 2 450M сначала нужно ваше согласие в разделе Провайдеры → Зрение.", "ap.vision.waiting": "Отключено, пока вы явно не включите локальное зрение", "ap.vision.text_model_sees": "Ваша текстовая модель Ternary Bonsai 2 2B Vision уже читает изображения. Дополнительная загрузка не нужна.", "ap.enabled": "Включено", @@ -651,7 +651,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Офлайн знання під вашим контролем", "ap.hero.desc": "Налаштуйте чотири основні компоненти для приватного локального чату: текстову модель, модель комп’ютерного зору, одну офлайн-версію Вікіпедії та Аварійну скриньку.", "ap.hero.consent": "Увімкнення цього режиму запускає завантаження текстової моделі та меншої Вікіпедії спрощеною англійською. Локальний зір залишається необов’язковим і вмикається окремо.", - "ap.vision.auto": "Локальний зір необов’язковий і ніколи не завантажується сам. Для WebBrain VL 2 450M спершу потрібна ваша згода в розділі Налаштування → Допоміжні моделі → Зір.", + "ap.vision.auto": "Локальний зір необов’язковий і ніколи не завантажується сам. Для WebBrain VL 2 450M спершу потрібна ваша згода в розділі Провайдери → Зір.", "ap.vision.waiting": "Вимкнено, доки ви явно не ввімкнете локальний зір", "ap.vision.text_model_sees": "Ваша текстова модель Ternary Bonsai 2 2B Vision уже читає зображення. Додаткове завантаження не потрібне.", "ap.enabled": "Увімкнено", @@ -778,7 +778,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "معرفة دون اتصال، تحت سيطرتك", "ap.hero.desc": "أعِدّ العناصر الأساسية الأربعة للدردشة المحلية الخاصة: نموذج نص، ونموذج رؤية، وإصدار واحد من ويكيبيديا دون اتصال، وصندوق الطوارئ.", "ap.hero.consent": "يؤدي تشغيل هذا الوضع إلى بدء تنزيل نموذج النص ونسخة ويكيبيديا الأصغر باللغة الإنجليزية المبسطة. تظل الرؤية المحلية اختيارية ويجب تفعيلها بشكل منفصل.", - "ap.vision.auto": "الرؤية المحلية اختيارية ولا تُنزَّل من تلقاء نفسها أبدًا. أما WebBrain VL 2 450M فيحتاج أولًا إلى موافقتك من الإعدادات ← النماذج المساعدة ← الرؤية.", + "ap.vision.auto": "الرؤية المحلية اختيارية ولا تُنزَّل من تلقاء نفسها أبدًا. أما WebBrain VL 2 450M فيحتاج أولًا إلى موافقتك من المزوّدون ← الرؤية.", "ap.vision.waiting": "معطلة حتى تفعّل الرؤية المحلية صراحةً", "ap.vision.text_model_sees": "نموذج النص لديك، Ternary Bonsai 2 2B Vision، يقرأ الصور بالفعل. لا حاجة إلى تنزيل إضافي.", "ap.enabled": "مفعّل", @@ -905,7 +905,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "あなたの制御下のオフライン知識", "ap.hero.desc": "プライベートなローカルチャットに必要な4つの要素(テキストモデル、ビジョンモデル、オフライン版ウィキペディア1つ、緊急ボックス)をセットアップします。", "ap.hero.consent": "このモードを有効にすると、テキストモデルと小容量のシンプル英語版ウィキペディアのダウンロードが始まります。ローカル画像認識は任意で、別途有効にする必要があります。", - "ap.vision.auto": "ローカルの画像認識は任意で、勝手にダウンロードされることはありません。WebBrain VL 2 450M は先に「設定 → 補助モデル → 画像認識」で同意が必要です。", + "ap.vision.auto": "ローカルの画像認識は任意で、勝手にダウンロードされることはありません。WebBrain VL 2 450M は先に「プロバイダー → 画像認識」で同意が必要です。", "ap.vision.waiting": "ローカル画像認識を明示的に有効にするまで無効", "ap.vision.text_model_sees": "テキストモデルの Ternary Bonsai 2 2B Vision はすでに画像を読み取れます。追加のダウンロードは不要です。", "ap.enabled": "有効", @@ -1032,7 +1032,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "사용자 통제 하에 오프라인 지식", "ap.hero.desc": "개인 로컬 채팅에 필요한 네 가지 핵심 요소인 텍스트 모델, 비전 모델, 오프라인 위키백과 버전 하나, 비상 상자를 설정하세요.", "ap.hero.consent": "이 모드를 켜면 텍스트 모델과 용량이 작은 쉬운 영어 위키백과 다운로드가 시작됩니다. 로컬 비전은 선택 사항이며 별도로 활성화해야 합니다.", - "ap.vision.auto": "로컬 비전은 선택 사항이며 스스로 다운로드되지 않습니다. WebBrain VL 2 450M는 먼저 설정 → 보조 모델 → 비전에서 동의해야 합니다.", + "ap.vision.auto": "로컬 비전은 선택 사항이며 스스로 다운로드되지 않습니다. WebBrain VL 2 450M는 먼저 제공자 → 비전에서 동의해야 합니다.", "ap.vision.waiting": "로컬 비전을 명시적으로 활성화할 때까지 비활성화됨", "ap.vision.text_model_sees": "텍스트 모델인 Ternary Bonsai 2 2B Vision가 이미 이미지를 읽습니다. 추가 다운로드가 필요 없습니다.", "ap.enabled": "활성화", @@ -1159,7 +1159,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Pengetahuan offline, di bawah kendali Anda", "ap.hero.desc": "Siapkan empat komponen penting untuk obrolan lokal pribadi: Model Teks, Model Visi, satu edisi Wikipedia offline, dan Kotak Darurat.", "ap.hero.consent": "Mengaktifkan mode ini memulai unduhan Model Teks dan Wikipedia Bahasa Inggris Sederhana berukuran kecil. Visi lokal tetap opsional dan harus diaktifkan secara terpisah.", - "ap.vision.auto": "Visi lokal bersifat opsional dan tidak pernah mengunduh sendiri. WebBrain VL 2 450M memerlukan persetujuan Anda terlebih dahulu di Pengaturan → Model Pendukung → Visi.", + "ap.vision.auto": "Visi lokal bersifat opsional dan tidak pernah mengunduh sendiri. WebBrain VL 2 450M memerlukan persetujuan Anda terlebih dahulu di Penyedia → Visi.", "ap.vision.waiting": "Dinonaktifkan sampai Anda mengaktifkan visi lokal secara eksplisit", "ap.vision.text_model_sees": "Model teks Anda, Ternary Bonsai 2 2B Vision, sudah bisa membaca gambar. Tidak perlu unduhan tambahan.", "ap.enabled": "Aktif", @@ -1286,7 +1286,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "ความรู้แบบออฟไลน์ ภายใต้การควบคุมของคุณ", "ap.hero.desc": "ตั้งค่าองค์ประกอบสำคัญสี่อย่างสำหรับแชทส่วนตัวในเครื่อง ได้แก่ โมเดลข้อความ โมเดลการมองเห็น วิกิพีเดียออฟไลน์หนึ่งฉบับ และกล่องฉุกเฉิน", "ap.hero.consent": "การเปิดโหมดนี้จะเริ่มดาวน์โหลดโมเดลข้อความและวิกิพีเดียภาษาอังกฤษแบบง่ายฉบับขนาดเล็ก การมองเห็นในเครื่องยังคงเป็นตัวเลือกและต้องเปิดใช้แยกต่างหาก", - "ap.vision.auto": "การมองเห็นในเครื่องเป็นตัวเลือกเสริมและไม่ดาวน์โหลดเอง ส่วน WebBrain VL 2 450M ต้องได้รับความยินยอมจากคุณก่อนใน การตั้งค่า → โมเดลเสริม → การมองเห็น", + "ap.vision.auto": "การมองเห็นในเครื่องเป็นตัวเลือกเสริมและไม่ดาวน์โหลดเอง ส่วน WebBrain VL 2 450M ต้องได้รับความยินยอมจากคุณก่อนใน ผู้ให้บริการ → การมองเห็น", "ap.vision.waiting": "ปิดใช้งานจนกว่าคุณจะเปิดการมองเห็นในเครื่องอย่างชัดเจน", "ap.vision.text_model_sees": "โมเดลข้อความของคุณ Ternary Bonsai 2 2B Vision อ่านภาพได้อยู่แล้ว ไม่ต้องดาวน์โหลดเพิ่ม", "ap.enabled": "เปิดใช้งาน", @@ -1413,7 +1413,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Pengetahuan luar talian, di bawah kawalan anda", "ap.hero.desc": "Sediakan empat komponen penting untuk sembang setempat peribadi: Model Teks, Model Penglihatan, satu edisi Wikipedia luar talian dan Kotak Kecemasan.", "ap.hero.consent": "Mengaktifkan mod ini memulakan muat turun Model Teks dan Wikipedia Bahasa Inggeris Mudah yang kecil. Penglihatan setempat kekal pilihan dan mesti didayakan secara berasingan.", - "ap.vision.auto": "Penglihatan setempat adalah pilihan dan tidak pernah dimuat turun dengan sendirinya. WebBrain VL 2 450M memerlukan persetujuan anda dahulu dalam Tetapan → Model Bantuan → Penglihatan.", + "ap.vision.auto": "Penglihatan setempat adalah pilihan dan tidak pernah dimuat turun dengan sendirinya. WebBrain VL 2 450M memerlukan persetujuan anda dahulu dalam Pembekal → Penglihatan.", "ap.vision.waiting": "Dilumpuhkan sehingga anda mendayakan penglihatan setempat secara jelas", "ap.vision.text_model_sees": "Model Teks anda, Ternary Bonsai 2 2B Vision, sudah boleh membaca imej. Tiada muat turun tambahan.", "ap.enabled": "Dikesan", @@ -1540,7 +1540,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Offline na kaalaman, nasa iyong kontrol", "ap.hero.desc": "I-set up ang apat na mahalagang bahagi para sa pribadong lokal na chat: Text Model, Vision Model, isang offline na edisyon ng Wikipedia, at ang Kahon ng Emergency.", "ap.hero.consent": "Ang pag-enable sa mode na ito ay magsisimula sa pag-download ng Text Model at maliit na Simple English Wikipedia. Opsyonal ang lokal na vision at kailangang i-enable nang hiwalay.", - "ap.vision.auto": "Opsyonal ang lokal na vision at hindi kusang nagda-download. Kailangan muna ng WebBrain VL 2 450M ang iyong pahintulot sa Mga Setting → Mga Pantulong na Modelo → Bisyon.", + "ap.vision.auto": "Opsyonal ang lokal na vision at hindi kusang nagda-download. Kailangan muna ng WebBrain VL 2 450M ang iyong pahintulot sa Mga Provider → Bisyon.", "ap.vision.waiting": "Naka-disable hanggang tahasan mong i-enable ang lokal na vision", "ap.vision.text_model_sees": "Nakakabasa na ng mga larawan ang iyong Text Model na Ternary Bonsai 2 2B Vision. Walang dagdag na download.", "ap.enabled": "Naka-enable", @@ -1667,7 +1667,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Offline wiedza, pod Twoją kontrolą", "ap.hero.desc": "Skonfiguruj cztery podstawowe elementy prywatnego czatu lokalnego: model tekstowy, model wizyjny, jedną wersję Wikipedii offline i Skrzynkę awaryjną.", "ap.hero.consent": "Włączenie tego trybu rozpoczyna pobieranie modelu tekstowego i małej Wikipedii w uproszczonym angielskim. Lokalna wizja pozostaje opcjonalna i wymaga osobnego włączenia.", - "ap.vision.auto": "Lokalna wizja jest opcjonalna i nigdy nie pobiera się sama. WebBrain VL 2 450M wymaga najpierw Twojej zgody w Ustawienia → Modele pomocnicze → Wizja.", + "ap.vision.auto": "Lokalna wizja jest opcjonalna i nigdy nie pobiera się sama. WebBrain VL 2 450M wymaga najpierw Twojej zgody w Dostawcy → Wizja.", "ap.vision.waiting": "Wyłączona do czasu jawnego włączenia lokalnej wizji", "ap.vision.text_model_sees": "Twój model tekstowy, Ternary Bonsai 2 2B Vision, już czyta obrazy. Bez dodatkowego pobierania.", "ap.enabled": "Włączone", @@ -1794,7 +1794,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "ידע לא מקוון בשליטתך", "ap.hero.desc": "הגדירו את ארבעת הרכיבים החיוניים לצ׳אט מקומי ופרטי: מודל טקסט, מודל ראייה, מהדורת ויקיפדיה אחת לשימוש לא מקוון וקופסת חירום.", "ap.hero.consent": "הפעלת מצב זה מתחילה את הורדות מודל הטקסט וויקיפדיה הקטנה יותר באנגלית פשוטה. הראייה המקומית נשארת אופציונלית ויש להפעיל אותה בנפרד.", - "ap.vision.auto": "ראייה מקומית היא אופציונלית ואף פעם לא מורדת מעצמה. WebBrain VL 2 450M דורש קודם את הסכמתכם בהגדרות ← מודלים מסייעים ← ראייה.", + "ap.vision.auto": "ראייה מקומית היא אופציונלית ואף פעם לא מורדת מעצמה. WebBrain VL 2 450M דורש קודם את הסכמתכם בספקים ← ראייה.", "ap.vision.waiting": "מושבת עד שתפעילו במפורש את הראייה המקומית", "ap.vision.text_model_sees": "מודל הטקסט שלכם, Ternary Bonsai 2 2B Vision, כבר קורא תמונות. אין צורך בהורדה נוספת.", "ap.enabled": "מופעל", @@ -1921,7 +1921,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "आपके नियंत्रण में ऑफ़लाइन ज्ञान", "ap.hero.desc": "निजी स्थानीय चैट के लिए चार आवश्यक चीज़ें सेट अप करें: टेक्स्ट मॉडल, विज़न मॉडल, विकिपीडिया का एक ऑफ़लाइन संस्करण और आपातकालीन बॉक्स।", "ap.hero.consent": "इस मोड को चालू करने पर टेक्स्ट मॉडल और छोटे सरल अंग्रेज़ी विकिपीडिया का डाउनलोड शुरू होता है। स्थानीय विज़न वैकल्पिक रहता है और इसे अलग से सक्षम करना होगा।", - "ap.vision.auto": "स्थानीय विज़न वैकल्पिक है और अपने आप कभी डाउनलोड नहीं होता। WebBrain VL 2 450M के लिए पहले सेटिंग्स → सहायक मॉडल → दृष्टि में आपकी सहमति चाहिए।", + "ap.vision.auto": "स्थानीय विज़न वैकल्पिक है और अपने आप कभी डाउनलोड नहीं होता। WebBrain VL 2 450M के लिए पहले प्रदाता → दृष्टि में आपकी सहमति चाहिए।", "ap.vision.waiting": "जब तक आप स्थानीय विज़न को स्पष्ट रूप से सक्षम न करें, तब तक अक्षम", "ap.vision.text_model_sees": "आपका टेक्स्ट मॉडल, Ternary Bonsai 2 2B Vision, पहले से इमेज पढ़ता है। कोई अतिरिक्त डाउनलोड नहीं।", "ap.enabled": "सक्षम", @@ -2048,7 +2048,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Conhecimento offline, sob seu controle", "ap.hero.desc": "Configure os quatro elementos essenciais para um bate-papo local e privado: um Modelo de Texto, um Modelo de Visão, uma edição offline da Wikipédia e a Caixa de Emergência.", "ap.hero.consent": "Ativar este modo inicia os downloads do Modelo de Texto e da Wikipédia pequena em inglês simples. A visão local continua opcional e deve ser ativada separadamente.", - "ap.vision.auto": "A visão local é opcional e nunca é baixada sozinha. O WebBrain VL 2 450M precisa antes do seu consentimento em Configurações → Modelos auxiliares → Visão.", + "ap.vision.auto": "A visão local é opcional e nunca é baixada sozinha. O WebBrain VL 2 450M precisa antes do seu consentimento em Provedores → Visão.", "ap.vision.waiting": "Desativada até você ativar explicitamente a visão local", "ap.vision.text_model_sees": "Seu modelo de texto, Ternary Bonsai 2 2B Vision, já lê imagens. Sem download extra.", "ap.enabled": "Ativado", @@ -2175,7 +2175,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Kiến thức ngoại tuyến, dưới sự kiểm soát của bạn", "ap.hero.desc": "Thiết lập bốn thành phần thiết yếu cho trò chuyện cục bộ riêng tư: Mô hình Văn bản, Mô hình Thị giác, một phiên bản Wikipedia ngoại tuyến và Hộp Khẩn Cấp.", "ap.hero.consent": "Bật chế độ này sẽ bắt đầu tải Mô hình Văn bản và Wikipedia tiếng Anh đơn giản dung lượng nhỏ. Thị giác cục bộ vẫn là tùy chọn và phải được bật riêng.", - "ap.vision.auto": "Thị giác cục bộ là tùy chọn và không bao giờ tự tải về. WebBrain VL 2 450M cần bạn đồng ý trước trong Cài đặt → Mô hình hỗ trợ → Tầm nhìn.", + "ap.vision.auto": "Thị giác cục bộ là tùy chọn và không bao giờ tự tải về. WebBrain VL 2 450M cần bạn đồng ý trước trong Nhà cung cấp → Tầm nhìn.", "ap.vision.waiting": "Bị tắt cho đến khi bạn bật rõ ràng thị giác cục bộ", "ap.vision.text_model_sees": "Mô hình văn bản của bạn, Ternary Bonsai 2 2B Vision, đã đọc được hình ảnh. Không cần tải thêm.", "ap.enabled": "Đã bật", @@ -2302,7 +2302,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "আপনার নিয়ন্ত্রণে অফলাইন জ্ঞান", "ap.hero.desc": "ব্যক্তিগত স্থানীয় চ্যাটের জন্য চারটি অপরিহার্য উপাদান সেট আপ করুন: টেক্সট মডেল, ভিশন মডেল, উইকিপিডিয়ার একটি অফলাইন সংস্করণ এবং জরুরি বাক্স।", "ap.hero.consent": "এই মোড চালু করলে টেক্সট মডেল ও ছোট সহজ ইংরেজি উইকিপিডিয়ার ডাউনলোড শুরু হয়। স্থানীয় ভিশন ঐচ্ছিক থাকে এবং আলাদাভাবে চালু করতে হয়।", - "ap.vision.auto": "লোকাল ভিশন ঐচ্ছিক এবং কখনও নিজে থেকে ডাউনলোড হয় না। WebBrain VL 2 450M-এর জন্য আগে সেটিংস → সহায়ক মডেল → দৃষ্টি-তে আপনার সম্মতি লাগবে।", + "ap.vision.auto": "লোকাল ভিশন ঐচ্ছিক এবং কখনও নিজে থেকে ডাউনলোড হয় না। WebBrain VL 2 450M-এর জন্য আগে প্রদানকারী → দৃষ্টি-তে আপনার সম্মতি লাগবে।", "ap.vision.waiting": "আপনি স্পষ্টভাবে স্থানীয় ভিশন চালু না করা পর্যন্ত নিষ্ক্রিয়", "ap.vision.text_model_sees": "আপনার টেক্সট মডেল Ternary Bonsai 2 2B Vision ইতিমধ্যে ছবি পড়তে পারে। বাড়তি ডাউনলোড লাগবে না।", "ap.enabled": "চালু", @@ -2429,7 +2429,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "دانش آفلاین، تحت کنترل شما", "ap.hero.desc": "چهار جزء ضروری برای چت خصوصی و محلی را راه‌اندازی کنید: مدل متن، مدل بینایی، یک نسخهٔ آفلاین ویکی‌پدیا و جعبهٔ اضطراری.", "ap.hero.consent": "روشن کردن این حالت، دانلود مدل متن و نسخهٔ کوچک ویکی‌پدیای انگلیسی ساده را آغاز می‌کند. بینایی محلی اختیاری است و باید جداگانه فعال شود.", - "ap.vision.auto": "بینایی محلی اختیاری است و هرگز خودبه‌خود دانلود نمی‌شود. WebBrain VL 2 450M ابتدا به رضایت شما در تنظیمات ← مدل‌های کمکی ← چشم انداز نیاز دارد.", + "ap.vision.auto": "بینایی محلی اختیاری است و هرگز خودبه‌خود دانلود نمی‌شود. WebBrain VL 2 450M ابتدا به رضایت شما در ارائه دهندگان ← چشم انداز نیاز دارد.", "ap.vision.waiting": "تا زمانی که بینایی محلی را صریحاً فعال نکنید، غیرفعال است", "ap.vision.text_model_sees": "مدل متنی شما، Ternary Bonsai 2 2B Vision، از قبل تصویر می‌خواند. دانلود اضافه لازم نیست.", "ap.enabled": "فعال", @@ -2556,7 +2556,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Offline-kennis onder uw controle", "ap.hero.desc": "Stel de vier essentiële onderdelen voor privé lokaal chatten in: een tekstmodel, een visiemodel, één offline Wikipedia-editie en de Noodbox.", "ap.hero.consent": "Als u deze modus inschakelt, starten de downloads van het tekstmodel en de kleine Simple English Wikipedia. Lokale visie blijft optioneel en moet apart worden ingeschakeld.", - "ap.vision.auto": "Lokale visie is optioneel en downloadt nooit vanzelf. Voor WebBrain VL 2 450M is eerst je toestemming nodig in Instellingen → Ondersteunende modellen → Visie.", + "ap.vision.auto": "Lokale visie is optioneel en downloadt nooit vanzelf. Voor WebBrain VL 2 450M is eerst je toestemming nodig in Providers → Visie.", "ap.vision.waiting": "Uitgeschakeld totdat u lokale visie expliciet inschakelt", "ap.vision.text_model_sees": "Je tekstmodel, Ternary Bonsai 2 2B Vision, leest al afbeeldingen. Geen extra download.", "ap.enabled": "Aan", @@ -2683,7 +2683,7 @@ const apocalypseModeTranslations = { "ap.hero.title": "Offline-Wissen unter Ihrer Kontrolle", "ap.hero.desc": "Richte die vier wesentlichen Komponenten für einen privaten lokalen Chat ein: ein Textmodell, ein Bildmodell, eine Offline-Ausgabe der Wikipedia und die Notfallbox.", "ap.hero.consent": "Beim Aktivieren dieses Modus starten die Downloads des Textmodells und der kleinen Simple-English-Wikipedia. Lokale Bilderkennung bleibt optional und muss separat aktiviert werden.", - "ap.vision.auto": "Lokale Bilderkennung ist optional und lädt nie von selbst herunter. WebBrain VL 2 450M braucht zuerst deine Zustimmung unter Einstellungen → Assistenzmodelle → Vision.", + "ap.vision.auto": "Lokale Bilderkennung ist optional und lädt nie von selbst herunter. WebBrain VL 2 450M braucht zuerst deine Zustimmung unter Anbieter → Vision.", "ap.vision.waiting": "Deaktiviert, bis du lokale Bilderkennung ausdrücklich aktivierst", "ap.vision.text_model_sees": "Dein Textmodell, Ternary Bonsai 2 2B Vision, liest bereits Bilder. Kein zusätzlicher Download.", "ap.enabled": "Aktiviert", diff --git a/src/firefox/src/ui/locales/ar.js b/src/firefox/src/ui/locales/ar.js index 3c7073da22..8e8639ba0d 100644 --- a/src/firefox/src/ui/locales/ar.js +++ b/src/firefox/src/ui/locales/ar.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'تصغير واجهة الإضافة', 'sp.ui_scale.increase': 'تكبير واجهة الإضافة', 'sp.ui_scale.reset': 'إعادة الضبط', - 'st.display.ui_scale.label': 'تكبير واجهة الإضافة', - 'st.display.ui_scale.decrease': 'تصغير واجهة الإضافة', - 'st.display.ui_scale.increase': 'تكبير واجهة الإضافة', - 'st.display.ui_scale.reset': 'إعادة الضبط', - 'st.display.ui_scale.desc': 'غيّر حجم الشريط الجانبي ونافذة الدردشة المنفصلة دون تغيير تكبير صفحات الويب.', - 'st.display.ui_scale.shortcuts': 'اختصارات مخصصة: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'غير معيّنة', - 'st.display.ui_scale.manage_shortcuts': 'تخصيص الاختصارات', 'tool.delegate_research': 'جارٍ البحث باستخدام ChatGPT', 'st.display.research_escalation.label': 'تصعيد البحث', 'st.display.research_escalation.desc': 'عند التفعيل، قد يطلب WebBrain موافقتك قبل إرسال مطالبة بحثية معقدة للقراءة فقط إلى ChatGPT. معطّل افتراضيًا. لا تتم مشاركة المطالبة الدقيقة إلا بعد موافقتك الصريحة.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "عدم المتابعة", "sp.recipient.reason_unrequested": "لم يتمكن WebBrain من فهم أن طلبك يتضمن إرسال رسالة. المحادثة المفتوحة على {host} مع {recipient}.", "sp.recipient.reason_unnamed": "لم يتمكن WebBrain من فهم من يجب أن يتلقى هذه الرسالة من طلبك. المحادثة المفتوحة على {host} مع {recipient}.", - 'st.tab.permissions': "الأذونات", 'st.perms.revoke': "إلغاء", 'st.perms.clear_all': "مسح كل الأذونات", 'st.perms.gate.label': "السؤال قبل الإجراءات المهمة", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'ابدأ', 'ob.btn.skip': 'تخطي الآن', 'ob.btn.start': 'بدء', - 'ob.cloud.body': 'WebBrain Compass جاهز مع بدل أسبوعي مجاني. قد يتم الاحتفاظ بمحادثات Compass المحددة واستخدامها لتحسين WebBrain بينما يكون Help Improve WebBrain قيد التشغيل افتراضيًا. يمكنك إيقاف تشغيله في الإعدادات → عام.', + 'ob.cloud.body': 'WebBrain Compass جاهز مع بدل أسبوعي مجاني. قد يتم الاحتفاظ بمحادثات Compass المحددة واستخدامها لتحسين WebBrain بينما يكون Help Improve WebBrain قيد التشغيل افتراضيًا. يمكنك إيقاف تشغيله في الإعدادات → متقدم.', 'ob.cloud.change': 'تغيير', 'ob.cloud.using': 'استخدام WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'النتيجة', 'sp.api.enabled_html': '🔓 تفعيل تعديلات واجهة API لهذه المحادثة. يمكن للوكيل الآن استخدام POST/PUT/PATCH/DELETE عبر fetch_url و execute_js عندما يرى أن API أكثر موثوقية من الواجهة. يظل التفاعل عبر الواجهة هو الافتراضي. تُمسح هذه العلامة عند تصفير المحادثة.', - 'sp.permissions.disabled_html': '⚠️ مطالبات الأذونات مُعطّلة. سيُنقر WebBrain ويكتب ويتنقّل ويُشغّل JavaScript ويرفع ويُنزّل ويُسجّل ويجدول أعمالًا مستقبلية دون أن يسأل أولًا. أعد تفعيل هذا من الإعدادات ← الأذونات ← السؤال قبل الإجراءات المهمة.', + 'sp.permissions.disabled_html': '⚠️ مطالبات الأذونات مُعطّلة. سيُنقر WebBrain ويكتب ويتنقّل ويُشغّل JavaScript ويرفع ويُنزّل ويُسجّل ويجدول أعمالًا مستقبلية دون أن يسأل أولًا. أعد تفعيل هذا من زر ⚠ بجوار الميكروفون.', 'sp.permissions.button': 'مطالبات الأذونات: مُفعّلة', 'sp.permissions.button_off': 'مطالبات الأذونات: مُعطّلة', 'sp.permissions.gate_desc': 'يسأل WebBrain في أول مرة ينقر فيها أو يكتب أو ينزّل ملفات أو يشغّل تعليمات برمجية على موقع.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'انتظار «{selector}»', 'st.title': 'إعدادات WebBrain', - 'st.subtitle': 'اضبط مزوّدي LLM والتفضيلات · v{version}', + 'st.subtitle': 'اضبط طريقة عمل WebBrain · v{version}', 'st.tab.display': 'عام', + 'st.tab.budgets': 'الميزانيات', + 'st.tab.advanced': 'متقدم', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'الكلام', + 'st.tab.generative': 'التوليد', + 'st.tab.decision': 'القرار', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'مزوّدو WebBrain', + 'st.providers_page.subtitle': 'اختر النماذج التي يستخدمها WebBrain · v{version}', + 'st.permissions_page.title': 'أذونات WebBrain', + 'st.permissions_page.subtitle': 'المواقع التي يمكن لـ WebBrain التصرف فيها دون أن يسأل أولًا', 'st.tab.providers': 'المزوّدون', 'st.tab.vision': 'الرؤية', 'st.tab.profile': 'الملف الشخصي', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "تحديث طريقة الدفع", 'st.account.manage_billing': 'إدارة الفوترة', - 'st.display.language.label': 'اللغة', - 'st.display.language.desc': 'لغة واجهة إضافة WebBrain.', 'st.display.verbose.label': 'الوضع المفصّل', 'st.display.verbose.desc': 'إظهار تفاصيل استدعاءات الأدوات كاملة، والمعطيات، ونتائج JSON الأولية. مُعطَّل افتراضيًا للحصول على تجربة محادثة أنظف.', 'st.display.selection_shortcut.label': 'اختصار التحديد', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'لقطة شاشة تلقائية', "st.display.auto_screenshot.desc": "التقط لقطة شاشة لنافذة العرض تلقائيًا بعد أن يتصرف الوكيل في الصفحة، لكي يرى مسار الرؤية المحدد ما تغيّر. يستهلك ذلك مزيدًا من الرموز. إذا لم تتوفر الرؤية، يتم تخطي الإثراء وتستمر المهمة مع إشعار بالحالة.", 'st.display.auto_screenshot.off': 'مُعطَّل', - 'st.display.auto_screenshot.navigation': 'عند التنقّل', - 'st.display.auto_screenshot.state_change': 'عند تغيّر الحالة (افتراضي)', + 'st.display.auto_screenshot.navigation': 'عند التنقّل (افتراضي)', + 'st.display.auto_screenshot.state_change': 'عند تغيّر الحالة', 'st.display.auto_screenshot.every_step': 'كل خطوة', 'st.display.tracing.label': 'تسجيل التتبّعات (لمقارنة النماذج)', - 'st.display.tracing.desc_html': 'حفظ كل تشغيل (طلبات LLM، الاستجابات، استدعاءات الأدوات، لقطات الشاشة) في IndexedDB المحلية حتى تتمكّن من فحص النماذج ومقارنتها جنبًا إلى جنب. يُفتح في علامة تبويب «التتبّعات» منفصلة. مُعطَّل افتراضيًا لأنه يضيف عمليات كتابة على القرص في كل خطوة. افتح صفحة التتبّعات →', - 'st.display.lossless_tracing.label': 'تسجيل تفاصيل الطلب الكاملة (طبقة تصحيح الأخطاء)', - 'st.display.lossless_tracing.desc_html': 'يحفظ أيضًا المطالبات والرسائل ومخططات الأدوات الكاملة لكل طلب نموذج لغوي بدلاً من الملخصات الخالية من المحتوى، ويحتفظ بما يصل إلى 200 كيلوبايت من كل نتيجة أداة. يتيح تصحيح الأخطاء العميق وإعادة بناء الطلبات. معطّل افتراضيًا لأنه يكتب محتوى محادثتك محليًا ويستهلك مساحة أكبر بكثير. يتطلب تفعيل تسجيل التتبعات.', + 'st.display.tracing.desc_html': 'حفظ كل تشغيل (طلبات LLM، الاستجابات، استدعاءات الأدوات، لقطات الشاشة) في IndexedDB المحلية حتى تتمكّن من فحص النماذج ومقارنتها جنبًا إلى جنب، بما في ذلك المطالبات والرسائل ومخططات الأدوات الكاملة لكل طلب نموذج لغوي وما يصل إلى 200 كيلوبايت من كل نتيجة أداة. يُفتح في علامة تبويب «التتبّعات» منفصلة. مُعطَّل افتراضيًا لأنه يكتب محتوى محادثتك محليًا ويستهلك مساحة أكبر بكثير. افتح صفحة التتبّعات →', 'st.display.allow_local_network.label': 'السماح للوكيل بالوصول إلى الشبكة المحلية', 'st.display.allow_local_network.desc': 'يسمح لأداة fetch_url للوكيل بالوصول إلى عناوين loopback (127.0.0.1، localhost) وعناوين RFC1918 الخاصة (10.x، 192.168.x، 172.16–31.x). مفيد لخوادم التطوير المحلية، وأدوات الإنترانت، وواجهات API ذاتية الاستضافة. مُعطَّل افتراضيًا. عند تعطيله، تُحظر عناوين IP الخاصة وloopback المكتوبة في URL وأسماء localhost. لا يتم فحص تحليل DNS، لذا قد تصل أسماء أخرى إلى عناوين محلية. تظل عناوين IP الحرفية لبيانات السحابة (169.254.169.254) وأسماء بيانات السحابة المدرجة أو *.internal/*.local محظورة حتى عند التفعيل.', 'st.display.notify_sound.label': "أصوات الإشعارات", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "وضع الرؤية مُفعّل للمزوّد النشط.", "sp.vision.off": "وضع الرؤية مُعطّل للمزوّد النشط.", "sp.vision.error": "فشل تبديل وضع الرؤية: {msg}", - "st.tab.multimodal": "النماذج المساعدة", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "موصى به. عند تفعيله، يطلب WebBrain الإذن في أول مرّة ينقر فيها أو يكتب أو يتنقّل أو يُشغّل JavaScript أو يرفع أو يُنزّل أو يُسجّل على موقع (ثم يتذكّر اختيارك). عطّله للاستخدام السريع دون مطالبات على المواقع التي تثق بها تمامًا.", "st.perms.gate.warning": "⚠️ مطالبات الأذونات مُعطّلة. سينقر WebBrain ويكتب ويتنقّل ويُشغّل JavaScript ويرفع ويُنزّل ويُسجّل على أي موقع دون أن يسأل — بما في ذلك على الصفحات التي قد يتحكّم في محتواها مهاجم. لا يزال محتوى الصفحة يُعامَل داخليًا كغير موثوق، لكن لا شيء سيمنع تعليمة محقونة من تشغيل إجراء. لا تُبقِ هذا معطّلًا إلا إذا كنت تثق تمامًا بكل موقع تستخدم المساعد عليه.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "الإعداد الافتراضي للنظام", "st.display.download_directory.error": "استخدم مجلدًا نسبيًا مثل WebBrain أو Work/WebBrain. لا يُسمح بالمسارات المطلقة أو “..”.", "st.display.strict_secret.label": "المعالجة الصارمة للأسرار", - "st.display.strict_secret.desc": "رفض اقتباس بيانات الاعتماد (كلمات المرور، مفاتيح API، الرموز، رموز OTP) في الملخّصات أو نص المساعد — حتى عندما تطلبها صراحةً. مفيد إذا كنت تشارك ملفات التتبّع أو تشارك شاشتك بانتظام. مُعطّل افتراضيًا ليتمكّن الوكيل من تكرار القيمة الدقيقة التي تطلبها عند الحاجة. فعّله (الإعدادات ← الأمان) عندما تريد إبقاء ملخّصات `done` مرتّبة وتجنّب تكرار بيانات الاعتماد.", + "st.display.strict_secret.desc": "رفض اقتباس بيانات الاعتماد (كلمات المرور، مفاتيح API، الرموز، رموز OTP) في الملخّصات أو نص المساعد — حتى عندما تطلبها صراحةً. مفيد إذا كنت تشارك ملفات التتبّع أو تشارك شاشتك بانتظام. مُعطّل افتراضيًا ليتمكّن الوكيل من تكرار القيمة الدقيقة التي تطلبها عند الحاجة. فعّله عندما تريد إبقاء ملخّصات `done` مرتّبة وتجنّب تكرار بيانات الاعتماد.", "st.display.request_timeout.label": "مهلة طلب LLM", "st.display.request_timeout.desc": "الحد الأقصى لانتظار ترويسات الاستجابة ولكل فترة توقف بين أجزاء الاستجابة المتدفقة. الافتراضي: 120 ثانية. زِد المدة للنماذج المحلية البطيئة، خاصة عند تشغيلها على المعالج أو مع سياق كبير.", "st.providers.filter.all": "الكل", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'تُضاف الرسائل إلى قائمة الانتظار بينما يكون WebBrain مشغولًا. يمكن فقط لـ /help و /progress و /btw و /scratchpad و /memory و /schedule --list و /watch و /dangerously-skip-permissions و /screenshot و /export و /export --traces و /verbose العمل فورًا كأوامر slash.', 'tool.go_back': 'العودة للخلف', 'tool.go_forward': 'التقدم للأمام', - 'st.display.search.placeholder': 'البحث في الإعدادات العامة', - 'st.display.search.empty': 'لا توجد إعدادات عامة مطابقة.', + 'st.display.search.placeholder': 'البحث في الإعدادات', + 'st.display.search.empty': 'لا توجد إعدادات مطابقة.', 'st.display.advanced': 'متقدم', ...getApocalypseModeCopy('ar'), ...getEmergencyBoxCopy('ar'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "أطول ضلع (العرض أو الارتفاع) بالبكسل لأي لقطة تُرسل إلى الرؤية. حد أصغر يصغّر الصور قبل الإرسال فيخفض الرموز والتكلفة. حد أكبر يحافظ على الدقة.", "st.imageBudget.warning": "⚠️ تنطبق هذه الإعدادات على اللقطات المخصصة للرؤية (لقطة تلقائية، /screenshot، صفحة كاملة، verify_form). الصور المحفوظة يدويًا بدقة كاملة لا تتأثر. «Image detail» تحترمه نقاط النهاية بأسلوب OpenAI؛ قد يتجاهلها مزوّدون آخرون.", - "st.redaction.heading": "تعتيم لقطات الشاشة", "st.redaction.toggle.label": "إخفاء المحتوى الحساس في لقطات الشاشة", "st.redaction.toggle.desc": "قبل إرسال لقطة الشاشة إلى نموذج رؤية، يقوم بتغبيش حقول النماذج والنص الذي يبدو كبريد إلكتروني أو رقم هاتف. يعمل الكشف بالكامل على جهازك — لا يُنقل أي شيء إضافي.", "st.redaction.warning": "⚠️ هذا تعتيم بأفضل جهد ومن نوع fail-open: إذا تعذّر تشغيل التعتيم على صفحة ما (مثلًا مباشرة بعد التنقل، أو في عارضات PDF، أو على صفحات المتصفح المقيّدة)، فستُرسل لقطة الشاشة كما هي دون تعتيم. يعتمد الكشف فقط على استدلالات DOM — النص المرسوم على عنصر canvas، أو البيانات الشخصية داخل الصور، أو أي شيء لا يُعرف كحقل نموذج أو نص بريد/هاتف قد يفلت من الكشف، كما أن نص الصفحة المُرسل إلى النموذج لا يُعتَّم بهذا الإعداد. هذا ليس ضمانًا أمنيًا. للخصوصية الكاملة، استخدم نموذجًا محليًا/دون اتصال (llama.cpp أو Ollama): عندها لن تغادر لقطات الشاشة جهازك إطلاقًا ولن تعود هناك حاجة للتعتيم.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "تصدير جلسة التتبع المحفوظة كاملة بصيغة JSON، بما فيها لقطات الشاشة", "sp.export_traces.recording_truncated": "تم تصدير جميع السجلات المحفوظة بصيغة JSON. حُذف بعض المحتوى أثناء التسجيل ولا يمكن استعادته بالتصدير.", "sp.slash.export_traces": "تصدير سلسلة الأدوات (التتبعات)", - "sp.export_traces.none": "لا توجد تتبعات لهذه المحادثة. فعّل «تسجيل التتبعات» في الإعدادات ثم أعد التشغيل.", + "sp.export_traces.none": "لا توجد تتبعات لهذه المحادثة. فعّل «تسجيل التتبعات» في الإعدادات ← متقدم ثم أعد التشغيل.", "sp.export_traces.error": "تعذّر تصدير التتبعات.", "sp.export_traces.done": "تم تصدير سلسلة الأدوات.", "sp.export_traces.no_conversation": "لا يوجد ما يُصدَّر بعد — ابدأ محادثة أولًا.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "تم تصدير سلسلة الأدوات. قد تُفقد الجولات الأقدم إذا كان لهذه المحادثة كثير من التتبعات.", "st.display.help_improve.label": "المساعدة في تحسين WebBrain", "st.display.help_improve.desc_html": "السماح بالاحتفاظ بتفاعلات محددة مع WebBrain Compass واستخدامها للتقييم والتحسين والضبط الدقيق والتدريب. مفعّل افتراضيًا. عطّله لمنع استخدام تفاعلات Compass المستقبلية لهذه الأغراض. لا يجمع WebBrain طلبات النماذج المحلية أو طلبات واجهة API الخاصة بك إلا من المورّدين الذين تفعّل لديهم «مشاركة الاستعلامات لأغراض البحث». سياسة الخصوصية →", - "st.providers.webbrain_data_use.body": "يتضمن WebBrain Compass استخدامًا يوميًا مجانيًا. عندما تكون «المساعدة في تحسين WebBrain» مفعّلة افتراضيًا، قد يتم الاحتفاظ بمحادثات Compass محددة واستخدامها للتقييم والتحسين والضبط الدقيق والتدريب. عطّلها من عام ← متقدم لاستبعاد تفاعلات Compass المستقبلية من هذه الاستخدامات. لا يجمع WebBrain طلبات النماذج المحلية أو طلبات واجهة API الخاصة بك إلا عند تفعيل خيار «مشاركة الاستعلامات لأغراض البحث» الخاص بهذا المورّد. {privacyLink}. لمزيد من الاستخدام، اشترك عبر {subscribeLink}. أدِر الفوترة عبر {accountLink}.", + "st.providers.webbrain_data_use.body": "يتضمن WebBrain Compass استخدامًا يوميًا مجانيًا. عندما تكون «المساعدة في تحسين WebBrain» مفعّلة افتراضيًا، قد يتم الاحتفاظ بمحادثات Compass محددة واستخدامها للتقييم والتحسين والضبط الدقيق والتدريب. عطّلها من الإعدادات ← متقدم لاستبعاد تفاعلات Compass المستقبلية من هذه الاستخدامات. لا يجمع WebBrain طلبات النماذج المحلية أو طلبات واجهة API الخاصة بك إلا عند تفعيل خيار «مشاركة الاستعلامات لأغراض البحث» الخاص بهذا المورّد. {privacyLink}. لمزيد من الاستخدام، اشترك عبر {subscribeLink}. أدِر الفوترة عبر {accountLink}.", 'st.providers.share_research.label': "مشاركة الاستعلامات لأغراض البحث", 'st.providers.share_research.hint': "يرسل المطالبات والردود من هذا المورّد إلى WebBrain للتقييم والتحسين، بما في ذلك المورّد والنموذج المستخدَمين. تُحذف الصور والمرفقات الثنائية ويُقتطع النص قبل المشاركة؛ ويُرسَل النص المتبقي كما هو.", 'st.providers.share_research.confirm': "مشاركة استعلامات هذا المورّد مع WebBrain لأغراض البحث؟\n\nعند التفعيل، ستُرسَل مطالباتك وردودك وتفاعلات الأدوات مع هذا المورّد إلى WebBrain للتقييم والتحسين، مع اسم المورّد والنموذج. يُرسَل النص كما هو بعد حذف الصور واقتطاع المحتوى الطويل، لذا تجنّب مشاركة البيانات الشخصية الحساسة. يمكنك إيقاف ذلك في أي وقت لإيقاف المشاركة مستقبلاً.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "هل تريد مقاطعات أقل؟ يتذكر خيار «السماح دائمًا» هذا الموقع. يعطّل الأمر أدناه مطالبات أذونات WebBrain على جميع المواقع.", "sp.perm.insert_skip_command": "إدراج /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "لم تتغير مسودتك. امسحها قبل إدراج الأمر.", - "ob.act.permissions_tip": "تكون مطالبات الأذونات مفعّلة افتراضيًا. يمكن للمستخدمين المتقدمين تعطيلها عالميًا باستخدام /dangerously-skip-permissions وإعادة تفعيلها من الإعدادات ← الأذونات.", + "ob.act.permissions_tip": "تكون مطالبات الأذونات مفعّلة افتراضيًا. يمكن للمستخدمين المتقدمين تعطيلها عالميًا باستخدام /dangerously-skip-permissions وإعادة تفعيلها من زر ⚠ بجوار الميكروفون.", 'st.provider.field.cache_read_cost_per_million': "تكلفة قراءة ذاكرة التخزين المؤقت المقدّرة ($ / مليون رمز)", 'st.provider.field.cache_write_cost_per_million': "تكلفة كتابة ذاكرة التخزين المؤقت لمدة 5 دقائق ($ / مليون رمز)", 'st.provider.field.cache_write_1h_cost_per_million': "تكلفة كتابة ذاكرة التخزين المؤقت لمدة ساعة واحدة ($ / مليون رمز)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "هل تريد استبدال النسخة السحابية المشفرة بإعداد WebBrain الحالي لهذا الجهاز؟", "st.sync.consent.legacy": "هل تريد تفعيل المزامنة المشفرة؟ سيرسل WebBrain نسخة مشفرة من طرف إلى طرف من ذكرياتك، والملء التلقائي لملفك الشخصي، وإعدادات موفر مفتاح واجهة برمجة التطبيقات (API) إلى WebBrain Compass. لا تتم مزامنة سجل الدردشة وتسجيلات الدخول عبر OAuth.", "st.sync.consent.denied": "لم يتم منح إذن المزامنة المشفرة.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "تغيّرت الصفحة أثناء تنفيذ المهمة ({before} → {after}). جارٍ متابعة المهمة.", 'sp.activity.generating_answer': "جارٍ إنشاء الإجابة…", 'sp.activity.retrying_response': "جارٍ إعادة محاولة الإجابة…", diff --git a/src/firefox/src/ui/locales/bn.js b/src/firefox/src/ui/locales/bn.js index ca638a5a27..389f5d51bb 100644 --- a/src/firefox/src/ui/locales/bn.js +++ b/src/firefox/src/ui/locales/bn.js @@ -14,14 +14,6 @@ export default { 'sp.ui_scale.decrease': 'এক্সটেনশনের UI ছোট করুন', 'sp.ui_scale.increase': 'এক্সটেনশনের UI বড় করুন', 'sp.ui_scale.reset': 'রিসেট', - 'st.display.ui_scale.label': 'এক্সটেনশনের UI জুম', - 'st.display.ui_scale.decrease': 'এক্সটেনশনের UI ছোট করুন', - 'st.display.ui_scale.increase': 'এক্সটেনশনের UI বড় করুন', - 'st.display.ui_scale.reset': 'রিসেট', - 'st.display.ui_scale.desc': 'পেজের জুম পরিবর্তন না করে সাইড প্যানেল এবং আলাদা চ্যাট উইন্ডোর আকার পরিবর্তন করুন।', - 'st.display.ui_scale.shortcuts': 'নির্দিষ্ট শর্টকাট: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'নির্ধারিত নয়', - 'st.display.ui_scale.manage_shortcuts': 'শর্টকাট কাস্টমাইজ করুন', 'tool.delegate_research': 'ChatGPT দিয়ে গবেষণা চলছে', 'st.display.research_escalation.label': 'গবেষণা এসকেলেশন', 'st.display.research_escalation.desc': 'সক্রিয় থাকলে, WebBrain একটি অস্বাভাবিক জটিল শুধু-পঠন গবেষণা প্রম্পট ChatGPT-তে পাঠানোর আগে অনুমতি চাইতে পারে। ডিফল্টভাবে বন্ধ। আপনার স্পষ্ট অনুমোদনের পরেই সঠিক প্রম্পটটি শেয়ার করা হয়।', @@ -497,7 +489,7 @@ export default { 'sp.step.result_label': "ফলাফল", 'sp.api.enabled_html': "🔓 API মিউটেশন সক্রিয় করা হয়েছে এই কথোপকথনের জন্য। এজেন্ট এখন fetch_url এবং execute_js এর মাধ্যমে POST/PUT/PATCH/DELETE ব্যবহার করতে পারে যখন এটি API-কে একটি ধাপের জন্য UI এর চেয়ে বেশি নির্ভরযোগ্য বলে বিচার করে। UI-প্রথম ডিফল্ট থাকে। আপনি কথোপকথন রিসেট করলে এই পতাকাটি পরিষ্কার হয়ে যায়।", - 'sp.permissions.disabled_html': "⚠️ অনুমতি প্রম্পট বন্ধ আছে. WebBrain প্রথমে জিজ্ঞাসা না করেই ক্লিক করবে, টাইপ করবে, নেভিগেট করবে, JavaScript চালাবে, আপলোড করবে, ডাউনলোড করবে, রেকর্ড করবে এবং ভবিষ্যৎ কাজের সময়সূচী করবে। সেটিংস → অনুমতি → আনুষঙ্গিক কর্মের আগে জিজ্ঞাসা করুন থেকে এটি পুনরায় সক্ষম করুন৷", + 'sp.permissions.disabled_html': "⚠️ অনুমতি প্রম্পট বন্ধ আছে. WebBrain প্রথমে জিজ্ঞাসা না করেই ক্লিক করবে, টাইপ করবে, নেভিগেট করবে, JavaScript চালাবে, আপলোড করবে, ডাউনলোড করবে, রেকর্ড করবে এবং ভবিষ্যৎ কাজের সময়সূচী করবে। মাইক্রোফোনের পাশের ⚠ বোতাম থেকে এটি পুনরায় চালু করুন।", 'sp.permissions.button': 'অনুমতি প্রম্পট: চালু', 'sp.permissions.button_off': 'অনুমতি প্রম্পট: বন্ধ', 'sp.permissions.gate_desc': 'কোনো সাইটে প্রথমবার ক্লিক, টাইপ, ডাউনলোড বা কোড চালানোর আগে WebBrain জিজ্ঞাসা করে।', @@ -655,7 +647,7 @@ export default { 'ob.act.warn1': "WebBrain পরিকল্পনার জন্য স্ক্রিনশট ক্যাপচার করতে পারে। স্বাস্থ্য, অর্থ, ডেটিং বা ব্যক্তিগত অ্যাকাউন্ট পোর্টালের মতো সংবেদনশীল পৃষ্ঠাগুলিতে এজেন্ট মোড ব্যবহার করা এড়িয়ে চলুন, যদি না আপনি সেই ঝুঁকি গ্রহণ করেন।", 'ob.act.warn2': "ওয়েব বিষয়বস্তুতে AI আচরণকে ম্যানিপুলেট করার জন্য ডিজাইন করা দূষিত প্রম্পট ইনজেকশন থাকতে পারে।", 'ob.act.warn3': "সর্বদা প্রস্তাবিত ক্রিয়াগুলি পর্যালোচনা করুন এবং রানগুলি বন্ধ করুন যা অপ্রত্যাশিত দেখায়।", - 'ob.act.permissions_tip': "অনুমতি প্রম্পট ডিফল্টরূপে চালু আছে. উন্নত ব্যবহারকারীরা /dangerously-skip-permissions এর মাধ্যমে বিশ্বব্যাপী সেগুলিকে নিষ্ক্রিয় করতে পারে এবং সেটিংস → অনুমতিগুলিতে পুনরায় সক্ষম করতে পারে৷", + 'ob.act.permissions_tip': "অনুমতি প্রম্পট ডিফল্টরূপে চালু আছে. উন্নত ব্যবহারকারীরা /dangerously-skip-permissions এর মাধ্যমে বিশ্বব্যাপী সেগুলিকে নিষ্ক্রিয় করতে পারে এবং মাইক্রোফোনের পাশের ⚠ বোতাম থেকে পুনরায় চালু করতে পারে।", 'ob.tokens.title': "একটি মডেল চয়ন করুন", 'ob.tokens.body': "WebBrain কাজ করার জন্য একটি ভাষা মডেল প্রয়োজন। আমরা প্রথমে স্থানীয় মডেলগুলি পরীক্ষা করব। যদি কোনটি উপলব্ধ না হয়, সেটিংস খুলুন এবং একটি প্রদানকারী যোগ করুন:", 'ob.tokens.scanning': "স্থানীয় মডেল পরীক্ষা করা হচ্ছে...", @@ -681,23 +673,32 @@ export default { 'ob.btn.done': "শুরু করুন", 'ob.btn.skip': "আপাতত এড়িয়ে যান", 'ob.btn.start': 'শুরু', - 'ob.cloud.body': 'WebBrain Compass একটি বিনামূল্যের সাপ্তাহিক ভাতা সহ প্রস্তুত৷ নির্বাচিত Compass কথোপকথনগুলি ধরে রাখা যেতে পারে এবং WebBrain উন্নত করতে ব্যবহার করা যেতে পারে যখন Help Improve WebBrain ডিফল্টরূপে চালু থাকে৷ আপনি এটি Settings → General এ বন্ধ করতে পারেন৷', + 'ob.cloud.body': 'WebBrain Compass একটি বিনামূল্যের সাপ্তাহিক ভাতা সহ প্রস্তুত৷ নির্বাচিত Compass কথোপকথনগুলি ধরে রাখা যেতে পারে এবং WebBrain উন্নত করতে ব্যবহার করা যেতে পারে যখন Help Improve WebBrain ডিফল্টরূপে চালু থাকে৷ আপনি এটি Settings → Advanced এ বন্ধ করতে পারেন৷', 'ob.cloud.change': 'পরিবর্তন', 'ob.cloud.using': 'WebBrain Compass ব্যবহার করছে৷', // --- Settings ---------------------------------------------------------- 'st.title': "WebBrain সেটিংস", - 'st.subtitle': "আপনার LLM প্রদানকারী এবং পছন্দগুলি কনফিগার করুন · v{version}৷", + 'st.subtitle': "WebBrain কীভাবে কাজ করে তা কনফিগার করুন · v{version}", 'st.tab.display': "সাধারণ", + 'st.tab.budgets': 'বাজেট', + 'st.tab.advanced': 'উন্নত', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'কথা', + 'st.tab.generative': 'জেনারেটিভ', + 'st.tab.decision': 'ডিসিশন', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain প্রদানকারী', + 'st.providers_page.subtitle': 'WebBrain যে মডেলগুলো ব্যবহার করে সেগুলো বেছে নিন · v{version}', + 'st.permissions_page.title': 'WebBrain অনুমতি', + 'st.permissions_page.subtitle': 'যেসব সাইটে WebBrain আগে জিজ্ঞাসা না করেই কাজ করতে পারে', 'st.tab.providers': "প্রদানকারী", 'st.tab.skills': "দক্ষতা", 'st.tab.vision': "দৃষ্টি", - 'st.tab.multimodal': "সহায়ক মডেল", 'st.tab.memory': "স্মৃতি", 'st.tab.profile': "প্রোফাইল", 'st.tab.account': "হিসাব", 'st.tab.captcha': "ক্যাপচা", - 'st.tab.permissions': "অনুমতি", 'st.perms.gate.label': "ফলাফলমূলক কর্মের আগে জিজ্ঞাসা করুন", 'st.perms.gate.desc': "প্রস্তাবিত চালু হলে, WebBrain প্রথমবার অনুমতি চায় এটি ক্লিক করে, টাইপ করে, নেভিগেট করে, জাভাস্ক্রিপ্ট চালায়, আপলোড করে, ডাউনলোড করে, রেকর্ড করে, বা কোনও সাইটে ভবিষ্যতের কাজের সময়সূচী করে (তারপর আপনার পছন্দ মনে রাখে)। আপনি সম্পূর্ণরূপে বিশ্বাস করেন এমন সাইটগুলিতে দ্রুত, প্রম্পট-মুক্ত ব্যবহারের জন্য বন্ধ করুন৷", @@ -719,8 +720,6 @@ export default { "st.account.update_payment": "পেমেন্ট পদ্ধতি আপডেট করুন", 'st.account.manage_billing': "বিলিং পরিচালনা করুন", - 'st.display.language.label': "ভাষা", - 'st.display.language.desc': "WebBrain প্লাগইনের জন্য ইন্টারফেস ভাষা।", 'st.display.theme.label': "চেহারা", 'st.display.theme.desc': "হালকা, অন্ধকার বা আপনার OS সেটিংস অনুসরণ করুন।", 'st.display.theme.system': "সিস্টেম", @@ -730,8 +729,8 @@ export default { 'st.display.download_directory.desc': "আপনার ব্রাউজার বা সিস্টেম ডাউনলোড ডিরেক্টরির ভিতরে ঐচ্ছিক সাবফোল্ডার। সিস্টেম ডিফল্ট ব্যবহার করতে ফাঁকা ছেড়ে দিন।", 'st.display.download_directory.placeholder': "সিস্টেম ডিফল্ট", 'st.display.download_directory.error': "একটি আপেক্ষিক ফোল্ডার ব্যবহার করুন যেমন WebBrain বা Work/WebBrain। সম্পূর্ণ পাথ এবং \"..\" অনুমোদিত নয়৷", - 'st.display.search.placeholder': "সাধারণ সেটিংস অনুসন্ধান করুন", - 'st.display.search.empty': "কোনো সাধারণ সেটিংস মেলে না।", + 'st.display.search.placeholder': "সেটিংস অনুসন্ধান করুন", + 'st.display.search.empty': "কোনো সেটিং মেলেনি।", 'st.display.advanced': "উন্নত", ...getApocalypseModeCopy('bn'), ...getEmergencyBoxCopy('bn'), @@ -787,20 +786,18 @@ export default { 'st.display.auto_screenshot.label': "অটো-স্ক্রিনশট", "st.display.auto_screenshot.desc": "এজেন্ট পৃষ্ঠায় কাজ করার পর স্বয়ংক্রিয়ভাবে ভিউপোর্টের স্ক্রিনশট নিন, যাতে নির্বাচিত ভিশন রুট পরিবর্তনটি দেখতে পারে। এতে বেশি টোকেন লাগে। ভিশন না থাকলে সমৃদ্ধকরণ এড়িয়ে কাজটি স্ট্যাটাস নোটিশসহ চলতে থাকে।", 'st.display.auto_screenshot.off': "বন্ধ", - 'st.display.auto_screenshot.navigation': "নেভিগেশন", - 'st.display.auto_screenshot.state_change': "রাষ্ট্র পরিবর্তনের উপর (ডিফল্ট)", + 'st.display.auto_screenshot.navigation': "নেভিগেশন (ডিফল্ট)", + 'st.display.auto_screenshot.state_change': "রাষ্ট্র পরিবর্তনের উপর", 'st.display.auto_screenshot.every_step': "প্রতিটি পদক্ষেপ", 'st.display.tracing.label': "রেকর্ড ট্রেস (মডেল তুলনা জন্য)", - 'st.display.tracing.desc_html': "স্থানীয় IndexedDB-তে প্রতিটি রান (LLM অনুরোধ, প্রতিক্রিয়া, টুল কল, স্ক্রিনশট) চালিয়ে যান যাতে আপনি পাশাপাশি মডেলগুলি পরিদর্শন এবং তুলনা করতে পারেন। একটি পৃথক ট্রেস ট্যাবে খোলে। ডিফল্টরূপে বন্ধ কারণ এটি প্রতি ধাপে ডিস্ক রাইট যোগ করে। ট্রেস পৃষ্ঠা খুলুন →", - 'st.display.lossless_tracing.label': 'সম্পূর্ণ অনুরোধের বিবরণ রেকর্ড করুন (ডিবাগ স্তর)', - 'st.display.lossless_tracing.desc_html': 'প্রতিটি LLM অনুরোধের সম্পূর্ণ প্রম্পট, বার্তা এবং টুল স্কিমা বিষয়বস্তুহীন সারাংশের পরিবর্তে সংরক্ষণ করে এবং প্রতিটি টুল ফলাফলের ২০০ KB পর্যন্ত রাখে। গভীর ডিবাগিং এবং অনুরোধ পুনর্নির্মাণ সক্ষম করে। ডিফল্টভাবে বন্ধ কারণ এটি আপনার কথোপকথনের বিষয়বস্তু স্থানীয়ভাবে লেখে এবং অনেক বেশি ডিস্ক ব্যবহার করে। ট্রেস রেকর্ডিং চালু থাকা প্রয়োজন।', + 'st.display.tracing.desc_html': "স্থানীয় IndexedDB-তে প্রতিটি রান (LLM অনুরোধ, প্রতিক্রিয়া, টুল কল, স্ক্রিনশট) সংরক্ষণ করুন, যাতে আপনি পাশাপাশি মডেলগুলি পরিদর্শন ও তুলনা করতে পারেন — প্রতিটি LLM অনুরোধের সম্পূর্ণ প্রম্পট, বার্তা ও টুল স্কিমা এবং প্রতিটি টুল ফলাফলের ২০০ KB পর্যন্ত সহ। একটি পৃথক ট্রেস ট্যাবে খোলে। ডিফল্টভাবে বন্ধ কারণ এটি আপনার কথোপকথনের বিষয়বস্তু স্থানীয়ভাবে লেখে এবং অনেক বেশি ডিস্ক ব্যবহার করে। ট্রেস পৃষ্ঠা খুলুন →", 'st.display.cost_session_limit.label': "মেঘ খরচ অধিবেশন ভাতা", 'st.display.cost_session_limit.desc': "স্টপ ক্লাউড এবং OpenRouter এই সেশনটি রিপোর্ট করা বা আনুমানিক খরচ ভাতা পৌঁছানোর পরে অন্য একটি প্রদত্ত মডেল কলের আগে চলে। ডিফল্ট $10।", 'st.display.cost_total_limit.label': "ক্লাউড খরচ মোট ভাতা", 'st.display.cost_total_limit.desc': "ট্র্যাক রিপোর্ট করা বা আনুমানিক ক্লাউড/OpenRouter মডেল এক্সটেনশন জুড়ে ব্যয় করে এবং ভাতাতে আরও প্রদত্ত কল বন্ধ করে। স্থানীয় প্রদানকারীদের গণনা করা হয় না.", 'st.display.cost_reset': "খরচ রিসেট করুন", 'st.display.strict_secret.label': "কঠোর গোপন হ্যান্ডলিং", - 'st.display.strict_secret.desc': "সারাংশ বা সহকারী টেক্সটে শংসাপত্র (পাসওয়ার্ড, API কী, টোকেন, ওটিপি) উদ্ধৃত করতে অস্বীকার করুন — এমনকি আপনি যখন স্পষ্টভাবে তাদের জন্য জিজ্ঞাসা করেন। আপনি যদি নিয়মিত ট্রেস ফাইল বা স্ক্রিন-শেয়ার করেন তবে দরকারী। ডিফল্টরূপে বন্ধ: এজেন্ট আপনার জিজ্ঞাসা করা নির্দিষ্ট মান, প্রয়োজনে পুনরায় বলতে পারে। `done` সারাংশ পরিপাটি রাখতে এবং শংসাপত্র কখনও পুনরাবৃত্তি না করতে চাইলে এটি চালু করুন (সেটিংস → নিরাপত্তা)।", + 'st.display.strict_secret.desc': "সারাংশ বা সহকারী টেক্সটে শংসাপত্র (পাসওয়ার্ড, API কী, টোকেন, ওটিপি) উদ্ধৃত করতে অস্বীকার করুন — এমনকি আপনি যখন স্পষ্টভাবে তাদের জন্য জিজ্ঞাসা করেন। আপনি যদি নিয়মিত ট্রেস ফাইল বা স্ক্রিন-শেয়ার করেন তবে দরকারী। ডিফল্টরূপে বন্ধ: এজেন্ট আপনার জিজ্ঞাসা করা নির্দিষ্ট মান, প্রয়োজনে পুনরায় বলতে পারে। `done` সারাংশ পরিপাটি রাখতে এবং শংসাপত্র কখনও পুনরাবৃত্তি না করতে চাইলে এটি চালু করুন।", 'st.display.allow_local_network.label': "এজেন্টকে স্থানীয় নেটওয়ার্ক অ্যাক্সেস করার অনুমতি দিন", 'st.display.allow_local_network.desc': "এজেন্টের fetch_url টুলকে লুপব্যাকে (127.0.0.1, localhost) এবং ব্যক্তিগত/RFC1918 ঠিকানায় (10.x, 192.168.x, 172.16–31.x) পৌঁছাতে দেয়। স্থানীয় ডেভ সার্ভার, ইন্ট্রানেট টুল বা স্ব-হোস্টেড API-এর জন্য দরকারী। ডিফল্টরূপে বন্ধ। বন্ধ থাকলে URL-এ সরাসরি লেখা ব্যক্তিগত ও লুপব্যাক IP ঠিকানা এবং localhost নাম ব্লক থাকে। DNS রেজল্যুশন পরীক্ষা করা হয় না, তাই অন্য হোস্টনাম স্থানীয় ঠিকানায় পৌঁছাতে পারে। ক্লাউড-মেটাডেটার সরাসরি IP ঠিকানা (169.254.169.254) এবং তালিকাভুক্ত মেটাডেটা বা *.internal/*.local হোস্টনাম চালু থাকলেও ব্লক থাকে।", 'st.display.scheduled_tasks.label': "নির্ধারিত কাজ", @@ -890,7 +887,7 @@ export default { 'st.providers.compat.value.max': "সর্বোচ্চ", 'st.providers.compat.value.system': "সিস্টেম", 'st.providers.compat.value.developer': "বিকাশকারী", - 'st.providers.webbrain_data_use.body': "বিনামূল্যে দৈনিক WebBrain Compass ব্যবহার অন্তর্ভুক্ত করা হয়েছে। WebBrain উন্নত করার জন্য সহায়তা ডিফল্টরূপে চালু থাকলেও, নির্বাচিত Compass কথোপকথনগুলি বজায় রাখা যেতে পারে এবং মূল্যায়ন, উন্নতি, ফাইন-টিউনিং এবং প্রশিক্ষণের জন্য ব্যবহার করা যেতে পারে। এই ব্যবহারগুলি থেকে ভবিষ্যতের Compass ইন্টারঅ্যাকশনগুলি বাদ দিতে সাধারণ → উন্নত-এ এটি বন্ধ করুন৷ WebBrain স্থানীয়-মডেল ও আপনার নিজের API অনুরোধ শুধু তখনই সংগ্রহ করে যখন আপনি এই প্রদানকারীর “গবেষণার জন্য কোয়েরি শেয়ার করুন” বিকল্প চালু করেন। {privacyLink}। আরও ব্যবহারের জন্য, {subscribeLink}-এ সদস্যতা নিন। {accountLink} এ বিলিং পরিচালনা করুন।", + 'st.providers.webbrain_data_use.body': "বিনামূল্যে দৈনিক WebBrain Compass ব্যবহার অন্তর্ভুক্ত করা হয়েছে। WebBrain উন্নত করার জন্য সহায়তা ডিফল্টরূপে চালু থাকলেও, নির্বাচিত Compass কথোপকথনগুলি বজায় রাখা যেতে পারে এবং মূল্যায়ন, উন্নতি, ফাইন-টিউনিং এবং প্রশিক্ষণের জন্য ব্যবহার করা যেতে পারে। এই ব্যবহারগুলি থেকে ভবিষ্যতের Compass ইন্টারঅ্যাকশনগুলি বাদ দিতে সেটিংস → উন্নত-এ এটি বন্ধ করুন৷ WebBrain স্থানীয়-মডেল ও আপনার নিজের API অনুরোধ শুধু তখনই সংগ্রহ করে যখন আপনি এই প্রদানকারীর “গবেষণার জন্য কোয়েরি শেয়ার করুন” বিকল্প চালু করেন। {privacyLink}। আরও ব্যবহারের জন্য, {subscribeLink}-এ সদস্যতা নিন। {accountLink} এ বিলিং পরিচালনা করুন।", 'st.providers.share_research.label': "গবেষণার জন্য কোয়েরি শেয়ার করুন", 'st.providers.share_research.hint': "এই প্রদানকারীর প্রম্পট ও প্রতিক্রিয়া মূল্যায়ন ও উন্নতির জন্য WebBrain-কে পাঠায়, ব্যবহৃত প্রদানকারী ও মডেলসহ। শেয়ারের আগে ছবি ও বাইনারি সংযুক্তি সরানো হয় এবং টেক্সট ছেঁটে নেয়া হয়; বাকি টেক্সট অপরিবর্তিত পাঠানো হয়।", 'st.providers.share_research.confirm': "এই প্রদানকারীর কোয়েরি কি গবেষণার জন্য WebBrain-এর সাথে শেয়ার করবেন?\n\nচালু থাকলে, এই প্রদানকারীর সাথে আপনার প্রম্পট, প্রতিক্রিয়া ও টুল ইন্টারঅ্যাকশন প্রদানকারী ও মডেলের নামসহ মূল্যায়ন ও উন্নতির জন্য WebBrain-কে পাঠানো হবে। ছবি সরিয়ে ও দীর্ঘ কনটেন্ট ছেঁটে টেক্সট অপরিবর্তিত পাঠানো হয়, তাই সংবেদনশীল ব্যক্তিগত তথ্য শেয়ার এড়িয়ে চলুন। ভবিষযতে শেয়ার বন্ধ করতে যেকোনো সময় এটি বন্ধ করতে পারেন।", @@ -1035,7 +1032,6 @@ export default { // Screenshot redaction (issue #312): local, best-effort PII blurring that // runs in-browser before any screenshot reaches a vision model. - 'st.redaction.heading': "স্ক্রিনশট রিডাকশন", 'st.redaction.toggle.label': "স্ক্রিনশট থেকে সংবেদনশীল কন্টেন্ট রিড্যাক্ট করুন", 'st.redaction.toggle.desc': "একটি ভিশন মডেলে একটি স্ক্রিনশট পাঠানোর আগে, ফর্মের ক্ষেত্রগুলি এবং পাঠ্যটি অস্পষ্ট করুন যা একটি ইমেল বা ফোন নম্বরের মতো দেখাচ্ছে৷ সনাক্তকরণ সম্পূর্ণরূপে আপনার ডিভাইসে চলে — অতিরিক্ত কিছুই প্রেরণ করা হয় না।", 'st.redaction.warning': "⚠️ সর্বোত্তম-প্রচেষ্টা এবং ব্যর্থ-ওপেন: যদি রিডাকশন কোনও পৃষ্ঠায় চলতে না পারে (উদাহরণস্বরূপ, নেভিগেশনের ঠিক পরে, পিডিএফ ভিউয়ারে বা সীমাবদ্ধ ব্রাউজার পৃষ্ঠাগুলিতে), স্ক্রিনশটটি এখনও সংশোধন না করে পাঠানো হয়। সনাক্তকরণ শুধুমাত্র DOM হিউরিস্টিক ব্যবহার করে — ক্যানভাস-আঁকানো পাঠ্য, চিত্রের ভিতরে PII, বা ফর্ম ক্ষেত্র হিসাবে স্বীকৃত নয় এমন কিছু বা ইমেল/ফোন পাঠ্যটি স্লিপ হতে পারে এবং মডেলে পাঠানো পৃষ্ঠা পাঠ্য এই সেটিং দ্বারা সংশোধন করা হয় না। এটি একটি নিরাপত্তা গ্যারান্টি নয়. সম্পূর্ণ গোপনীয়তার জন্য, একটি স্থানীয়/অফলাইন মডেল ব্যবহার করুন (llama.cpp, Ollama): তারপর স্ক্রিনশটগুলি কখনই আপনার মেশিন ছেড়ে যাবেন না এবং সংশোধন অপ্রয়োজনীয়।", @@ -1223,7 +1219,7 @@ export default { "sp.slash.export_traces_full": "স্ক্রিনশটসহ সম্পূর্ণ সংরক্ষিত ট্রেস সেশন JSON হিসেবে রপ্তানি করুন", "sp.export_traces.recording_truncated": "সব সংরক্ষিত রেকর্ড JSON হিসেবে রপ্তানি করা হয়েছে। রেকর্ডিংয়ের সময় বাদ পড়া কিছু তথ্য রপ্তানির মাধ্যমে ফেরত পাওয়া যাবে না।", "sp.slash.export_traces": "টুল চেইন (ট্রেস) রপ্তানি করুন", - "sp.export_traces.none": "এই কথোপকথনের জন্য কোন চিহ্ন নেই. সেটিংসে রেকর্ড ট্রেস সক্ষম করুন, তারপর আবার চালান।", + "sp.export_traces.none": "এই কথোপকথনের জন্য কোন চিহ্ন নেই. সেটিংস → উন্নত-এ রেকর্ড ট্রেস সক্ষম করুন, তারপর আবার চালান।", "sp.export_traces.error": "ট্রেস এক্সপোর্ট করা যায়নি।", "sp.export_traces.done": "টুল চেইন রপ্তানি করা হয়েছে।", "sp.export_traces.no_conversation": "এখনও রপ্তানি করার কিছু নেই — প্রথমে একটি কথোপকথন শুরু করুন।", @@ -1297,7 +1293,7 @@ export default { "st.sync.confirm.reset": "এই ডিভাইসের বর্তমান WebBrain সেটআপ দিয়ে এনক্রিপ্ট করা ক্লাউড কপি প্রতিস্থাপন করবেন?", "st.sync.consent.legacy": "এনক্রিপ্ট করা সিঙ্ক চালু করবেন? WebBrain আপনার স্মৃতি, প্রোফাইল অটোফিল এবং API-কী প্রদানকারী সেটিংসের একটি এন্ড-টু-এন্ড এনক্রিপ্টেড কপি WebBrain Compass-এ প্রেরণ করবে। চ্যাট ইতিহাস এবং OAuth সাইন-ইন সিঙ্ক করা হয় না।", "st.sync.consent.denied": "এনক্রিপ্ট করা সিঙ্ক অনুমতি দেওয়া হয়নি।", - 'st.providers.webgpu_note.body': '{modelLink} কোনো API এন্ডপয়েন্ট ছাড়াই সম্পূর্ণভাবে Chrome-এ চলে। এটি Settings > Providers > WebGPU বা Apocalypse Mode থেকে ডাউনলোড করুন, তারপর standalone chat-এ nuclear control ব্যবহার করুন।', + 'st.providers.webgpu_note.body': '{modelLink} কোনো API এন্ডপয়েন্ট ছাড়াই সম্পূর্ণভাবে Chrome-এ চলে। এটি Providers > WebGPU বা Apocalypse Mode থেকে ডাউনলোড করুন, তারপর standalone chat-এ nuclear control ব্যবহার করুন।', 'sp.monitor.navigation': "কাজ চলার সময় পৃষ্ঠা বদলেছে ({before} → {after})। কাজ চলতে থাকবে।", 'sp.activity.generating_answer': "উত্তর তৈরি হচ্ছে…", 'sp.activity.retrying_response': "উত্তর আবার চেষ্টা করা হচ্ছে…", diff --git a/src/firefox/src/ui/locales/de.js b/src/firefox/src/ui/locales/de.js index ed3a8f19c1..381ef757ac 100644 --- a/src/firefox/src/ui/locales/de.js +++ b/src/firefox/src/ui/locales/de.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Erweiterungsoberfläche verkleinern', 'sp.ui_scale.increase': 'Erweiterungsoberfläche vergrößern', 'sp.ui_scale.reset': 'Zurücksetzen', - 'st.display.ui_scale.label': 'Erweiterungsoberfläche zoomen', - 'st.display.ui_scale.decrease': 'Erweiterungsoberfläche verkleinern', - 'st.display.ui_scale.increase': 'Erweiterungsoberfläche vergrößern', - 'st.display.ui_scale.reset': 'Zurücksetzen', - 'st.display.ui_scale.desc': 'Seitenleiste und separates Chatfenster vergrößern oder verkleinern, ohne den Seitenzoom zu ändern.', - 'st.display.ui_scale.shortcuts': 'Eigene Tastenkürzel: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Nicht zugewiesen', - 'st.display.ui_scale.manage_shortcuts': 'Tastenkürzel anpassen', 'tool.delegate_research': 'Recherche mit ChatGPT', 'st.display.research_escalation.label': 'Recherche-Eskalation', 'st.display.research_escalation.desc': 'Wenn aktiviert, kann WebBrain vor dem Senden einer ungewöhnlich komplexen, schreibgeschützten Rechercheanfrage an ChatGPT um Zustimmung bitten. Standardmäßig deaktiviert. Die genaue Anfrage wird nur nach Ihrer ausdrücklichen Zustimmung geteilt.', @@ -452,7 +444,7 @@ export default { 'sp.step.input_label': 'Eingabe', 'sp.step.result_label': 'Ergebnis', 'sp.api.enabled_html': '🔓 API-Mutationen aktiviert für dieses Gespräch. Der Agent kann nun POST/PUT/PATCH/DELETE über fetch_url und execute_js verwenden, wenn er API für zuverlässiger als die Benutzeroberfläche hält. Die Oberfläche bleibt standardmäßig bevorzugt. Dieses Flag wird beim Zurücksetzen des Gesprächs gelöscht.', - 'sp.permissions.disabled_html': '⚠️ Berechtigungsabfragen sind DEAKTIVIERT. WebBrain wird klicken, tippen, navigieren, JavaScript ausführen, hochladen, herunterladen, aufnehmen und zukünftige Aufgaben planen, ohne vorher zu fragen. Schalten Sie diese Option in Einstellungen → Berechtigungen → Vor bedeutsamen Aktionen fragen wieder ein.', + 'sp.permissions.disabled_html': '⚠️ Berechtigungsabfragen sind DEAKTIVIERT. WebBrain wird klicken, tippen, navigieren, JavaScript ausführen, hochladen, herunterladen, aufnehmen und zukünftige Aufgaben planen, ohne vorher zu fragen. Schalten Sie diese Option über die ⚠-Schaltfläche neben dem Mikrofon wieder ein.', 'sp.permissions.button': 'Berechtigungsabfragen: an', 'sp.permissions.button_off': 'Berechtigungsabfragen: aus', 'sp.permissions.gate_desc': 'WebBrain fragt, bevor es auf einer Website zum ersten Mal klickt, tippt, herunterlädt oder Code ausführt.', @@ -556,7 +548,7 @@ export default { 'sp.workflows.reason.name_required': 'Geben Sie einen Workflow-Namen an: /workflow --save .', 'sp.workflows.reason.http_start_url': 'Der aufgezeichnete Durchlauf muss auf einer http(s)-Seite beginnen, bevor er gespeichert werden kann.', 'sp.workflows.reason.normalization_failed': 'Dieser Workflow konnte nicht gespeichert werden, da seine Schritte nicht sicher für die Wiedergabe sind.', - 'sp.export_traces.none': 'Keine Traces für dieses Gespräch. Aktivieren Sie „Traces aufzeichnen" in den Einstellungen und führen Sie den Durchlauf erneut aus.', + 'sp.export_traces.none': 'Keine Traces für dieses Gespräch. Aktivieren Sie „Traces aufzeichnen" unter Einstellungen → Erweitert und führen Sie den Durchlauf erneut aus.', 'sp.export_traces.error': 'Traces konnten nicht exportiert werden.', 'sp.export_traces.done': 'Werkzeugkette exportiert.', 'sp.export_traces.no_conversation': 'Noch nichts zu exportieren — beginnen Sie zunächst ein Gespräch.', @@ -656,7 +648,7 @@ export default { 'ob.act.warn1': 'WebBrain kann Screenshots für die Planung aufnehmen. Vermeiden Sie den Agent-Modus auf sensiblen Seiten wie Gesundheit, Finanzen, Dating oder privaten Kontenportalen, sofern Sie dieses Risiko akzeptieren.', 'ob.act.warn2': 'Web-Inhalte können bösartige Prompt-Injection enthalten, die auf die Manipulation von KI-Verhalten abzielen.', 'ob.act.warn3': 'Überprüfen Sie immer die vorgeschlagenen Aktionen und stoppen Sie Durchläufe, die unerwartet aussehen.', - 'ob.act.permissions_tip': 'Berechtigungsabfragen sind standardmäßig aktiv. Fortgeschrittene Benutzer können sie global mit /dangerously-skip-permissions deaktivieren und in Einstellungen → Berechtigungen wieder aktivieren.', + 'ob.act.permissions_tip': 'Berechtigungsabfragen sind standardmäßig aktiv. Fortgeschrittene Benutzer können sie global mit /dangerously-skip-permissions deaktivieren und über die ⚠-Schaltfläche neben dem Mikrofon wieder aktivieren.', 'ob.tokens.title': 'Modell auswählen', 'ob.tokens.body': 'WebBrain benötigt ein Sprachmodell. Wir prüfen zuerst auf lokale Modelle. Wenn keine verfügbar sind, öffnen Sie die Einstellungen und fügen Sie einen Anbieter hinzu:', 'ob.tokens.scanning': 'Suche nach lokalen Modellen...', @@ -682,22 +674,31 @@ export default { 'ob.btn.done': 'Loslegen', 'ob.btn.skip': 'Vorerst überspringen', 'ob.btn.start': 'Starten', - 'ob.cloud.body': 'WebBrain Compass ist mit einem wöchentlichen kostenlosen Kontingent bereit. Ausgewählte Compass-Gespräche können gespeichert und zur Verbesserung von WebBrain verwendet werden, solange „Hilfe, WebBrain zu verbessern" standardmäßig aktiviert ist. Sie können dies in Einstellungen → Allgemein deaktivieren.', + 'ob.cloud.body': 'WebBrain Compass ist mit einem wöchentlichen kostenlosen Kontingent bereit. Ausgewählte Compass-Gespräche können gespeichert und zur Verbesserung von WebBrain verwendet werden, solange „Hilfe, WebBrain zu verbessern" standardmäßig aktiviert ist. Sie können dies in Einstellungen → Erweitert deaktivieren.', 'ob.cloud.change': 'Ändern', 'ob.cloud.using': 'WebBrain Compass verwenden.', // --- Settings --- 'st.title': 'WebBrain-Einstellungen', - 'st.subtitle': 'Konfigurieren Sie Ihre LLM-Anbieter und Präferenzen · v{version}', + 'st.subtitle': 'Legen Sie fest, wie WebBrain arbeitet · v{version}', 'st.tab.display': 'Allgemein', + 'st.tab.budgets': 'Budgets', + 'st.tab.advanced': 'Erweitert', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Sprache', + 'st.tab.generative': 'Generativ', + 'st.tab.decision': 'Entscheidung', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain-Anbieter', + 'st.providers_page.subtitle': 'Wählen Sie die Modelle, die WebBrain verwendet · v{version}', + 'st.permissions_page.title': 'WebBrain-Berechtigungen', + 'st.permissions_page.subtitle': 'Websites, auf denen WebBrain ohne Nachfrage handeln darf', 'st.tab.providers': 'Anbieter', 'st.tab.skills': 'Skills', 'st.tab.vision': 'Vision', - 'st.tab.multimodal': "Assistenzmodelle", 'st.tab.memory': 'Memorie', 'st.tab.profile': 'Profil', 'st.tab.account': 'Konto', 'st.tab.captcha': 'CAPTCHA', - 'st.tab.permissions': 'Berechtigungen', 'st.perms.gate.label': 'Vor bedeutsamen Aktionen fragen', 'st.perms.gate.desc': 'Empfohlen. Wenn aktiviert, fragt WebBrain beim ersten Klick, Tippen, Navigieren, JavaScript-Ausführen, Hochladen, Herunterladen, Aufnehmen oder Planen zukünftiger Aufgaben auf einer Website um Erlaubnis (und merkt sich Ihre Auswahl). Deaktivieren Sie diese Option für schnelle, auffreie Nutzung auf Websites, denen Sie voll vertrauen.', 'st.perms.gate.warning': '⚠️ Berechtigungsabfragen sind DEAKTIVIERT. WebBrain wird auf jeder Website klicken, tippen, navigieren, JavaScript ausführen, hochladen, herunterladen, aufnehmen und zukünftige Aufgaben planen OHNE zu fragen — einschließlich auf Seiten, deren Inhalt von Angreifern kontrolliert werden kann.', @@ -716,8 +717,6 @@ export default { "st.account.payment_failed": "Deine Abonnementzahlung konnte nicht abgeschlossen werden. Aktualisiere deine Zahlungsmethode, um deinen kostenpflichtigen Tarif wieder zu nutzen.", "st.account.update_payment": "Zahlungsmethode aktualisieren", 'st.account.manage_billing': 'Abrechnung verwalten', - 'st.display.language.label': 'Sprache', - 'st.display.language.desc': 'Oberflächensprache des WebBrain-Plugins.', 'st.display.theme.label': 'Darstellung', 'st.display.theme.desc': 'Hell, Dunkel oder OS-Einstellung übernehmen.', 'st.display.theme.system': 'System', @@ -727,8 +726,8 @@ export default { 'st.display.download_directory.desc': 'Optionaler Unterordner im Browser- oder System-Download-Verzeichnis. Leer lassen, um den Systemstandard zu verwenden.', 'st.display.download_directory.placeholder': 'Systemstandard', 'st.display.download_directory.error': 'Verwenden Sie einen relativen Ordner wie WebBrain oder Work/WebBrain. Absolute Pfade und „.." sind nicht erlaubt.', - 'st.display.search.placeholder': 'Allgemeine Einstellungen durchsuchen', - 'st.display.search.empty': 'Keine passenden allgemeinen Einstellungen.', + 'st.display.search.placeholder': 'Einstellungen durchsuchen', + 'st.display.search.empty': 'Keine passenden Einstellungen.', 'st.display.advanced': 'Erweitert', ...getApocalypseModeCopy('de'), ...getEmergencyBoxCopy('de'), @@ -784,20 +783,18 @@ export default { 'st.display.auto_screenshot.label': 'Automatischer Screenshot', "st.display.auto_screenshot.desc": "Erstellt automatisch einen Viewport-Screenshot, nachdem der Agent auf der Seite gehandelt hat, damit die ausgewählte Bildverarbeitungsroute die Änderung sehen kann. Das kostet mehr Tokens. Ist keine Bildverarbeitung verfügbar, wird die Anreicherung übersprungen und die Aufgabe mit einem Statushinweis fortgesetzt.", 'st.display.auto_screenshot.off': 'Aus', - 'st.display.auto_screenshot.navigation': 'Bei Navigation', - 'st.display.auto_screenshot.state_change': 'Bei Zustandsänderung (Standard)', + 'st.display.auto_screenshot.navigation': 'Bei Navigation (Standard)', + 'st.display.auto_screenshot.state_change': 'Bei Zustandsänderung', 'st.display.auto_screenshot.every_step': 'Bei jedem Schritt', 'st.display.tracing.label': 'Traces aufzeichnen (zum Modellvergleich)', - 'st.display.tracing.desc_html': 'Speichert jeden Durchlauf in der lokalen IndexedDB, damit Sie Modelle seitenweise inspizieren und vergleichen können. Traces öffnen →', - 'st.display.lossless_tracing.label': 'Vollständige Anforderungsdetails aufzeichnen (Debug-Stufe)', - 'st.display.lossless_tracing.desc_html': 'Speichert zusätzlich die vollständigen Prompts, Nachrichten und Tool-Schemata jeder LLM-Anfrage statt inhaltsloser Zusammenfassungen und behält bis zu 200 KB jedes Tool-Ergebnisses. Ermöglicht tiefes Debugging und die Rekonstruktion von Anfragen. Standardmäßig aus, weil es Ihren Gesprächsinhalt lokal schreibt und deutlich mehr Speicherplatz benötigt. Erfordert aktivierte Trace-Aufzeichnung.', + 'st.display.tracing.desc_html': 'Speichert jeden Durchlauf (LLM-Anfragen, Antworten, Tool-Aufrufe, Screenshots) in der lokalen IndexedDB, damit Sie Modelle nebeneinander inspizieren und vergleichen können – einschließlich der vollständigen Prompts, Nachrichten und Tool-Schemata jeder LLM-Anfrage und bis zu 200 KB jedes Tool-Ergebnisses. Öffnet sich in einem eigenen Traces-Tab. Standardmäßig aus, weil es Ihren Gesprächsinhalt lokal schreibt und deutlich mehr Speicherplatz benötigt. Traces öffnen →', 'st.display.cost_session_limit.label': 'Cloud-Kosten-Sitzungskontingent', 'st.display.cost_session_limit.desc': 'Stoppt Cloud- und OpenRouter-Durchläufe vor einem weiteren kostenpflichtigen Modellaufruf, wenn diese Sitzung das Kostenkontingent erreicht.', 'st.display.cost_total_limit.label': 'Cloud-Kosten-Gesamtkontingent', 'st.display.cost_total_limit.desc': 'Verfolgt gemeldete oder geschätzte Cloud/OpenRouter-Modellausgaben in der gesamten Erweiterung und stoppt weitere kostenpflichtige Aufrufe am Kontingent.', 'st.display.cost_reset': 'Ausgaben zurücksetzen', 'st.display.strict_secret.label': 'Strenge Geheimnisverwaltung', - 'st.display.strict_secret.desc': 'Weigert sich, Anmeldeinformationen (Passwörter, API-Schlüssel, Token, OTPs) in Zusammenfassungen oder Assistententext zu zitieren — auch wenn Sie ausdrücklich danach fragen. Nützlich, wenn Sie regelmäßig Trace-Dateien teilen oder den Bildschirm freigeben. Standardmäßig deaktiviert, damit der Agent den exakten Wert, den Sie anfordern, bei Bedarf wiedergeben kann. Aktivieren Sie es (Einstellungen → Sicherheit), wenn `done`-Zusammenfassungen ordentlich bleiben und Anmeldeinformationen nie wiederholt werden sollen.', + 'st.display.strict_secret.desc': 'Weigert sich, Anmeldeinformationen (Passwörter, API-Schlüssel, Token, OTPs) in Zusammenfassungen oder Assistententext zu zitieren — auch wenn Sie ausdrücklich danach fragen. Nützlich, wenn Sie regelmäßig Trace-Dateien teilen oder den Bildschirm freigeben. Standardmäßig deaktiviert, damit der Agent den exakten Wert, den Sie anfordern, bei Bedarf wiedergeben kann. Aktivieren Sie es, wenn `done`-Zusammenfassungen ordentlich bleiben und Anmeldeinformationen nie wiederholt werden sollen.', 'st.display.allow_local_network.label': 'Agenten den Zugriff auf das lokale Netzwerk erlauben', 'st.display.allow_local_network.desc': 'Ermöglicht es dem fetch_url-Tool des Agents, Loopback- und private/RFC1918-Adressen zu erreichen.', 'st.display.scheduled_tasks.label': 'Geplante Aufgaben', @@ -852,7 +849,7 @@ export default { 'st.providers.get_api_key': 'API-Schlüssel abrufen', 'st.providers.webbrain_note.body': 'Kostenlose wöchentliche WebBrain Compass-Nutzung ist enthalten. Anfragen werden über api.webbrain.one weitergeleitet; standardmäßig protokollieren wir Metadaten für Kontingente und Fehlerbehebung, jedoch keine Prompt-Texte, Seiteninhalte, Screenshots oder Modellantworten. {privacyLink}. Für mehr Nutzung abonnieren Sie unter {subscribeLink}. Verwalten Sie die Abrechnung unter {accountLink}.', 'st.providers.webbrain_note.privacy_link': 'Datenschutzrichtlinie', - 'st.providers.webbrain_data_use.body': 'Kostenlose wöchentliche WebBrain Compass-Nutzung ist enthalten. Solange „Bei der Verbesserung von WebBrain helfen“ standardmäßig aktiviert ist, können ausgewählte Compass-Unterhaltungen gespeichert und für Auswertung, Verbesserung, Feinabstimmung und Training verwendet werden. Deaktivieren Sie die Option unter „Allgemein → Erweitert“, um zukünftige Compass-Interaktionen davon auszuschließen. Anfragen an lokale Modelle und eigene APIs werden von WebBrain nur erfasst, wenn Sie die anbieterspezifische Option „Suchanfragen für Forschung teilen“ aktivieren. {privacyLink}. Für mehr Nutzung abonnieren Sie unter {subscribeLink}. Verwalten Sie die Abrechnung unter {accountLink}.', + 'st.providers.webbrain_data_use.body': 'Kostenlose wöchentliche WebBrain Compass-Nutzung ist enthalten. Solange „Bei der Verbesserung von WebBrain helfen“ standardmäßig aktiviert ist, können ausgewählte Compass-Unterhaltungen gespeichert und für Auswertung, Verbesserung, Feinabstimmung und Training verwendet werden. Deaktivieren Sie die Option unter „Einstellungen → Erweitert“, um zukünftige Compass-Interaktionen davon auszuschließen. Anfragen an lokale Modelle und eigene APIs werden von WebBrain nur erfasst, wenn Sie die anbieterspezifische Option „Suchanfragen für Forschung teilen“ aktivieren. {privacyLink}. Für mehr Nutzung abonnieren Sie unter {subscribeLink}. Verwalten Sie die Abrechnung unter {accountLink}.', 'st.providers.share_research.label': "Suchanfragen für Forschung teilen", 'st.providers.share_research.hint': "Sendet Prompts und Antworten dieses Anbieters zur Auswertung und Verbesserung an WebBrain, einschließlich des verwendeten Anbieters und Modells. Bilder und binäre Anhänge werden entfernt und Texte gekürzt; der übrige Text wird unverändert gesendet.", 'st.providers.share_research.confirm': "Suchanfragen dieses Anbieters für Forschung mit WebBrain teilen?\n\nWenn aktiviert, werden Ihre Prompts, Antworten und Tool-Interaktionen mit diesem Anbieter zusammen mit Anbieter- und Modellname zur Auswertung und Verbesserung an WebBrain gesendet. Texte werden nach dem Entfernen von Bildern und Kürzen langer Inhalte unverändert gesendet – teilen Sie daher keine sensiblen persönlichen Daten. Sie können dies jederzeit deaktivieren, um die weitere Freigabe zu stoppen.", @@ -977,7 +974,6 @@ export default { 'st.imageBudget.warning': '⚠️ Diese Einstellungen gelten für Screenshots, die für Vision erfasst werden...', // --- Screenshot redaction --- - 'st.redaction.heading': 'Screenshot-Verpixelung', 'st.redaction.toggle.label': 'Sensible Inhalte auf Screenshots verpixeln', 'st.redaction.toggle.desc': 'Bevor ein Screenshot an ein Vision-Modell gesendet wird, werden Formularfelder und Text, der wie eine E-Mail oder Telefonnummer aussieht, verwischt...', 'st.redaction.warning': '⚠️ Best-Effort und fail-open: Wenn die Verpixelung auf einer Seite nicht ausgeführt werden kann...', @@ -1270,7 +1266,7 @@ export default { "st.sync.confirm.reset": "Die verschlüsselte Cloud-Kopie durch das aktuelle WebBrain-Setup dieses Geräts ersetzen?", "st.sync.consent.legacy": "Verschlüsselte Synchronisierung aktivieren? WebBrain überträgt eine Ende-zu-Ende-verschlüsselte Kopie Ihrer Erinnerungen, des automatischen Ausfüllens Ihres Profils und der Einstellungen des API-Schlüsselanbieters an die WebBrain Compass. Chatverlauf und OAuth-Anmeldungen werden nicht synchronisiert.", "st.sync.consent.denied": "Die Berechtigung zur verschlüsselten Synchronisierung wurde nicht erteilt.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Die Seite hat sich während der Aufgabe geändert ({before} → {after}). Die Aufgabe wird fortgesetzt.", 'sp.activity.generating_answer': "Antwort wird erstellt…", 'sp.activity.retrying_response': "Antwort wird erneut versucht…", diff --git a/src/firefox/src/ui/locales/en.js b/src/firefox/src/ui/locales/en.js index 9e1c6a8309..5eea3a468c 100644 --- a/src/firefox/src/ui/locales/en.js +++ b/src/firefox/src/ui/locales/en.js @@ -14,14 +14,6 @@ export default { 'sp.ui_scale.decrease': 'Zoom extension UI out', 'sp.ui_scale.increase': 'Zoom extension UI in', 'sp.ui_scale.reset': 'Reset', - 'st.display.ui_scale.label': 'Extension UI zoom', - 'st.display.ui_scale.decrease': 'Zoom extension UI out', - 'st.display.ui_scale.increase': 'Zoom extension UI in', - 'st.display.ui_scale.reset': 'Reset', - 'st.display.ui_scale.desc': 'Resize the side panel and detached chat window without changing page zoom.', - 'st.display.ui_scale.shortcuts': 'Dedicated shortcuts: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Not assigned', - 'st.display.ui_scale.manage_shortcuts': 'Customize shortcuts', 'tool.delegate_research': 'Researching with ChatGPT', 'st.display.research_escalation.label': 'Research escalation', 'st.display.research_escalation.desc': 'When enabled, WebBrain may ask before sending an unusually complex read-only research prompt to ChatGPT. Off by default. The exact prompt is shared only after your explicit approval.', @@ -502,7 +494,7 @@ export default { 'sp.step.result_label': 'Result', 'sp.api.enabled_html': '🔓 API mutations enabled for this conversation. The agent may now use POST/PUT/PATCH/DELETE via fetch_url and execute_js when it judges API to be more reliable than UI for a step. UI-first remains the default. This flag clears when you reset the conversation.', - 'sp.permissions.disabled_html': '⚠️ Permission prompts are OFF. WebBrain will click, type, navigate, run JavaScript, upload, download, record, and schedule future work without asking first. Re-enable this from Settings → Permissions → Ask before consequential actions.', + 'sp.permissions.disabled_html': '⚠️ Permission prompts are OFF. WebBrain will click, type, navigate, run JavaScript, upload, download, record, and schedule future work without asking first. Re-enable this from the ⚠ button next to the microphone.', 'sp.permissions.button': 'Permission prompts: on', 'sp.permissions.button_off': 'Permission prompts: off', 'sp.permissions.gate_desc': 'WebBrain asks the first time it clicks, types, downloads or runs code on a site.', @@ -660,7 +652,7 @@ export default { 'ob.act.warn1': 'WebBrain may capture screenshots for planning. Avoid using agent mode on sensitive pages, such as health, finance, dating, or private account portals, unless you accept that risk.', 'ob.act.warn2': 'Web content can contain malicious prompt injections designed to manipulate AI behavior.', 'ob.act.warn3': 'Always review suggested actions and stop runs that look unexpected.', - 'ob.act.permissions_tip': 'Permission prompts are on by default. Advanced users can disable them globally with /dangerously-skip-permissions and re-enable them in Settings → Permissions.', + 'ob.act.permissions_tip': 'Permission prompts are on by default. Advanced users can disable them globally with /dangerously-skip-permissions and re-enable them from the ⚠ button next to the microphone.', 'ob.tokens.title': 'Choose a model', 'ob.tokens.body': 'WebBrain needs a language model to work. We will check for local models first. If none are available, open Settings and add a provider:', 'ob.tokens.scanning': 'Checking for local models...', @@ -686,23 +678,32 @@ export default { 'ob.btn.done': 'Get Started', 'ob.btn.skip': 'Skip for now', 'ob.btn.start': 'Start', - 'ob.cloud.body': 'WebBrain Compass is ready with a free weekly allowance. Selected Compass conversations may be retained and used to improve WebBrain while Help Improve WebBrain is on by default. You can turn it off in Settings → General.', + 'ob.cloud.body': 'WebBrain Compass is ready with a free weekly allowance. Selected Compass conversations may be retained and used to improve WebBrain while Help Improve WebBrain is on by default. You can turn it off in Settings → Advanced.', 'ob.cloud.change': 'Change', 'ob.cloud.using': 'Using WebBrain Compass. ', // --- Settings ---------------------------------------------------------- 'st.title': 'WebBrain Settings', - 'st.subtitle': 'Configure your LLM providers and preferences · v{version}', + 'st.subtitle': 'Configure how WebBrain works · v{version}', 'st.tab.display': 'General', + 'st.tab.budgets': 'Budgets', + 'st.tab.advanced': 'Advanced', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Speech', + 'st.tab.generative': 'Generative', + 'st.tab.decision': 'Decision', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain Providers', + 'st.providers_page.subtitle': 'Choose the models WebBrain uses · v{version}', + 'st.permissions_page.title': 'WebBrain Permissions', + 'st.permissions_page.subtitle': 'Sites where WebBrain may act without asking first', 'st.tab.providers': 'Providers', 'st.tab.skills': 'Skills', 'st.tab.vision': 'Vision', - 'st.tab.multimodal': "Assistive Models", 'st.tab.memory': 'Memory', 'st.tab.profile': 'Profile', 'st.tab.account': 'Account', 'st.tab.captcha': 'CAPTCHA', - 'st.tab.permissions': 'Permissions', 'st.perms.gate.label': 'Ask before consequential actions', 'st.perms.gate.desc': 'Recommended. When on, WebBrain asks permission the first time it clicks, types, navigates, runs JavaScript, uploads, downloads, records, or schedules future work on a site (then remembers your choice). Turn off for fast, prompt-free use on sites you fully trust.', @@ -724,8 +725,6 @@ export default { 'st.account.update_payment': 'Update payment method', 'st.account.manage_billing': 'Manage billing', - 'st.display.language.label': 'Language', - 'st.display.language.desc': 'Interface language for the WebBrain plugin.', 'st.display.theme.label': 'Appearance', 'st.display.theme.desc': 'Light, dark, or follow your OS setting.', 'st.display.theme.system': 'System', @@ -735,8 +734,8 @@ export default { 'st.display.download_directory.desc': 'Optional subfolder inside your browser or system Downloads directory. Leave blank to use the system default.', 'st.display.download_directory.placeholder': 'System default', 'st.display.download_directory.error': 'Use a relative folder such as WebBrain or Work/WebBrain. Absolute paths and “..” are not allowed.', - 'st.display.search.placeholder': 'Search General settings', - 'st.display.search.empty': 'No General settings match.', + 'st.display.search.placeholder': 'Search settings', + 'st.display.search.empty': 'No settings match.', 'st.display.advanced': 'Advanced', ...apocalypseModeCopy, ...emergencyCopy, @@ -793,20 +792,18 @@ export default { 'st.display.auto_screenshot.label': 'Auto-screenshot', "st.display.auto_screenshot.desc": "Automatically capture a viewport screenshot after the agent acts on the page, so the selected vision route can see what changed. Costs more tokens. If vision is unavailable, enrichment is skipped and the task continues with a status notice.", 'st.display.auto_screenshot.off': 'Off', - 'st.display.auto_screenshot.navigation': 'On navigation', - 'st.display.auto_screenshot.state_change': 'On state change (default)', + 'st.display.auto_screenshot.navigation': 'On navigation (default)', + 'st.display.auto_screenshot.state_change': 'On state change', 'st.display.auto_screenshot.every_step': 'Every step', 'st.display.tracing.label': 'Record traces (for model comparison)', - 'st.display.tracing.desc_html': 'Persist every run (LLM requests, responses, tool calls, screenshots) into local IndexedDB so you can inspect and compare models side-by-side. Opens in a separate Traces tab. Off by default because it adds disk writes per step. Open Traces page →', - 'st.display.lossless_tracing.label': 'Record full request details (debug tier)', - 'st.display.lossless_tracing.desc_html': 'Also persist the full prompts, messages, and tool schemas of each LLM request instead of content-free summaries, and keep up to 200 KB of each tool result. Enables deep debugging and request reconstruction. Off by default because it writes your conversation content locally and uses much more disk. Requires Record traces to be on.', + 'st.display.tracing.desc_html': 'Persist every run (LLM requests, responses, tool calls, screenshots) into local IndexedDB so you can inspect and compare models side-by-side, including the full prompts, messages and tool schemas of each LLM request and up to 200 KB of each tool result. Opens in a separate Traces tab. Off by default because it writes your conversation content locally and uses much more disk. Open Traces page →', 'st.display.cost_session_limit.label': 'Cloud cost session allowance', 'st.display.cost_session_limit.desc': 'Stops eligible cloud and router runs before another paid model call once this session reaches the reported or estimated cost allowance. Default $10.', 'st.display.cost_total_limit.label': 'Cloud cost total allowance', 'st.display.cost_total_limit.desc': 'Tracks reported or estimated spend for eligible cloud and router model calls across the extension and stops further paid calls at the allowance.', 'st.display.cost_reset': 'Reset spend', 'st.display.strict_secret.label': 'Strict secret handling', - 'st.display.strict_secret.desc': 'Refuse to quote credentials (passwords, API keys, tokens, OTPs) in summaries or assistant text — even when you explicitly ask for them. Useful if you regularly share trace files or screen-share. Off by default so the agent can echo the exact value you ask for when you need it. Turn it on (Settings → Security) when you want `done` summaries kept tidy and credentials never repeated.', + 'st.display.strict_secret.desc': 'Refuse to quote credentials (passwords, API keys, tokens, OTPs) in summaries or assistant text — even when you explicitly ask for them. Useful if you regularly share trace files or screen-share. Off by default so the agent can echo the exact value you ask for when you need it. Turn it on when you want `done` summaries kept tidy and credentials never repeated.', 'st.display.allow_local_network.label': 'Allow agent to access local network', 'st.display.allow_local_network.desc': 'Lets the agent\'s fetch_url tool reach loopback (127.0.0.1, localhost) and private/RFC1918 addresses (10.x, 192.168.x, 172.16–31.x). Useful for local dev servers, intranet tools, or self-hosted APIs. Off by default. When off, URLs written with private or loopback IP literals and localhost names are blocked. DNS resolution is not checked, so other hostnames may still reach local addresses. Cloud-metadata IP literals (169.254.169.254) and listed metadata or *.internal/*.local hostnames stay blocked even when on.', 'st.display.scheduled_tasks.label': 'Scheduled tasks', @@ -896,7 +893,7 @@ export default { 'st.providers.compat.value.max': 'Max', 'st.providers.compat.value.system': 'System', 'st.providers.compat.value.developer': 'Developer', - 'st.providers.webbrain_data_use.body': 'Free weekly WebBrain Compass usage is included. While Help Improve WebBrain is on by default, selected Compass conversations may be retained and used for evaluation, improvement, fine-tuning, and training. Turn it off in General → Advanced to exclude future Compass interactions from those uses. Local-model and bring-your-own API requests are only collected by WebBrain when you turn on the per-provider “Share queries for research” option. {privacyLink}. For more usage, subscribe at {subscribeLink}. Manage billing at {accountLink}.', + 'st.providers.webbrain_data_use.body': 'Free weekly WebBrain Compass usage is included. While Help Improve WebBrain is on by default, selected Compass conversations may be retained and used for evaluation, improvement, fine-tuning, and training. Turn it off in Settings → Advanced to exclude future Compass interactions from those uses. Local-model and bring-your-own API requests are only collected by WebBrain when you turn on the per-provider “Share queries for research” option. {privacyLink}. For more usage, subscribe at {subscribeLink}. Manage billing at {accountLink}.', 'st.providers.share_research.label': 'Share queries for research', 'st.providers.share_research.hint': 'Send bounded prompts, responses, tool interactions, and diagnostic trace metadata (steps, tool names, statuses, errors, and timings) from this provider to WebBrain for evaluation and improvement. Images and binary attachments are stripped; text is truncated before sharing.', 'st.providers.share_research.confirm': 'Share queries and diagnostic traces from this provider with WebBrain for research?\n\nWhen on, your prompts, responses, tool interactions, and bounded diagnostic trace metadata—including failed runs, tool names, statuses, errors, and timings—will be sent to WebBrain with the provider and model name. Screenshots and binary attachments are not uploaded. Other text is sent as-is after truncation, so avoid sharing sensitive personal data. You can turn this off at any time to stop future sharing.', @@ -1017,7 +1014,7 @@ export default { 'st.transcription.failed': 'Failed: {error}', 'st.transcription.fill_required': 'Fill in Base URL and Model first.', - // Generative Media — Assistive Models section + // Generative Media — Providers page, Generative tab 'st.imagegen.heading': "Generative Media", 'st.imagegen.desc': "Used by the generate_image agent tool to create images and other media from a text prompt with the selected provider.", 'st.imagegen.saved': 'Saved!', @@ -1044,7 +1041,6 @@ export default { // Screenshot redaction (issue #312): local, best-effort PII blurring that // runs in-browser before any screenshot reaches a vision model. - 'st.redaction.heading': 'Screenshot redaction', 'st.redaction.toggle.label': 'Redact sensitive content from screenshots', 'st.redaction.toggle.desc': 'Before a screenshot is sent to a vision model, blur form fields and text that looks like an email or phone number. Detection runs entirely on your device — nothing extra is transmitted.', 'st.redaction.warning': '⚠️ Best-effort and fail-open: if redaction cannot run on a page (for example right after a navigation, on PDF viewers, or on restricted browser pages), the screenshot is still sent unredacted. Detection uses DOM heuristics only — canvas-drawn text, PII inside images, or anything not recognized as a form field or email/phone text may slip through, and page text sent to the model is not redacted by this setting. It is NOT a security guarantee. For full privacy, use a local/offline model (llama.cpp, Ollama): screenshots then never leave your machine and redaction is unnecessary.', @@ -1232,7 +1228,7 @@ export default { "sp.slash.export_traces_full": "Export the complete stored trace session as JSON, including screenshots", "sp.export_traces.recording_truncated": "JSON exported with all stored records. Some content was omitted during recording and cannot be recovered by export.", "sp.slash.export_traces": "Export the tool chain (traces)", - "sp.export_traces.none": "No traces for this conversation. Enable Record traces in Settings, then run again.", + "sp.export_traces.none": "No traces for this conversation. Enable Record traces in Settings → Advanced, then run again.", "sp.export_traces.error": "Couldn't export traces.", "sp.export_traces.done": "Tool chain exported.", "sp.export_traces.no_conversation": "Nothing to export yet — start a conversation first.", @@ -1306,5 +1302,5 @@ export default { 'st.sync.confirm.reset': 'Replace the encrypted cloud copy with this device’s current WebBrain setup?', 'st.sync.consent.legacy': 'Turn on encrypted sync? WebBrain will transmit an end-to-end encrypted copy of your memories, profile autofill, and API-key provider settings to WebBrain Compass. Chat history and OAuth sign-ins are not synced.', 'st.sync.consent.denied': 'Encrypted sync permission was not granted.', - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', }; diff --git a/src/firefox/src/ui/locales/es.js b/src/firefox/src/ui/locales/es.js index 1205d0847b..bd680e708f 100644 --- a/src/firefox/src/ui/locales/es.js +++ b/src/firefox/src/ui/locales/es.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Reducir el zoom de la interfaz', 'sp.ui_scale.increase': 'Aumentar el zoom de la interfaz', 'sp.ui_scale.reset': 'Restablecer', - 'st.display.ui_scale.label': 'Zoom de la interfaz de la extensión', - 'st.display.ui_scale.decrease': 'Reducir el zoom de la interfaz', - 'st.display.ui_scale.increase': 'Aumentar el zoom de la interfaz', - 'st.display.ui_scale.reset': 'Restablecer', - 'st.display.ui_scale.desc': 'Cambia el tamaño del panel lateral y de la ventana de chat independiente sin cambiar el zoom de la página.', - 'st.display.ui_scale.shortcuts': 'Atajos exclusivos: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Sin asignar', - 'st.display.ui_scale.manage_shortcuts': 'Personalizar atajos', 'tool.delegate_research': 'Investigando con ChatGPT', 'st.display.research_escalation.label': 'Escalado de investigación', 'st.display.research_escalation.desc': 'Cuando está activado, WebBrain puede pedir permiso antes de enviar a ChatGPT una solicitud de investigación de solo lectura inusualmente compleja. Desactivado de forma predeterminada. La solicitud exacta solo se comparte tras tu aprobación explícita.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "No continuar", "sp.recipient.reason_unrequested": "WebBrain no pudo deducir de tu solicitud que deba enviarse un mensaje. La conversación abierta en {host} es con {recipient}.", "sp.recipient.reason_unnamed": "WebBrain no pudo deducir de tu solicitud quién debe recibir este mensaje. La conversación abierta en {host} es con {recipient}.", - 'st.tab.permissions': "Permisos", 'st.perms.revoke': "Revocar", 'st.perms.clear_all': "Borrar todos los permisos", 'st.perms.gate.label': "Preguntar antes de acciones importantes", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Empezar', 'ob.btn.skip': 'Omitir por ahora', 'ob.btn.start': 'Iniciar', - 'ob.cloud.body': 'WebBrain Compass está listo con una asignación semanal gratuita. Las conversaciones de Compass seleccionadas pueden conservarse y utilizarse para mejorar WebBrain mientras Ayuda a mejorar WebBrain está activado de forma predeterminada. Puedes desactivarlo en Configuración → General.', + 'ob.cloud.body': 'WebBrain Compass está listo con una asignación semanal gratuita. Las conversaciones de Compass seleccionadas pueden conservarse y utilizarse para mejorar WebBrain mientras Ayuda a mejorar WebBrain está activado de forma predeterminada. Puedes desactivarlo en Configuración → Avanzado.', 'ob.cloud.change': 'Cambiar', 'ob.cloud.using': 'Usando WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Resultado', 'sp.api.enabled_html': '🔓 Mutaciones de API habilitadas en esta conversación. El agente ahora puede usar POST/PUT/PATCH/DELETE mediante fetch_url y execute_js cuando considere que la API es más fiable que la interfaz para un paso. La interfaz sigue siendo la opción por defecto. Este indicador se desactiva al reiniciar la conversación.', - 'sp.permissions.disabled_html': '⚠️ Las solicitudes de permiso están DESACTIVADAS. WebBrain hará clic, escribirá, navegará, ejecutará JavaScript, subirá, descargará, grabará y programará trabajos futuros sin preguntar primero. Reactiva esto desde Ajustes → Permisos → Preguntar antes de acciones consecuentes.', + 'sp.permissions.disabled_html': '⚠️ Las solicitudes de permiso están DESACTIVADAS. WebBrain hará clic, escribirá, navegará, ejecutará JavaScript, subirá, descargará, grabará y programará trabajos futuros sin preguntar primero. Reactiva esto desde el botón ⚠ junto al micrófono.', 'sp.permissions.button': 'Solicitudes de permiso: activadas', 'sp.permissions.button_off': 'Solicitudes de permiso: desactivadas', 'sp.permissions.gate_desc': 'WebBrain pregunta la primera vez que hace clic, escribe, descarga o ejecuta código en un sitio.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Esperando «{selector}»', 'st.title': 'Ajustes de WebBrain', - 'st.subtitle': 'Configura tus proveedores de LLM y preferencias · v{version}', + 'st.subtitle': 'Configura cómo funciona WebBrain · v{version}', 'st.tab.display': 'General', + 'st.tab.budgets': 'Presupuestos', + 'st.tab.advanced': 'Avanzado', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Voz', + 'st.tab.generative': 'Generativo', + 'st.tab.decision': 'Decisión', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Proveedores de WebBrain', + 'st.providers_page.subtitle': 'Elige los modelos que usa WebBrain · v{version}', + 'st.permissions_page.title': 'Permisos de WebBrain', + 'st.permissions_page.subtitle': 'Sitios donde WebBrain puede actuar sin preguntar antes', 'st.tab.providers': 'Proveedores', 'st.tab.vision': 'Visión', 'st.tab.profile': 'Perfil', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "Actualizar método de pago", 'st.account.manage_billing': 'Gestionar facturación', - 'st.display.language.label': 'Idioma', - 'st.display.language.desc': 'Idioma de la interfaz del plugin WebBrain.', 'st.display.verbose.label': 'Modo detallado', 'st.display.verbose.desc': 'Muestra todos los detalles de las llamadas a herramientas, argumentos y resultados JSON sin procesar. Desactivado por defecto para una experiencia de chat más limpia.', 'st.display.selection_shortcut.label': 'Acceso directo de selección', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Captura automática', "st.display.auto_screenshot.desc": "Captura automáticamente una imagen de la ventana después de que el agente actúe en la página, para que la ruta de visión seleccionada vea qué cambió. Consume más tokens. Si la visión no está disponible, se omite el enriquecimiento y la tarea continúa con un aviso de estado.", 'st.display.auto_screenshot.off': 'Desactivada', - 'st.display.auto_screenshot.navigation': 'Al navegar', - 'st.display.auto_screenshot.state_change': 'Al cambiar de estado (por defecto)', + 'st.display.auto_screenshot.navigation': 'Al navegar (por defecto)', + 'st.display.auto_screenshot.state_change': 'Al cambiar de estado', 'st.display.auto_screenshot.every_step': 'En cada paso', 'st.display.tracing.label': 'Registrar trazas (para comparar modelos)', - 'st.display.tracing.desc_html': 'Guarda cada ejecución (peticiones al LLM, respuestas, llamadas a herramientas, capturas) en IndexedDB local para que puedas inspeccionar y comparar modelos lado a lado. Se abre en una pestaña de Trazas aparte. Desactivado por defecto porque añade escrituras en disco por paso. Abrir página de Trazas →', - 'st.display.lossless_tracing.label': 'Grabar detalles completos de la solicitud (nivel de depuración)', - 'st.display.lossless_tracing.desc_html': 'También guarda los prompts, mensajes y esquemas de herramientas completos de cada solicitud LLM en lugar de resúmenes sin contenido, y conserva hasta 200 KB de cada resultado de herramienta. Permite depuración profunda y reconstrucción de solicitudes. Desactivado por defecto porque escribe el contenido de tu conversación localmente y usa mucho más disco. Requiere que Grabar trazas esté activado.', + 'st.display.tracing.desc_html': 'Guarda cada ejecución (peticiones al LLM, respuestas, llamadas a herramientas, capturas) en IndexedDB local para que puedas inspeccionar y comparar modelos lado a lado, incluidos los prompts, mensajes y esquemas de herramientas completos de cada solicitud LLM y hasta 200 KB de cada resultado de herramienta. Se abre en una pestaña de Trazas aparte. Desactivado por defecto porque escribe el contenido de tu conversación localmente y usa mucho más disco. Abrir página de Trazas →', 'st.display.allow_local_network.label': 'Permitir al agente acceder a la red local', 'st.display.allow_local_network.desc': 'Permite que la herramienta fetch_url del agente alcance direcciones loopback (127.0.0.1, localhost) y privadas/RFC1918 (10.x, 192.168.x, 172.16–31.x). Útil para servidores de desarrollo locales, herramientas de intranet o APIs auto-alojadas. Desactivado por defecto. Al desactivarlo, se bloquean las URL escritas con IP privadas o de loopback y nombres localhost. No se comprueba la resolución DNS, por lo que otros nombres de host pueden alcanzar direcciones locales. Las IP literales de metadatos de la nube (169.254.169.254) y los nombres de metadatos incluidos en la lista o *.internal/*.local siguen bloqueados incluso al activarlo.', 'st.display.notify_sound.label': "Sonidos de notificación", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Modo de visión activado para el proveedor activo.", "sp.vision.off": "Modo de visión desactivado para el proveedor activo.", "sp.vision.error": "Falló el cambio del modo de visión: {msg}", - "st.tab.multimodal": "Modelos auxiliares", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Recomendado. Cuando está activado, WebBrain pide permiso la primera vez que hace clic, escribe, navega, ejecuta JavaScript, sube, descarga o graba en un sitio (y luego recuerda tu elección). Desactívalo para un uso rápido y sin avisos en sitios en los que confías plenamente.", "st.perms.gate.warning": "⚠️ Los avisos de permiso están DESACTIVADOS. WebBrain hará clic, escribirá, navegará, ejecutará JavaScript, subirá, descargará y grabará en cualquier sitio SIN preguntar, incluso en páginas cuyo contenido pueda estar controlado por un atacante. El contenido de la página se sigue tratando como no fiable internamente, pero nada impedirá que una instrucción inyectada desencadene una acción. Deja esto desactivado solo si confías plenamente en todos los sitios donde usas el asistente.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Predeterminado del sistema", "st.display.download_directory.error": "Usa una carpeta relativa como WebBrain o Work/WebBrain. No se permiten rutas absolutas ni “..”.", "st.display.strict_secret.label": "Manejo estricto de secretos", - "st.display.strict_secret.desc": "Se niega a citar credenciales (contraseñas, claves de API, tokens, OTPs) en resúmenes o texto del asistente, incluso cuando se las pidas explícitamente. Útil si compartes a menudo archivos de traza o tu pantalla. Desactivado por defecto para que el agente pueda repetir el valor exacto que pidas cuando lo necesites. Actívalo (Ajustes → Seguridad) cuando quieras mantener limpios los resúmenes de `done` y que las credenciales nunca se repitan.", + "st.display.strict_secret.desc": "Se niega a citar credenciales (contraseñas, claves de API, tokens, OTPs) en resúmenes o texto del asistente, incluso cuando se las pidas explícitamente. Útil si compartes a menudo archivos de traza o tu pantalla. Desactivado por defecto para que el agente pueda repetir el valor exacto que pidas cuando lo necesites. Actívalo cuando quieras mantener limpios los resúmenes de `done` y que las credenciales nunca se repitan.", "st.display.request_timeout.label": "Tiempo de espera de la petición al LLM", "st.display.request_timeout.desc": "Tiempo máximo de espera para recibir las cabeceras y para cada pausa entre fragmentos de la respuesta en streaming. Por defecto: 120 s. Auméntalo para modelos locales lentos, especialmente en CPU o con contextos grandes.", "st.providers.filter.all": "Todos", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Los mensajes se ponen en cola mientras WebBrain está ocupado. Solo /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces y /verbose pueden ejecutarse de inmediato como comandos slash.', 'tool.go_back': 'Volviendo atrás', 'tool.go_forward': 'Avanzando', - 'st.display.search.placeholder': 'Buscar en ajustes generales', - 'st.display.search.empty': 'No hay ajustes generales que coincidan.', + 'st.display.search.placeholder': 'Buscar en ajustes', + 'st.display.search.empty': 'No hay ajustes que coincidan.', 'st.display.advanced': 'Avanzado', ...getApocalypseModeCopy('es'), ...getEmergencyBoxCopy('es'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Lado mayor (ancho o alto) en píxeles de cualquier captura enviada a visión. Un tope más bajo reduce las imágenes antes de enviarlas, cortando tokens y coste. Un tope más alto mantiene la fidelidad.", "st.imageBudget.warning": "⚠️ Estos ajustes se aplican a capturas para visión (auto-captura, /screenshot, página completa, verify_form). Las imágenes guardadas manualmente a resolución completa no se ven afectadas. «Image detail» lo respetan endpoints estilo OpenAI; otros proveedores pueden ignorarlo.", - "st.redaction.heading": "Redacción de capturas de pantalla", "st.redaction.toggle.label": "Redactar contenido sensible en las capturas de pantalla", "st.redaction.toggle.desc": "Antes de enviar una captura de pantalla a un modelo de visión, difumina los campos de formulario y el texto que parezca un correo electrónico o un número de teléfono. La detección se ejecuta enteramente en tu dispositivo — no se transmite nada adicional.", "st.redaction.warning": "⚠️ Es una redacción best-effort y fail-open: si no se puede aplicar en una página (por ejemplo justo después de una navegación, en visores de PDF o en páginas restringidas del navegador), la captura se envía igualmente sin redactar. La detección usa solo heurísticas del DOM — texto dibujado en un canvas, datos personales dentro de imágenes, o cualquier cosa no reconocida como campo de formulario o texto de correo/teléfono puede pasar desapercibida, y el texto de la página enviado al modelo no se redacta con este ajuste. No es una garantía de seguridad. Para privacidad total, usa un modelo local/sin conexión (llama.cpp, Ollama): las capturas nunca saldrán de tu equipo y la redacción deja de ser necesaria.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "Exportar toda la sesión de trazas guardada como JSON, incluidas las capturas", "sp.export_traces.recording_truncated": "Se exportaron todos los registros guardados como JSON. El contenido omitido durante la grabación no puede recuperarse mediante la exportación.", "sp.slash.export_traces": "Exportar la cadena de herramientas (trazas)", - "sp.export_traces.none": "No hay trazas para esta conversación. Activa «Registrar trazas» en Ajustes y vuelve a ejecutar.", + "sp.export_traces.none": "No hay trazas para esta conversación. Activa «Registrar trazas» en Ajustes → Avanzado y vuelve a ejecutar.", "sp.export_traces.error": "No se pudieron exportar las trazas.", "sp.export_traces.done": "Cadena de herramientas exportada.", "sp.export_traces.no_conversation": "Aún no hay nada que exportar: inicia una conversación primero.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Cadena de herramientas exportada. Puede faltar turnos antiguos si esta conversación tiene muchas trazas.", "st.display.help_improve.label": "Ayuda a mejorar WebBrain", "st.display.help_improve.desc_html": "Permite conservar determinadas interacciones de WebBrain Compass y utilizarlas para evaluación, mejora, ajuste fino y entrenamiento. Activado de forma predeterminada. Desactívalo para impedir que futuras interacciones de Compass se utilicen con esos fines. WebBrain solo recopila las solicitudes de modelos locales y de tus propias API de los proveedores donde actives «Compartir consultas para investigación». Política de privacidad →", - "st.providers.webbrain_data_use.body": "Se incluye uso diario gratuito de WebBrain Compass. Mientras Ayuda a mejorar WebBrain está activado de forma predeterminada, algunas conversaciones de Compass pueden conservarse y utilizarse para evaluación, mejora, ajuste fino y entrenamiento. Desactívalo en General → Avanzado para excluir futuras interacciones de Compass de esos usos. WebBrain solo recopila las solicitudes de modelos locales y de tus propias API cuando activas la opción «Compartir consultas para investigación» de ese proveedor. {privacyLink}. Para obtener más uso, suscríbete en {subscribeLink}. Gestiona la facturación en {accountLink}.", + "st.providers.webbrain_data_use.body": "Se incluye uso diario gratuito de WebBrain Compass. Mientras Ayuda a mejorar WebBrain está activado de forma predeterminada, algunas conversaciones de Compass pueden conservarse y utilizarse para evaluación, mejora, ajuste fino y entrenamiento. Desactívalo en Ajustes → Avanzado para excluir futuras interacciones de Compass de esos usos. WebBrain solo recopila las solicitudes de modelos locales y de tus propias API cuando activas la opción «Compartir consultas para investigación» de ese proveedor. {privacyLink}. Para obtener más uso, suscríbete en {subscribeLink}. Gestiona la facturación en {accountLink}.", 'st.providers.share_research.label': "Compartir consultas para investigación", 'st.providers.share_research.hint': "Envía los prompts y respuestas de este proveedor a WebBrain para evaluación y mejora, incluidos el proveedor y el modelo utilizados. Las imágenes y los adjuntos binarios se eliminan y el texto se trunca antes de compartir; el resto del texto se envía tal cual.", 'st.providers.share_research.confirm': "¿Compartir las consultas de este proveedor con WebBrain para investigación?\n\nSi se activa, tus prompts, respuestas e interacciones de herramientas con este proveedor se enviarán a WebBrain para evaluación y mejora, junto con el nombre del proveedor y del modelo. El texto se envía tal cual tras eliminar imágenes y truncar contenidos largos, así que evita compartir datos personales sensibles. Puedes desactivarlo en cualquier momento para detener el intercambio.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "¿Quieres menos interrupciones? «Permitir siempre» recuerda este sitio. El comando de abajo desactiva los avisos de permisos de WebBrain en todos los sitios.", "sp.perm.insert_skip_command": "Insertar /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Tu borrador no ha cambiado. Bórralo antes de insertar el comando.", - "ob.act.permissions_tip": "Los avisos de permisos están activados de forma predeterminada. Los usuarios avanzados pueden desactivarlos globalmente con /dangerously-skip-permissions y volver a activarlos en Configuración → Permisos.", + "ob.act.permissions_tip": "Los avisos de permisos están activados de forma predeterminada. Los usuarios avanzados pueden desactivarlos globalmente con /dangerously-skip-permissions y volver a activarlos desde el botón ⚠ junto al micrófono.", 'st.provider.field.cache_read_cost_per_million': "Coste estimado de lectura de caché ($ / 1M tokens)", 'st.provider.field.cache_write_cost_per_million': "Coste estimado de escritura en caché de 5 min ($ / 1M tokens)", 'st.provider.field.cache_write_1h_cost_per_million': "Coste estimado de escritura en caché de 1 h ($ / 1M tokens)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "¿Reemplazar la copia cifrada en la nube con la configuración actual de WebBrain de este dispositivo?", "st.sync.consent.legacy": "¿Activar sincronización cifrada? WebBrain transmitirá una copia cifrada de extremo a extremo de sus recuerdos, el autocompletado de perfiles y la configuración del proveedor de claves API a WebBrain Compass. El historial de chat y los inicios de sesión de OAuth no están sincronizados.", "st.sync.consent.denied": "No se concedió el permiso de sincronización cifrada.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "La página cambió mientras se ejecutaba la tarea ({before} → {after}). La tarea continúa.", 'sp.activity.generating_answer': "Generando respuesta…", 'sp.activity.retrying_response': "Reintentando respuesta…", diff --git a/src/firefox/src/ui/locales/fa.js b/src/firefox/src/ui/locales/fa.js index 62ab737984..4eebb97e8c 100644 --- a/src/firefox/src/ui/locales/fa.js +++ b/src/firefox/src/ui/locales/fa.js @@ -14,14 +14,6 @@ export default { 'sp.ui_scale.decrease': 'کاهش بزرگ‌نمایی رابط افزونه', 'sp.ui_scale.increase': 'افزایش بزرگ‌نمایی رابط افزونه', 'sp.ui_scale.reset': 'بازنشانی', - 'st.display.ui_scale.label': 'بزرگ‌نمایی رابط کاربری افزونه', - 'st.display.ui_scale.decrease': 'کاهش بزرگ‌نمایی رابط افزونه', - 'st.display.ui_scale.increase': 'افزایش بزرگ‌نمایی رابط افزونه', - 'st.display.ui_scale.reset': 'بازنشانی', - 'st.display.ui_scale.desc': 'اندازهٔ پنل کناری و پنجرهٔ گفت‌وگوی جداگانه را بدون تغییر بزرگ‌نمایی صفحه تغییر دهید.', - 'st.display.ui_scale.shortcuts': 'میانبرهای اختصاصی: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'تنظیم نشده', - 'st.display.ui_scale.manage_shortcuts': 'سفارشی‌سازی میانبرها', 'tool.delegate_research': 'در حال پژوهش با ChatGPT', 'st.display.research_escalation.label': 'ارتقای پژوهش', 'st.display.research_escalation.desc': 'در صورت فعال بودن، WebBrain ممکن است پیش از ارسال یک درخواست پژوهشی فقط‌خواندنی و بسیار پیچیده به ChatGPT اجازه بخواهد. به‌صورت پیش‌فرض خاموش است. متن دقیق فقط پس از تأیید صریح شما به اشتراک گذاشته می‌شود.', @@ -497,7 +489,7 @@ export default { 'sp.step.result_label': "نتیجه", 'sp.api.enabled_html': "🔓 جهش های API فعال شد برای این گفتگو عامل اکنون ممکن است از POST/PUT/PATCH/DELETE از طریق fetch_url و execute_js استفاده کند، زمانی که تشخیص دهد API برای یک مرحله قابل اعتمادتر از UI است. UI-first پیش فرض باقی می ماند. وقتی مکالمه را بازنشانی می کنید، این پرچم پاک می شود.", - 'sp.permissions.disabled_html': "⚠️ درخواست‌های مجوز خاموش هستند. WebBrain کلیک می کند، تایپ می کند، پیمایش می کند، جاوا اسکریپت را اجرا می کند، آپلود می کند، دانلود می کند، ضبط می کند و کارهای آینده را بدون درخواست اولیه برنامه ریزی می کند. این را از تنظیمات → مجوزها → قبل از اقدامات بعدی بپرسید دوباره فعال کنید.", + 'sp.permissions.disabled_html': "⚠️ درخواست‌های مجوز خاموش هستند. WebBrain کلیک می کند، تایپ می کند، پیمایش می کند، جاوا اسکریپت را اجرا می کند، آپلود می کند، دانلود می کند، ضبط می کند و کارهای آینده را بدون درخواست اولیه برنامه ریزی می کند. این را از دکمهٔ ⚠ کنار میکروفون دوباره فعال کنید.", 'sp.permissions.button': 'درخواست‌های مجوز: روشن', 'sp.permissions.button_off': 'درخواست‌های مجوز: خاموش', 'sp.permissions.gate_desc': 'WebBrain اولین باری که در یک سایت کلیک می‌کند، تایپ می‌کند، فایلی دانلود می‌کند یا کدی اجرا می‌کند، اجازه می‌گیرد.', @@ -655,7 +647,7 @@ export default { 'ob.act.warn1': "WebBrain ممکن است برای برنامه ریزی اسکرین شات بگیرد. از استفاده از حالت نماینده در صفحات حساس مانند سلامت، امور مالی، دوستیابی یا پورتال های حساب خصوصی خودداری کنید، مگر اینکه این خطر را بپذیرید.", 'ob.act.warn2': "محتوای وب می‌تواند حاوی تزریق‌های بدافزار باشد که برای دستکاری رفتار هوش مصنوعی طراحی شده‌اند.", 'ob.act.warn3': "همیشه اقدامات پیشنهادی را مرور کنید و اجرای غیرمنتظره‌ای را متوقف کنید.", - 'ob.act.permissions_tip': "درخواست های مجوز به طور پیش فرض روشن هستند. کاربران پیشرفته می توانند با /dangerously-skip-permissions آنها را به صورت جهانی غیرفعال کنند و در تنظیمات → مجوزها مجدداً آنها را فعال کنند.", + 'ob.act.permissions_tip': "درخواست های مجوز به طور پیش فرض روشن هستند. کاربران پیشرفته می توانند با /dangerously-skip-permissions آنها را به صورت جهانی غیرفعال کنند و از دکمهٔ ⚠ کنار میکروفون دوباره آن‌ها را فعال کنند.", 'ob.tokens.title': "یک مدل انتخاب کنید", 'ob.tokens.body': "WebBrain برای کار کردن به یک مدل زبان نیاز دارد. ابتدا مدل های محلی را بررسی می کنیم. اگر هیچ یک در دسترس نیست، تنظیمات را باز کنید و یک ارائه دهنده اضافه کنید:", 'ob.tokens.scanning': "بررسی مدل های محلی...", @@ -681,23 +673,32 @@ export default { 'ob.btn.done': "شروع کنید", 'ob.btn.skip': "فعلا رد شوید", 'ob.btn.start': 'شروع', - 'ob.cloud.body': 'WebBrain Compass با یک بدله هفتگی رایگان آماده است. مکالمات Compass انتخابی ممکن است حفظ شوند و برای بهبود WebBrain استفاده شوند در حالی که Help Improve WebBrain به طور پیش فرض روشن است. شما می توانید آن را در Settings → General خاموش کنید.', + 'ob.cloud.body': 'WebBrain Compass با یک بدله هفتگی رایگان آماده است. مکالمات Compass انتخابی ممکن است حفظ شوند و برای بهبود WebBrain استفاده شوند در حالی که Help Improve WebBrain به طور پیش فرض روشن است. شما می توانید آن را در Settings → Advanced خاموش کنید.', 'ob.cloud.change': 'تغییر', 'ob.cloud.using': 'استفاده از WebBrain Compass.', // --- Settings ---------------------------------------------------------- 'st.title': "تنظیمات WebBrain", - 'st.subtitle': "ارائه دهندگان و تنظیمات برگزیده LLM خود را پیکربندی کنید · v{version}", + 'st.subtitle': "نحوهٔ کار WebBrain را پیکربندی کنید · v{version}", 'st.tab.display': "ژنرال", + 'st.tab.budgets': 'بودجه‌ها', + 'st.tab.advanced': 'پیشرفته', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'گفتار', + 'st.tab.generative': 'مولد', + 'st.tab.decision': 'تصمیم', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'ارائه‌دهندگان WebBrain', + 'st.providers_page.subtitle': 'مدل‌هایی را که WebBrain استفاده می‌کند انتخاب کنید · v{version}', + 'st.permissions_page.title': 'مجوزهای WebBrain', + 'st.permissions_page.subtitle': 'سایت‌هایی که WebBrain می‌تواند بدون پرسیدن در آن‌ها عمل کند', 'st.tab.providers': "ارائه دهندگان", 'st.tab.skills': "مهارت ها", 'st.tab.vision': "چشم انداز", - 'st.tab.multimodal': "مدل‌های کمکی", 'st.tab.memory': "حافظه", 'st.tab.profile': "نمایه", 'st.tab.account': "حساب", 'st.tab.captcha': "CAPTCHA", - 'st.tab.permissions': "مجوزها", 'st.perms.gate.label': "قبل از اقدامات بعدی بپرسید", 'st.perms.gate.desc': "توصیه می شود. وقتی روشن است، WebBrain اولین باری که کلیک می‌کند، تایپ می‌کند، پیمایش می‌کند، جاوا اسکریپت را اجرا می‌کند، آپلود می‌کند، دانلود می‌کند، ضبط می‌کند، یا زمان‌بندی کار آینده در یک سایت را می‌گیرد (سپس انتخاب شما را به خاطر می‌آورد). برای استفاده سریع و بی‌سرعت در سایت‌هایی که کاملاً به آن‌ها اعتماد دارید خاموش کنید.", @@ -719,8 +720,6 @@ export default { "st.account.update_payment": "به‌روزرسانی روش پرداخت", 'st.account.manage_billing': "مدیریت صورتحساب", - 'st.display.language.label': "زبان", - 'st.display.language.desc': "زبان رابط برای افزونه WebBrain.", 'st.display.theme.label': "ظاهر", 'st.display.theme.desc': "روشن، تاریک، یا تنظیمات سیستم عامل خود را دنبال کنید.", 'st.display.theme.system': "سیستم", @@ -730,8 +729,8 @@ export default { 'st.display.download_directory.desc': "زیرپوشه اختیاری در فهرست دانلودهای مرورگر یا سیستم شما. برای استفاده از پیش فرض سیستم، آن را خالی بگذارید.", 'st.display.download_directory.placeholder': "پیش فرض سیستم", 'st.display.download_directory.error': "از یک پوشه نسبی مانند WebBrain یا Work/WebBrain استفاده کنید. مسیرهای مطلق و «..» مجاز نیستند.", - 'st.display.search.placeholder': "تنظیمات عمومی را جستجو کنید", - 'st.display.search.empty': "تنظیمات عمومی مطابقت ندارد.", + 'st.display.search.placeholder': "جستجو در تنظیمات", + 'st.display.search.empty': "هیچ تنظیمی مطابقت ندارد.", 'st.display.advanced': "پیشرفته", ...getApocalypseModeCopy('fa'), ...getEmergencyBoxCopy('fa'), @@ -787,20 +786,18 @@ export default { 'st.display.auto_screenshot.label': "اسکرین شات خودکار", "st.display.auto_screenshot.desc": "پس از اقدام عامل روی صفحه، به‌طور خودکار از نمای صفحه عکس بگیرید تا مسیر بینایی انتخاب‌شده تغییرات را ببیند. این کار توکن بیشتری مصرف می‌کند. اگر بینایی در دسترس نباشد، غنی‌سازی رد می‌شود و کار با یک اعلان وضعیت ادامه می‌یابد.", 'st.display.auto_screenshot.off': "خاموش", - 'st.display.auto_screenshot.navigation': "در ناوبری", - 'st.display.auto_screenshot.state_change': "در تغییر وضعیت (پیش‌فرض)", + 'st.display.auto_screenshot.navigation': "در ناوبری (پیش‌فرض)", + 'st.display.auto_screenshot.state_change': "در تغییر وضعیت", 'st.display.auto_screenshot.every_step': "هر قدم", 'st.display.tracing.label': "ثبت ردیابی (برای مقایسه مدل)", - 'st.display.tracing.desc_html': "هر اجرا (درخواست‌های LLM، پاسخ‌ها، تماس‌های ابزار، تصاویر صفحه) را در IndexedDB محلی ادامه دهید تا بتوانید مدل‌ها را در کنار یکدیگر بررسی و مقایسه کنید. در یک برگه Traces جداگانه باز می شود. به‌طور پیش‌فرض خاموش است زیرا نوشته‌های دیسک را در هر مرحله اضافه می‌کند. باز کردن صفحه Traces →", - 'st.display.lossless_tracing.label': 'ثبت جزئیات کامل درخواست (لایه اشکالزدایی)', - 'st.display.lossless_tracing.desc_html': 'همچنین پرامپتها، پیامها و ساختار ابزارهای کامل هر درخواست LLM را بهجای خلاصههای بدون محتوا ذخیره میکند و تا ۲۰۰ کیلوبایت از هر نتیجه ابزار را نگه میدارد. اشکالزدایی عمیق و بازسازی درخواست را ممکن میسازد. بهصورت پیشفرض خاموش است زیرا محتوای گفتوگوی شما را محلی مینویسد و فضای دیسک بسیار بیشتری مصرف میکند. نیازمند فعال بودن ضبط ردگیری است.', + 'st.display.tracing.desc_html': "هر اجرا (درخواست‌های LLM، پاسخ‌ها، فراخوانی‌های ابزار، تصاویر صفحه) را در IndexedDB محلی ذخیره کنید تا بتوانید مدل‌ها را کنار هم بررسی و مقایسه کنید، از جمله پرامپت‌ها، پیام‌ها و ساختار کامل ابزارهای هر درخواست LLM و تا ۲۰۰ کیلوبایت از هر نتیجهٔ ابزار. در یک برگهٔ Traces جداگانه باز می‌شود. به‌طور پیش‌فرض خاموش است زیرا محتوای گفت‌وگوی شما را به‌صورت محلی می‌نویسد و فضای دیسک بسیار بیشتری مصرف می‌کند. باز کردن صفحه Traces →", 'st.display.cost_session_limit.label': "کمک هزینه جلسه هزینه ابر", 'st.display.cost_session_limit.desc': "هنگامی که این جلسه به میزان هزینه گزارش شده یا تخمین زده شده رسید، ابر را متوقف می کند و OpenRouter قبل از تماس مدل پولی دیگر اجرا می شود. پیش فرض 10 دلار.", 'st.display.cost_total_limit.label': "هزینه کل کمک هزینه", 'st.display.cost_total_limit.desc': "هزینه‌های گزارش‌شده یا تخمینی مدل ابر/OpenRouter را در سراسر برنامه افزودنی ردیابی می‌کند و تماس‌های پولی بیشتر را با کمک هزینه متوقف می‌کند. ارائه دهندگان محلی به حساب نمی آیند.", 'st.display.cost_reset': "بازنشانی هزینه", 'st.display.strict_secret.label': "برخورد محرمانه دقیق", - 'st.display.strict_secret.desc': "از نقل قول اعتبارنامه ها (گذرواژه، کلیدهای API، نشانه ها، OTPها) در خلاصه ها یا متن دستیار خودداری کنید - حتی زمانی که صریحاً آنها را درخواست می کنید. اگر به طور منظم فایل های ردیابی یا اشتراک گذاری صفحه را به اشتراک می گذارید مفید است. به‌طور پیش‌فرض خاموش است تا نماینده بتواند در صورت نیاز مقدار دقیقی را که درخواست می‌کنید بازگو کند. وقتی می‌خواهید خلاصه‌های `done` مرتب بمانند و اعتبارنامه‌ها هرگز تکرار نشوند، آن را روشن کنید (تنظیمات ← امنیت).", + 'st.display.strict_secret.desc': "از نقل قول اعتبارنامه ها (گذرواژه، کلیدهای API، نشانه ها، OTPها) در خلاصه ها یا متن دستیار خودداری کنید - حتی زمانی که صریحاً آنها را درخواست می کنید. اگر به طور منظم فایل های ردیابی یا اشتراک گذاری صفحه را به اشتراک می گذارید مفید است. به‌طور پیش‌فرض خاموش است تا نماینده بتواند در صورت نیاز مقدار دقیقی را که درخواست می‌کنید بازگو کند. وقتی می‌خواهید خلاصه‌های `done` مرتب بمانند و اعتبارنامه‌ها هرگز تکرار نشوند، آن را روشن کنید.", 'st.display.allow_local_network.label': "به عامل اجازه دسترسی به شبکه محلی را بدهید", 'st.display.allow_local_network.desc': "به ابزار fetch_url عامل اجازه می‌دهد به آدرس‌های Loopback (127.0.0.1، localhost) و خصوصی/RFC1918 (10.x، 192.168.x، 172.16–31.x) دسترسی پیدا کند. برای سرورهای توسعه دهنده محلی، ابزارهای اینترانت یا APIهای خود میزبان مفید است. به‌طور پیش‌فرض خاموش است. وقتی خاموش است، URLهایی که در آن‌ها IP خصوصی یا Loopback به‌صورت مستقیم نوشته شده و نام‌های localhost مسدود می‌شوند. نتیجهٔ DNS بررسی نمی‌شود، پس نام‌های میزبان دیگر ممکن است به آدرس‌های محلی برسند. IPهای مستقیم ابردادهٔ ابری (169.254.169.254) و نام‌های فهرست‌شدهٔ ابرداده یا *.internal/*.local حتی در صورت روشن بودن مسدود می‌مانند.", 'st.display.scheduled_tasks.label': "وظایف برنامه ریزی شده", @@ -890,7 +887,7 @@ export default { 'st.providers.compat.value.max': "حداکثر", 'st.providers.compat.value.system': "سیستم", 'st.providers.compat.value.developer': "توسعه دهنده", - 'st.providers.webbrain_data_use.body': "استفاده روزانه رایگان از WebBrain Compass گنجانده شده است. در حالی که Help Improve WebBrain به طور پیش‌فرض روشن است، مکالمات انتخابی Compass ممکن است حفظ شوند و برای ارزیابی، بهبود، تنظیم دقیق و آموزش استفاده شوند. آن را در عمومی ← پیشرفته خاموش کنید تا تعاملات Compass آینده را از این کاربردها حذف کنید. WebBrain درخواست‌های مدل محلی و API شخصی شما را فقط زمانی جمع‌آوری می‌کند که گزینه «اشتراک‌گذاری پرسش‌ها برای پژوهش» همین ارائه‌دهنده را روشن کنید. {privacyLink}. برای استفاده بیشتر، در {subscribeLink} مشترک شوید. صورتحساب را در {accountLink} مدیریت کنید.", + 'st.providers.webbrain_data_use.body': "استفاده روزانه رایگان از WebBrain Compass گنجانده شده است. در حالی که Help Improve WebBrain به طور پیش‌فرض روشن است، مکالمات انتخابی Compass ممکن است حفظ شوند و برای ارزیابی، بهبود، تنظیم دقیق و آموزش استفاده شوند. آن را در تنظیمات ← پیشرفته خاموش کنید تا تعاملات Compass آینده را از این کاربردها حذف کنید. WebBrain درخواست‌های مدل محلی و API شخصی شما را فقط زمانی جمع‌آوری می‌کند که گزینه «اشتراک‌گذاری پرسش‌ها برای پژوهش» همین ارائه‌دهنده را روشن کنید. {privacyLink}. برای استفاده بیشتر، در {subscribeLink} مشترک شوید. صورتحساب را در {accountLink} مدیریت کنید.", 'st.providers.share_research.label': "اشتراک‌گذاری پرسش‌ها برای پژوهش", 'st.providers.share_research.hint': "اعلان‌ها و پاسخ‌های این ارائه‌دهنده را به‌همراه نام ارائه‌دهنده و مدل استفاده‌شده برای ارزیابی و بهبود به WebBrain ارسال می‌کند. تصاویر و پیوست‌های باینری پیش از اشتراک حذف و متن کوتاه می‌شود؛ متن باقی‌مانده بدون تغییر ارسال می‌شود.", 'st.providers.share_research.confirm': "پرسش‌های این ارائه‌دهنده برای پژوهش با WebBrain به اشتراک گذاشته شود؟\n\nهنگام فعال بودن، اعلان‌ها، پاسخ‌ها و تعامل‌های ابزار شما با این ارائه‌دهنده به‌همراه نام ارائه‌دهنده و مدل برای ارزیابی و بهبود به WebBrain ارسال می‌شود. متن پس از حذف تصاویر و کوتاه‌سازی محتوای طولانی بدون تغییر ارسال می‌شود، پس از اشتراک داده‌های شخصی حساس خودداری کنید. می‌توانید هر زمان آن را خاموش کنید تا اشتراک آینده متوقف شود.", @@ -1035,7 +1032,6 @@ export default { // Screenshot redaction (issue #312): local, best-effort PII blurring that // runs in-browser before any screenshot reaches a vision model. - 'st.redaction.heading': "ویرایش اسکرین شات", 'st.redaction.toggle.label': "محتوای حساس را از روی اسکرین شات ها ویرایش کنید", 'st.redaction.toggle.desc': "قبل از ارسال اسکرین شات به مدل بینایی، فیلدها و متنی را که شبیه ایمیل یا شماره تلفن است محو کنید. تشخیص به طور کامل بر روی دستگاه شما اجرا می شود - هیچ چیز اضافی منتقل نمی شود.", 'st.redaction.warning': "⚠️ بهترین تلاش و باز کردن شکست: اگر ویرایش در یک صفحه اجرا نشود (مثلاً بلافاصله پس از پیمایش، در بینندگان PDF یا در صفحات مرورگر محدود شده)، تصویر صفحه همچنان بدون ویرایش ارسال می‌شود. تشخیص فقط از روش‌های اکتشافی DOM استفاده می‌کند - متن بوم کشیده، PII داخل تصاویر، یا هر چیزی که به‌عنوان فیلد فرم یا متن ایمیل/تلفن شناسایی نمی‌شود ممکن است از بین برود، و متن صفحه ارسال‌شده به مدل با این تنظیم ویرایش نمی‌شود. این یک تضمین امنیتی نیست. برای حفظ حریم خصوصی کامل، از یک مدل محلی/آفلاین (llama.cpp، Ollama) استفاده کنید: تصاویر صفحه‌نمایش هرگز از دستگاه خود خارج نمی‌شوند و ویرایش غیرضروری است.", @@ -1223,7 +1219,7 @@ export default { "sp.slash.export_traces_full": "صدور تمام نشست ردگیری ذخیره‌شده به صورت JSON، شامل تصاویر صفحه", "sp.export_traces.recording_truncated": "تمام رکوردهای ذخیره‌شده به صورت JSON صادر شدند. محتوای حذف‌شده هنگام ضبط با صدور قابل بازیابی نیست.", "sp.slash.export_traces": "صادرات زنجیره ابزار (ردیابی)", - "sp.export_traces.none": "هیچ اثری برای این گفتگو وجود ندارد. ضبط ردیابی را در تنظیمات فعال کنید، سپس دوباره اجرا کنید.", + "sp.export_traces.none": "هیچ اثری برای این گفتگو وجود ندارد. ضبط ردیابی را در تنظیمات ← پیشرفته فعال کنید، سپس دوباره اجرا کنید.", "sp.export_traces.error": "ردیابی صادر نشد.", "sp.export_traces.done": "زنجیره ابزار صادر شد.", "sp.export_traces.no_conversation": "هنوز چیزی برای صادرات وجود ندارد - ابتدا یک مکالمه را شروع کنید.", @@ -1297,7 +1293,7 @@ export default { "st.sync.confirm.reset": "کپی ابری رمزگذاری شده با راه‌اندازی فعلی WebBrain این دستگاه جایگزین شود؟", "st.sync.consent.legacy": "همگام سازی رمزگذاری شده روشن شود؟ WebBrain یک نسخه رمزگذاری شده سرتاسر از خاطرات، تکمیل خودکار نمایه و تنظیمات ارائه دهنده کلید API شما را به WebBrain Compass منتقل می کند. سابقه گپ و ورود به سیستم OAuth همگام سازی نمی شوند.", "st.sync.consent.denied": "مجوز همگام‌سازی رمزگذاری شده داده نشد.", - 'st.providers.webgpu_note.body': '{modelLink} بدون هیچ نقطهٔ پایانی API کاملاً در Chrome اجرا می‌شود. آن را در Settings > Providers > WebGPU یا حالت Apocalypse دانلود کنید، سپس از کنترل nuclear در standalone chat استفاده کنید.', + 'st.providers.webgpu_note.body': '{modelLink} بدون هیچ نقطهٔ پایانی API کاملاً در Chrome اجرا می‌شود. آن را در Providers > WebGPU یا حالت Apocalypse دانلود کنید، سپس از کنترل nuclear در standalone chat استفاده کنید.', 'sp.monitor.navigation': "صفحه هنگام اجرای کار تغییر کرد ({before} → {after}). کار ادامه می‌یابد.", 'sp.activity.generating_answer': "در حال تولید پاسخ…", 'sp.activity.retrying_response': "در حال تلاش دوباره برای پاسخ…", diff --git a/src/firefox/src/ui/locales/fr.js b/src/firefox/src/ui/locales/fr.js index 175a270a62..f83e4886db 100644 --- a/src/firefox/src/ui/locales/fr.js +++ b/src/firefox/src/ui/locales/fr.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Réduire le zoom de l’interface', 'sp.ui_scale.increase': 'Augmenter le zoom de l’interface', 'sp.ui_scale.reset': 'Réinitialiser', - 'st.display.ui_scale.label': 'Zoom de l’interface de l’extension', - 'st.display.ui_scale.decrease': 'Réduire le zoom de l’interface', - 'st.display.ui_scale.increase': 'Augmenter le zoom de l’interface', - 'st.display.ui_scale.reset': 'Réinitialiser', - 'st.display.ui_scale.desc': 'Redimensionne le panneau latéral et la fenêtre de chat détachée sans modifier le zoom de la page.', - 'st.display.ui_scale.shortcuts': 'Raccourcis dédiés : {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Non attribué', - 'st.display.ui_scale.manage_shortcuts': 'Personnaliser les raccourcis', 'tool.delegate_research': 'Recherche avec ChatGPT', 'st.display.research_escalation.label': 'Escalade de recherche', 'st.display.research_escalation.desc': 'Lorsque cette option est activée, WebBrain peut demander votre accord avant d’envoyer à ChatGPT une requête de recherche en lecture seule particulièrement complexe. Désactivé par défaut. La requête exacte n’est partagée qu’après votre accord explicite.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Ne pas continuer", "sp.recipient.reason_unrequested": "WebBrain n’a pas pu déduire de votre demande qu’un message doit être envoyé. La conversation ouverte sur {host} est avec {recipient}.", "sp.recipient.reason_unnamed": "WebBrain n’a pas pu déduire de votre demande qui doit recevoir ce message. La conversation ouverte sur {host} est avec {recipient}.", - 'st.tab.permissions': "Autorisations", 'st.perms.revoke': "Révoquer", 'st.perms.clear_all': "Effacer toutes les autorisations", 'st.perms.gate.label': "Demander avant les actions importantes", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Commencer', 'ob.btn.skip': 'Ignorer pour le moment', 'ob.btn.start': 'Démarrer', - 'ob.cloud.body': 'WebBrain Compass est prêt avec une allocation hebdomadairene gratuite. Les conversations Compass sélectionnées peuvent être conservées et utilisées pour améliorer WebBrain tant que Aider à améliorer WebBrain est activé par défaut. Vous pouvez le désactiver dans Paramètres → Général.', + 'ob.cloud.body': 'WebBrain Compass est prêt avec une allocation hebdomadairene gratuite. Les conversations Compass sélectionnées peuvent être conservées et utilisées pour améliorer WebBrain tant que Aider à améliorer WebBrain est activé par défaut. Vous pouvez le désactiver dans Paramètres → Avancé.', 'ob.cloud.change': 'Changer', 'ob.cloud.using': 'Utilisation de WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Résultat', 'sp.api.enabled_html': '🔓 Mutations d\'API activées pour cette conversation. L\'agent peut désormais utiliser POST/PUT/PATCH/DELETE via fetch_url et execute_js quand il juge l\'API plus fiable que l\'interface pour une étape. L\'interface reste privilégiée par défaut. Ce drapeau s\'efface quand vous réinitialisez la conversation.', - 'sp.permissions.disabled_html': '⚠️ Les demandes d\'autorisation sont DÉSACTIVÉES. WebBrain cliquera, saisira du texte, naviguera, exécutera du JavaScript, téléversera, téléchargera, enregistrera et planifiera des travaux futurs sans demander au préalable. Réactivez cette option depuis Paramètres → Autorisations → Demander avant les actions importantes.', + 'sp.permissions.disabled_html': "⚠️ Les demandes d'autorisation sont DÉSACTIVÉES. WebBrain cliquera, saisira du texte, naviguera, exécutera du JavaScript, téléversera, téléchargera, enregistrera et planifiera des travaux futurs sans demander au préalable. Réactivez cette option depuis le bouton ⚠ à côté du micro.", 'sp.permissions.button': 'Demandes d\'autorisation : activées', 'sp.permissions.button_off': 'Demandes d\'autorisation : désactivées', 'sp.permissions.gate_desc': 'WebBrain demande la première fois qu\'il clique, saisit, télécharge ou exécute du code sur un site.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Attente de « {selector} »', 'st.title': 'Paramètres WebBrain', - 'st.subtitle': 'Configurez vos fournisseurs de LLM et vos préférences · v{version}', + 'st.subtitle': 'Configurez le fonctionnement de WebBrain · v{version}', 'st.tab.display': 'Général', + 'st.tab.budgets': 'Budgets', + 'st.tab.advanced': 'Avancé', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Parole', + 'st.tab.generative': 'Génératif', + 'st.tab.decision': 'Décision', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Fournisseurs WebBrain', + 'st.providers_page.subtitle': 'Choisissez les modèles utilisés par WebBrain · v{version}', + 'st.permissions_page.title': 'Autorisations WebBrain', + 'st.permissions_page.subtitle': 'Sites où WebBrain peut agir sans demander d’abord', 'st.tab.providers': 'Fournisseurs', 'st.tab.vision': 'Vision', 'st.tab.profile': 'Profil', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "Mettre à jour le moyen de paiement", 'st.account.manage_billing': 'Gérer la facturation', - 'st.display.language.label': 'Langue', - 'st.display.language.desc': 'Langue de l\'interface de l\'extension WebBrain.', 'st.display.verbose.label': 'Mode détaillé', 'st.display.verbose.desc': 'Affiche tous les détails des appels d\'outils, les arguments et les résultats JSON bruts. Désactivé par défaut pour un chat plus épuré.', 'st.display.selection_shortcut.label': 'Raccourci de sélection', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Capture automatique', "st.display.auto_screenshot.desc": "Capture automatiquement une image de la fenêtre après une action de l’agent sur la page, afin que la route de vision sélectionnée voie ce qui a changé. Cela consomme plus de jetons. Si la vision est indisponible, l’enrichissement est ignoré et la tâche continue avec un avis d’état.", 'st.display.auto_screenshot.off': 'Désactivée', - 'st.display.auto_screenshot.navigation': 'À la navigation', - 'st.display.auto_screenshot.state_change': 'Au changement d\'état (par défaut)', + 'st.display.auto_screenshot.navigation': 'À la navigation (par défaut)', + 'st.display.auto_screenshot.state_change': "Au changement d'état", 'st.display.auto_screenshot.every_step': 'À chaque étape', 'st.display.tracing.label': 'Enregistrer les traces (pour comparer des modèles)', - 'st.display.tracing.desc_html': 'Conserve chaque exécution (requêtes LLM, réponses, appels d\'outils, captures) dans IndexedDB local pour pouvoir inspecter et comparer les modèles côte à côte. S\'ouvre dans un onglet Traces distinct. Désactivé par défaut car cela ajoute des écritures disque à chaque étape. Ouvrir la page Traces →', - 'st.display.lossless_tracing.label': 'Enregistrer les détails complets des requêtes (niveau débogage)', - 'st.display.lossless_tracing.desc_html': 'Conserve aussi les prompts, messages et schémas d\'outils complets de chaque requête LLM au lieu de résumés sans contenu, et garde jusqu\'à 200 Ko de chaque résultat d\'outil. Permet un débogage approfondi et la reconstruction des requêtes. Désactivé par défaut car cela écrit localement le contenu de votre conversation et utilise beaucoup plus d\'espace disque. Nécessite que l\'enregistrement des traces soit activé.', + 'st.display.tracing.desc_html': "Conserve chaque exécution (requêtes LLM, réponses, appels d'outils, captures) dans IndexedDB local pour pouvoir inspecter et comparer les modèles côte à côte, y compris les prompts, messages et schémas d'outils complets de chaque requête LLM et jusqu'à 200 Ko de chaque résultat d'outil. S'ouvre dans un onglet Traces distinct. Désactivé par défaut car cela écrit localement le contenu de votre conversation et utilise beaucoup plus d'espace disque. Ouvrir la page Traces →", 'st.display.allow_local_network.label': 'Autoriser l\'agent à accéder au réseau local', 'st.display.allow_local_network.desc': 'Permet à l\'outil fetch_url de l\'agent d\'atteindre les adresses loopback (127.0.0.1, localhost) et privées/RFC1918 (10.x, 192.168.x, 172.16–31.x). Utile pour les serveurs de dev locaux, outils intranet ou API auto-hébergées. Désactivé par défaut. Lorsqu’il est désactivé, les URL contenant une adresse IP privée ou de boucle locale écrite directement et les noms localhost sont bloqués. La résolution DNS n’est pas vérifiée : d’autres noms peuvent encore atteindre des adresses locales. Les adresses IP littérales de métadonnées cloud (169.254.169.254) et les noms de métadonnées répertoriés ou *.internal/*.local restent bloqués même lorsqu’il est activé.', 'st.display.notify_sound.label': "Sons de notification", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Mode vision activé pour le fournisseur actif.", "sp.vision.off": "Mode vision désactivé pour le fournisseur actif.", "sp.vision.error": "Échec du basculement de la vision : {msg}", - "st.tab.multimodal": "Modèles auxiliaires", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Recommandé. Lorsque activé, WebBrain demande l'autorisation la première fois qu'il clique, saisit du texte, navigue, exécute du JavaScript, téléverse, télécharge ou enregistre sur un site (puis mémorise votre choix). Désactivez-le pour une utilisation rapide et sans invite sur les sites en lesquels vous avez pleinement confiance.", "st.perms.gate.warning": "⚠️ Les demandes d'autorisation sont DÉSACTIVÉES. WebBrain cliquera, saisira du texte, naviguera, exécutera du JavaScript, téléversera, téléchargera et enregistrera sur n'importe quel site SANS demander — y compris sur des pages dont le contenu peut être contrôlé par un attaquant. Le contenu des pages reste traité comme non fiable en interne, mais rien n'empêchera une instruction injectée de déclencher une action. Ne laissez ceci désactivé que si vous avez pleinement confiance en chaque site sur lequel vous utilisez l'assistant.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Valeur par défaut du système", "st.display.download_directory.error": "Utilisez un dossier relatif comme WebBrain ou Work/WebBrain. Les chemins absolus et « .. » ne sont pas autorisés.", "st.display.strict_secret.label": "Gestion stricte des secrets", - "st.display.strict_secret.desc": "Refuse de citer les identifiants (mots de passe, clés d'API, jetons, OTPs) dans les résumés ou le texte de l'assistant — même lorsque vous le demandez explicitement. Utile si vous partagez régulièrement des fichiers de trace ou votre écran. Désactivé par défaut afin que l'agent puisse répéter la valeur exacte que vous demandez lorsque vous en avez besoin. Activez-le (Paramètres → Sécurité) lorsque vous voulez garder les résumés `done` propres et que les identifiants ne soient jamais répétés.", + "st.display.strict_secret.desc": "Refuse de citer les identifiants (mots de passe, clés d'API, jetons, OTPs) dans les résumés ou le texte de l'assistant — même lorsque vous le demandez explicitement. Utile si vous partagez régulièrement des fichiers de trace ou votre écran. Désactivé par défaut afin que l'agent puisse répéter la valeur exacte que vous demandez lorsque vous en avez besoin. Activez-le lorsque vous voulez garder les résumés `done` propres et que les identifiants ne soient jamais répétés.", "st.display.request_timeout.label": "Délai d'attente des requêtes LLM", "st.display.request_timeout.desc": "Attente maximale des en-têtes de réponse et de chaque pause entre les fragments de réponse en streaming. Par défaut : 120 s. Augmentez cette durée pour les modèles locaux lents, surtout sur CPU ou avec un contexte volumineux.", "st.providers.filter.all": "Tous", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Les messages sont mis en file d\'attente pendant que WebBrain est occupé. Seuls /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces et /verbose peuvent s\'exécuter immédiatement comme commandes slash.', 'tool.go_back': 'Revenir en arrière', 'tool.go_forward': 'Aller en avant', - 'st.display.search.placeholder': 'Rechercher dans les paramètres généraux', - 'st.display.search.empty': 'Aucun paramètre général correspondant.', + 'st.display.search.placeholder': 'Rechercher dans les paramètres', + 'st.display.search.empty': 'Aucun paramètre correspondant.', 'st.display.advanced': 'Avancé', ...getApocalypseModeCopy('fr'), ...getEmergencyBoxCopy('fr'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Plus grand côté (largeur ou hauteur) en pixels pour toute capture envoyée à la vision. Un plafond plus bas réduit les images avant envoi, ce qui coupe tokens et coût. Un plafond plus haut conserve la fidélité.", "st.imageBudget.warning": "⚠️ Ces réglages s’appliquent aux captures pour la vision (auto-capture, /screenshot, page entière, verify_form). Les images enregistrées manuellement en pleine résolution ne sont pas affectées. « Image detail » est respecté par les endpoints de type OpenAI ; d’autres fournisseurs peuvent l’ignorer.", - "st.redaction.heading": "Floutage des captures d'écran", "st.redaction.toggle.label": "Flouter le contenu sensible dans les captures d'écran", "st.redaction.toggle.desc": "Avant qu'une capture d'écran soit envoyée à un modèle de vision, floute les champs de formulaire et le texte qui ressemble à un e-mail ou un numéro de téléphone. La détection s'exécute entièrement sur votre appareil — rien de plus n'est transmis.", "st.redaction.warning": "⚠️ Meilleur effort et fail-open : si le floutage ne peut pas s'exécuter sur une page (par exemple juste après une navigation, dans les visionneuses PDF, ou sur des pages restreintes du navigateur), la capture est quand même envoyée non floutée. La détection utilise uniquement des heuristiques DOM — texte dessiné sur un canvas, données personnelles dans des images, ou tout ce qui n'est pas reconnu comme champ de formulaire ou texte e-mail/téléphone peut passer inaperçu, et le texte de la page envoyé au modèle n'est pas flouté par ce réglage. Ce n'est PAS une garantie de sécurité. Pour une confidentialité totale, utilisez un modèle local/hors ligne (llama.cpp, Ollama) : les captures ne quittent alors jamais votre machine et le floutage devient inutile.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "Exporter toute la session de traces enregistrée en JSON, captures comprises", "sp.export_traces.recording_truncated": "Tous les enregistrements sauvegardés ont été exportés en JSON. Le contenu omis lors de l’enregistrement ne peut pas être récupéré par l’export.", "sp.slash.export_traces": "Exporter la chaîne d'outils (traces)", - "sp.export_traces.none": "Aucune trace pour cette conversation. Activez « Enregistrer les traces » dans les paramètres, puis relancez.", + "sp.export_traces.none": "Aucune trace pour cette conversation. Activez « Enregistrer les traces » dans Paramètres → Avancé, puis relancez.", "sp.export_traces.error": "Impossible d'exporter les traces.", "sp.export_traces.done": "Chaîne d'outils exportée.", "sp.export_traces.no_conversation": "Rien à exporter pour l'instant — commencez une conversation d'abord.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Chaîne d'outils exportée. Des tours plus anciens peuvent manquer si cette conversation a beaucoup de traces.", "st.display.help_improve.label": "Aider à améliorer WebBrain", "st.display.help_improve.desc_html": "Autorise la conservation de certaines interactions WebBrain Compass et leur utilisation pour l’évaluation, l’amélioration, l’ajustement fin et l’entraînement. Activé par défaut. Désactivez cette option pour empêcher que les futures interactions Compass soient utilisées à ces fins. Les requêtes des modèles locaux et de vos propres API ne sont collectées par WebBrain que pour les fournisseurs où vous activez « Partager les requêtes pour la recherche ». Politique de confidentialité →", - "st.providers.webbrain_data_use.body": "Une utilisation quotidienne gratuite de WebBrain Compass est incluse. Tant que Aider à améliorer WebBrain est activé par défaut, certaines conversations Compass peuvent être conservées et utilisées pour l’évaluation, l’amélioration, l’ajustement fin et l’entraînement. Désactivez cette option dans Général → Avancé pour exclure les futures interactions Compass de ces usages. Les requêtes des modèles locaux et de vos propres API ne sont collectées par WebBrain que si vous activez l’option « Partager les requêtes pour la recherche » de ce fournisseur. {privacyLink}. Pour davantage d’utilisation, abonnez-vous sur {subscribeLink}. Gérez la facturation sur {accountLink}.", + "st.providers.webbrain_data_use.body": "Une utilisation quotidienne gratuite de WebBrain Compass est incluse. Tant que Aider à améliorer WebBrain est activé par défaut, certaines conversations Compass peuvent être conservées et utilisées pour l’évaluation, l’amélioration, l’ajustement fin et l’entraînement. Désactivez cette option dans Paramètres → Avancé pour exclure les futures interactions Compass de ces usages. Les requêtes des modèles locaux et de vos propres API ne sont collectées par WebBrain que si vous activez l’option « Partager les requêtes pour la recherche » de ce fournisseur. {privacyLink}. Pour davantage d’utilisation, abonnez-vous sur {subscribeLink}. Gérez la facturation sur {accountLink}.", 'st.providers.share_research.label': "Partager les requêtes pour la recherche", 'st.providers.share_research.hint': "Envoie les prompts et les réponses de ce fournisseur à WebBrain pour évaluation et amélioration, y compris le fournisseur et le modèle utilisés. Les images et pièces jointes binaires sont supprimées et le texte est tronqué avant partage ; le texte restant est envoyé tel quel.", 'st.providers.share_research.confirm': "Partager les requêtes de ce fournisseur avec WebBrain pour la recherche ?\n\nSi activé, vos prompts, réponses et interactions d’outils avec ce fournisseur seront envoyés à WebBrain pour évaluation et amélioration, avec le nom du fournisseur et du modèle. Le texte est envoyé tel quel après suppression des images et troncation des contenus longs : évitez donc de partager des données personnelles sensibles. Vous pouvez désactiver cette option à tout moment pour arrêter le partage.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "Vous voulez moins d’interruptions ? « Toujours autoriser » mémorise ce site. La commande ci-dessous désactive les demandes d’autorisation de WebBrain sur tous les sites.", "sp.perm.insert_skip_command": "Insérer /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Votre brouillon reste inchangé. Effacez-le avant d’insérer la commande.", - "ob.act.permissions_tip": "Les demandes d’autorisation sont activées par défaut. Les utilisateurs avancés peuvent les désactiver partout avec /dangerously-skip-permissions et les réactiver dans Paramètres → Autorisations.", + "ob.act.permissions_tip": "Les demandes d’autorisation sont activées par défaut. Les utilisateurs avancés peuvent les désactiver partout avec /dangerously-skip-permissions et les réactiver depuis le bouton ⚠ à côté du micro.", 'st.provider.field.cache_read_cost_per_million': "Coût estimé de lecture du cache ($ / 1M tokens)", 'st.provider.field.cache_write_cost_per_million': "Coût estimé d’écriture du cache (5 min) ($ / 1M tokens)", 'st.provider.field.cache_write_1h_cost_per_million': "Coût estimé d’écriture du cache (1 h) ($ / 1M tokens)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "Remplacer la copie cloud cryptée par la configuration WebBrain actuelle de cet appareil ?", "st.sync.consent.legacy": "Activer la synchronisation chiffrée ? WebBrain transmettra une copie cryptée de bout en bout de vos souvenirs, du remplissage automatique de votre profil et des paramètres du fournisseur de clé API à WebBrain Compass. L'historique des discussions et les connexions OAuth ne sont pas synchronisés.", "st.sync.consent.denied": "L'autorisation de synchronisation chiffrée n'a pas été accordée.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "La page a changé pendant la tâche ({before} → {after}). La tâche continue.", 'sp.activity.generating_answer': "Génération de la réponse…", 'sp.activity.retrying_response': "Nouvelle tentative de réponse…", diff --git a/src/firefox/src/ui/locales/he.js b/src/firefox/src/ui/locales/he.js index a8ebd08cff..bf26df8ffa 100644 --- a/src/firefox/src/ui/locales/he.js +++ b/src/firefox/src/ui/locales/he.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'הקטנת תצוגת ממשק התוסף', 'sp.ui_scale.increase': 'הגדלת תצוגת ממשק התוסף', 'sp.ui_scale.reset': 'איפוס', - 'st.display.ui_scale.label': 'הגדלת ממשק התוסף', - 'st.display.ui_scale.decrease': 'הקטנת תצוגת ממשק התוסף', - 'st.display.ui_scale.increase': 'הגדלת תצוגת ממשק התוסף', - 'st.display.ui_scale.reset': 'איפוס', - 'st.display.ui_scale.desc': 'שינוי גודל הסרגל הצדדי וחלון הצ׳אט הנפרד בלי לשנות את תצוגת הדף.', - 'st.display.ui_scale.shortcuts': 'קיצורי דרך ייעודיים: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'לא הוקצה', - 'st.display.ui_scale.manage_shortcuts': 'התאמת קיצורי דרך', 'tool.delegate_research': 'חוקר עם ChatGPT', 'st.display.research_escalation.label': 'הסלמת מחקר', 'st.display.research_escalation.desc': 'כאשר האפשרות מופעלת, WebBrain עשוי לבקש אישור לפני שליחת בקשת מחקר מורכבת לקריאה בלבד אל ChatGPT. כבוי כברירת מחדל. הבקשה המדויקת משותפת רק לאחר אישור מפורש שלך.', @@ -482,7 +474,7 @@ export default { "sp.step.input_label": "קלט", "sp.step.result_label": "תוצאה", "sp.api.enabled_html": "🔓 שינויי API מופעלים בשיחה הזו. הסוכן יכול כעת להשתמש בבקשות POST/PUT/PATCH/DELETE דרך fetch_url ו-execute_js כאשר הוא מעריך שה-API אמין יותר מממשק המשתמש בשלב מסוים. ממשק המשתמש נשאר ברירת המחדל. הדגל נמחק בעת איפוס השיחה.", - "sp.permissions.disabled_html": "⚠️ בקשות ההרשאה כבויות. WebBrain ילחץ, יקליד, ינווט, יריץ JavaScript, יעלה ויוריד קבצים, יקליט ויתזמן עבודה עתידית בלי לשאול תחילה. ניתן להפעיל אותן מחדש דרך הגדרות ← הרשאות ← בקש אישור לפני פעולות משמעותיות.", + "sp.permissions.disabled_html": "⚠️ בקשות ההרשאה כבויות. WebBrain ילחץ, יקליד, ינווט, יריץ JavaScript, יעלה ויוריד קבצים, יקליט ויתזמן עבודה עתידית בלי לשאול תחילה. ניתן להפעיל אותן מחדש דרך הכפתור ⚠ ליד המיקרופון.", "sp.permissions.button": "בקשות הרשאה: מופעלות", "sp.permissions.button_off": "בקשות הרשאה: כבויות", "sp.permissions.gate_desc": "WebBrain שואל בפעם הראשונה שהוא לוחץ, מקליד, מוריד קבצים או מריץ קוד באתר.", @@ -632,16 +624,26 @@ export default { "ob.btn.done": "התחל", "ob.btn.skip": "דלג לעת עתה", 'ob.btn.start': 'התחל', - 'ob.cloud.body': 'WebBrain Compass מוכן עם הקצבה שבועית חינםית. שיחות Compass נבחרות עשויות להישמר ולשמש לשיפור WebBrain בזמן ש- Help Improve WebBrain מופעל כברירת מחדל. אתה יכול לכבות את זה בהגדרות ← כללי.', + 'ob.cloud.body': 'WebBrain Compass מוכן עם הקצבה שבועית חינםית. שיחות Compass נבחרות עשויות להישמר ולשמש לשיפור WebBrain בזמן ש- Help Improve WebBrain מופעל כברירת מחדל. אתה יכול לכבות את זה בהגדרות ← מתקדם.', 'ob.cloud.change': 'שינוי', 'ob.cloud.using': 'שימוש ב-WebBrain Compass.', "st.title": "הגדרות WebBrain", - "st.subtitle": "הגדר ספקי LLM והעדפות · גרסה {version}", + "st.subtitle": "הגדר את אופן הפעולה של WebBrain · גרסה {version}", "st.tab.display": "כללי", + "st.tab.budgets": "תקציבים", + "st.tab.advanced": "מִתקַדֵם", + "st.tab.llm": "LLM", + "st.tab.speech": "דיבור", + "st.tab.generative": "גנרטיבי", + "st.tab.decision": "החלטות", + "st.tab.safesocial": "SafeSocial", + "st.providers_page.title": "ספקי WebBrain", + "st.providers_page.subtitle": "בחר את המודלים ש-WebBrain משתמש בהם · גרסה {version}", + "st.permissions_page.title": "הרשאות WebBrain", + "st.permissions_page.subtitle": "אתרים שבהם WebBrain רשאי לפעול בלי לשאול קודם", "st.tab.providers": "ספקים", "st.tab.skills": "מיומנויות", "st.tab.vision": "ראייה", - "st.tab.multimodal": "מודלים מסייעים", 'sp.slash.workflow_editor': "עורך תהליכי עבודה", "sp.slash.workflows": "הצגה וניהול של תהליכי עבודה שמורים", "sp.slash.teach": "הקלטת הפעולות שלך כתהליך עבודה שמור", @@ -679,7 +681,6 @@ export default { "st.tab.profile": "פרופיל", "st.tab.account": "חשבון", "st.tab.captcha": "CAPTCHA", - "st.tab.permissions": "הרשאות", "st.perms.gate.label": "שאל לפני פעולות בעלות השפעה", "st.perms.gate.desc": "מומלץ. כאשר האפשרות מופעלת, WebBrain מבקש רשות בפעם הראשונה שהוא לוחץ, מקליד, מנווט, מריץ JavaScript, מעלה או מוריד קבצים, מקליט או מתזמן עבודה עתידית באתר, ולאחר מכן זוכר את בחירתך. כבה רק לשימוש מהיר ללא בקשות באתרים שאתה בוטח בהם לחלוטין.", "st.perms.gate.warning": "⚠️ בקשות ההרשאה כבויות. WebBrain ילחץ, יקליד, ינווט, יריץ JavaScript, יעלה ויוריד קבצים, יקליט ויתזמן עבודה עתידית בכל אתר בלי לשאול — גם בדפים שתוקף עשוי לשלוט בתוכן שלהם. תוכן הדף עדיין מטופל פנימית כלא-מהימן, אך דבר לא יעצור הוראה מוזרקת מלגרום לפעולה. השאר אפשרות זו כבויה רק אם אתה בוטח לחלוטין בכל אתר שבו נעשה שימוש בסוכן.", @@ -698,8 +699,6 @@ export default { "st.account.payment_failed": "לא ניתן היה להשלים את התשלום עבור המינוי. עדכנו את אמצעי התשלום כדי לשחזר את התוכנית בתשלום.", "st.account.update_payment": "עדכון אמצעי התשלום", "st.account.manage_billing": "ניהול חיוב", - "st.display.language.label": "שפה", - "st.display.language.desc": "שפת הממשק של תוסף WebBrain.", "st.display.theme.label": "מראה", "st.display.theme.desc": "בחר ערכת נושא בהירה, כהה או לפי הגדרת מערכת ההפעלה.", "st.display.theme.system": "מערכת", @@ -709,8 +708,8 @@ export default { "st.display.download_directory.desc": "תיקיית משנה אופציונלית בתוך תיקיית ההורדות של הדפדפן או המערכת. השאירו ריק כדי להשתמש בברירת המחדל של המערכת.", "st.display.download_directory.placeholder": "ברירת המחדל של המערכת", "st.display.download_directory.error": "השתמשו בתיקייה יחסית כמו WebBrain או Work/WebBrain. נתיבים מוחלטים ו-”..“ אינם מותרים.", - "st.display.search.placeholder": "חפש בהגדרות כלליות", - "st.display.search.empty": "אין הגדרות כלליות תואמות.", + "st.display.search.placeholder": "חפש בהגדרות", + "st.display.search.empty": "אין הגדרות תואמות.", "st.display.advanced": "מִתקַדֵם", ...getApocalypseModeCopy('he'), ...getEmergencyBoxCopy('he'), @@ -764,20 +763,18 @@ export default { "st.display.auto_screenshot.label": "צילום מסך אוטומטי", "st.display.auto_screenshot.desc": "צלם אוטומטית צילום מסך של אזור התצוגה לאחר שהסוכן פועל בדף, כדי שמסלול הראייה שנבחר יוכל לראות מה השתנה. הפעולה צורכת יותר אסימונים. אם הראייה אינה זמינה, ההעשרה מדולגת והמשימה ממשיכה עם הודעת מצב.", "st.display.auto_screenshot.off": "כבוי", - "st.display.auto_screenshot.navigation": "על ניווט", - "st.display.auto_screenshot.state_change": "בשינוי מצב (ברירת מחדל)", + "st.display.auto_screenshot.navigation": "על ניווט (ברירת מחדל)", + "st.display.auto_screenshot.state_change": "בשינוי מצב", "st.display.auto_screenshot.every_step": "כל צעד", "st.display.tracing.label": "הקלטת עקבות (להשוואת מודלים)", - "st.display.tracing.desc_html": "תתמיד בכל ריצה (LLM בקשות, תגובות, קריאות לכלים, צילומי מסך) לתוך IndexedDB המקומי כדי שתוכל לבדוק ולהשוות מודלים זה לצד זה. נפתח בלשונית Traces נפרדת. כבוי כברירת מחדל מכיוון שהוא מוסיף כתיבה בדיסק בכל שלב. פתח את דף העקבות →", - "st.display.lossless_tracing.label": "רישום פרטי בקשה מלאים (שכבת דיבאג)", - "st.display.lossless_tracing.desc_html": "שומר גם את ההנחיות, ההודעות והמבנים המלאים של כל בקשת LLM במקום סיכומים חסרי תוכן, ומחזיק עד 200KB מכל תוצאת כלי. מאפשר ניפוי שגיאות מעמיק ושחזור בקשות. כבוי כברירת מחדל משום שהוא כותב את תוכן השיחה שלך מקומית ומשתמש בהרבה יותר מקום. דורש שהקלטת מעקב תהיה פעילה.", + "st.display.tracing.desc_html": "שומר כל ריצה (בקשות LLM, תגובות, קריאות לכלים, צילומי מסך) ב-IndexedDB המקומי כדי שתוכל לבדוק ולהשוות מודלים זה לצד זה, כולל ההנחיות, ההודעות ומבני הכלים המלאים של כל בקשת LLM ועד 200KB מכל תוצאת כלי. נפתח בלשונית Traces נפרדת. כבוי כברירת מחדל משום שהוא כותב את תוכן השיחה שלך מקומית ומשתמש בהרבה יותר מקום. פתח את דף העקבות →", "st.display.cost_session_limit.label": "קצבת הפגישה בעלות ענן", "st.display.cost_session_limit.desc": "מפסיק ענן ו OpenRouter פועל לפני שיחת מודל בתשלום נוספת ברגע שההפעלה הזו מגיעה לקצבת העלות המדווחת או המשוערת. ברירת מחדל 10 $.", "st.display.cost_total_limit.label": "הקצבה כוללת של עלות ענן", "st.display.cost_total_limit.desc": "עוקבים מדווחים או ענן משוער/OpenRouter הוצאה של הדגם ברחבי השלוחה ומפסיקה שיחות נוספות בתשלום בקצבה. ספקים מקומיים אינם נספרים.", "st.display.cost_reset": "אפס את ההוצאה", "st.display.strict_secret.label": "טיפול סודי קפדני", - "st.display.strict_secret.desc": "מנע ציטוט של פרטי גישה (סיסמאות, מפתחות API, אסימונים וקודים חד-פעמיים) בסיכומים או בתשובות — גם אם ביקשת אותם במפורש. שימושי בעת שיתוף עקבות או מסך. כבוי כברירת מחדל כדי שהסוכן יוכל לחזור על הערך המדויק שביקשת כשתצטרך אותו. הפעל אותו (הגדרות ← אבטחה) כשאתה רוצה שסיכומי `done` יישארו מסודרים ופרטי גישה לא יחזרו על עצמם.", + "st.display.strict_secret.desc": "מנע ציטוט של פרטי גישה (סיסמאות, מפתחות API, אסימונים וקודים חד-פעמיים) בסיכומים או בתשובות — גם אם ביקשת אותם במפורש. שימושי בעת שיתוף עקבות או מסך. כבוי כברירת מחדל כדי שהסוכן יוכל לחזור על הערך המדויק שביקשת כשתצטרך אותו. הפעל אותו כשאתה רוצה שסיכומי `done` יישארו מסודרים ופרטי גישה לא יחזרו על עצמם.", "st.display.allow_local_network.label": "אפשר לסוכן לגשת לרשת המקומית", "st.display.allow_local_network.desc": "נותן לסוכן fetch_url לולאה חוזרת של כלי הגעה (127.0.0.1, localhost) ו-private/RFC1918 כתובות (10.x, 192.168.x, 172.16–31.x). שימושי עבור שרתי פיתוח מקומיים, כלי אינטראנט או ממשקי API מתארחים בעצמם. כבוי כברירת מחדל. כשהוא כבוי, כתובות URL שבהן נכתבה ישירות כתובת IP פרטית או loopback ושמות localhost נחסמים. פתרון DNS אינו נבדק, ולכן שמות מארח אחרים עדיין עשויים להגיע לכתובות מקומיות. כתובות IP ישירות של מטא־נתוני ענן (169.254.169.254) ושמות מטא־נתונים שברשימה או *.internal/*.local נשארים חסומים גם כשהאפשרות מופעלת.", "st.display.scheduled_tasks.label": "משימות מתוזמנות", @@ -1099,7 +1096,6 @@ export default { "st.imageBudget.maxDimension.desc": "הצלע הארוכה (רוחב או גובה) בפיקסלים לכל צילום שנשלח לראייה. תקרה נמוכה יותר מקטינה תמונות לפני השליחה ומורידה טוקנים ועלות. תקרה גבוהה יותר שומרת נאמנות.", "st.imageBudget.warning": "⚠️ ההגדרות האלה חלות על צילומים לראייה (צילום אוטומטי, /screenshot, עמוד מלא, verify_form). תמונות שנשמרו ידנית ברזולוציה מלאה אינן מושפעות. «Image detail» מכובד על ידי נקודות קצה בסגנון OpenAI; ספקים אחרים עשויים להתעלם.", - "st.redaction.heading": "טשטוש צילומי מסך", "st.redaction.toggle.label": "טשטש תוכן רגיש בצילומי מסך", "st.redaction.toggle.desc": "לפני שצילום מסך נשלח למודל ראייה, מטשטש שדות טופס וטקסט שנראה כמו אימייל או מספר טלפון. הזיהוי פועל כולו במכשיר שלך — שום דבר נוסף לא מועבר.", "st.redaction.warning": "⚠️ זהו טשטוש במאמץ סביר (best-effort) מסוג fail-open: אם הטשטוש לא יכול לפעול בדף מסוים (למשל מיד אחרי ניווט, בצפייה בקבצי PDF, או בדפי דפדפן מוגבלים), צילום המסך עדיין יישלח ללא טשטוש. הזיהוי מסתמך רק על היוריסטיקות DOM — טקסט המצויר על canvas, מידע אישי בתוך תמונות, או כל דבר שלא מזוהה כשדה טופס או כטקסט אימייל/טלפון עלול לחמוק, וטקסט הדף הנשלח למודל אינו מטושטש על ידי הגדרה זו. זו אינה ערבות אבטחה. לפרטיות מלאה, השתמש במודל מקומי/לא מקוון (llama.cpp, Ollama): כך צילומי מסך לעולם לא יעזבו את המכשיר שלך והטשטוש כבר לא יידרש.", @@ -1113,7 +1109,7 @@ export default { "sp.slash.export_traces_full": "ייצוא כל סשן המעקב השמור כ־JSON, כולל צילומי מסך", "sp.export_traces.recording_truncated": "כל הרשומות השמורות יוצאו כ־JSON. תוכן שהושמט בזמן ההקלטה אינו ניתן לשחזור באמצעות ייצוא.", "sp.slash.export_traces": "ייצוא שרשרת הכלים (מעקבים)", - "sp.export_traces.none": "אין מעקבים לשיחה זו. הפעילו את «הקלטת מעקבים» בהגדרות והריצו שוב.", + "sp.export_traces.none": "אין מעקבים לשיחה זו. הפעילו את «הקלטת מעקבים» בהגדרות ← מתקדם והריצו שוב.", "sp.export_traces.error": "לא ניתן לייצא מעקבים.", "sp.export_traces.done": "שרשרת הכלים יוצאה.", "sp.export_traces.no_conversation": "אין עדיין מה לייצא — התחילו שיחה קודם.", @@ -1121,7 +1117,7 @@ export default { "sp.export_traces.truncated": "שרשרת הכלים יוצאה. תורות ישנות עשויות לחסר אם לשיחה יש הרבה מעקבים.", "st.display.help_improve.label": "עזרה בשיפור WebBrain", "st.display.help_improve.desc_html": "אפשרו לשמור אינטראקציות נבחרות עם WebBrain Compass ולהשתמש בהן להערכה, שיפור, כוונון עדין ואימון. מופעל כברירת מחדל. כבו כדי למנוע שימוש באינטראקציות Compass עתידיות למטרות אלה. WebBrain אוסף בקשות למודלים מקומיים ול-API שלכם רק מספקים שבהם הפעלתם את «שיתוף שאילתות למחקר». מדיניות פרטיות →", - "st.providers.webbrain_data_use.body": "שימוש יומי חינמי ב-WebBrain Compass כלול. כאשר ״עזרה בשיפור WebBrain״ מופעלת כברירת מחדל, ייתכן ששיחות Compass נבחרות יישמרו וישמשו להערכה, שיפור, כוונון עדין ואימון. כבו את האפשרות ב״כללי ← מִתקַדֵם״ כדי להחריג אינטראקציות Compass עתידיות משימושים אלה. WebBrain אוסף בקשות למודלים מקומיים ול-API שלכם רק כאשר אתם מפעילים את האפשרות «שיתוף שאילתות למחקר» של ספק זה. {privacyLink}. לשימוש נוסף, הירשמו דרך {subscribeLink}. נהלו את החיוב דרך {accountLink}.", + "st.providers.webbrain_data_use.body": "שימוש יומי חינמי ב-WebBrain Compass כלול. כאשר ״עזרה בשיפור WebBrain״ מופעלת כברירת מחדל, ייתכן ששיחות Compass נבחרות יישמרו וישמשו להערכה, שיפור, כוונון עדין ואימון. כבו את האפשרות ב״הגדרות ← מִתקַדֵם״ כדי להחריג אינטראקציות Compass עתידיות משימושים אלה. WebBrain אוסף בקשות למודלים מקומיים ול-API שלכם רק כאשר אתם מפעילים את האפשרות «שיתוף שאילתות למחקר» של ספק זה. {privacyLink}. לשימוש נוסף, הירשמו דרך {subscribeLink}. נהלו את החיוב דרך {accountLink}.", 'st.providers.share_research.label': "שיתוף שאילתות למחקר", 'st.providers.share_research.hint': "שולח את ההנחיות והתשובות של ספק זה ל-WebBrain להערכה ולשיפור, כולל הספק והמודל ששימשו. תמונות וקבצים בינאריים מוסרים והטקסט נחתך לפני השיתוף; הטקסט הנותר נשלח כפי שהוא.", 'st.providers.share_research.confirm': "לשתף את השאילתות של ספק זה עם WebBrain למחקר?\n\nכאשר מופעל, ההנחיות, התשובות ואינטראקציות הכלים שלך עם ספק זה יישלחו ל-WebBrain להערכה ולשיפור, יחד עם שם הספק והמודל. הטקסט נשלח כפי שהוא לאחר הסרת תמונות וקיצוץ תוכן ארוך, לכן הימנעו משיתוף מידע אישי רגיש. ניתן לכבות בכל עת כדי להפסיק את השיתוף.", @@ -1167,7 +1163,7 @@ export default { "sp.perm.skip_hint": "רוצה פחות הפרעות? ״אפשר תמיד״ זוכר את האתר הזה. הפקודה שלמטה משביתה את בקשות ההרשאה של WebBrain בכל האתרים.", "sp.perm.insert_skip_command": "הוספת /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "הטיוטה שלך לא השתנתה. יש לנקות אותה לפני הוספת הפקודה.", - "ob.act.permissions_tip": "בקשות הרשאה מופעלות כברירת מחדל. משתמשים מתקדמים יכולים להשבית אותן בכל האתרים באמצעות /dangerously-skip-permissions ולהפעיל אותן מחדש דרך הגדרות ← הרשאות.", + "ob.act.permissions_tip": "בקשות הרשאה מופעלות כברירת מחדל. משתמשים מתקדמים יכולים להשבית אותן בכל האתרים באמצעות /dangerously-skip-permissions ולהפעיל אותן מחדש דרך הכפתור ⚠ ליד המיקרופון.", 'st.provider.field.cache_read_cost_per_million': "עלות משוערת לקריאה מהמטמון ($ / מיליון אסימונים)", 'st.provider.field.cache_write_cost_per_million': "עלות משוערת לכתיבה למטמון ל-5 דקות ($ / מיליון אסימונים)", 'st.provider.field.cache_write_1h_cost_per_million': "עלות משוערת לכתיבה למטמון לשעה ($ / מיליון אסימונים)", @@ -1229,7 +1225,7 @@ export default { "st.sync.confirm.reset": "האם להחליף את עותק הענן המוצפן בהגדרות WebBrain הנוכחיות של המכשיר הזה?", "st.sync.consent.legacy": "להפעיל סנכרון מוצפן? WebBrain ישדר עותק מוצפן מקצה לקצה של הזיכרונות, המילוי האוטומטי של הפרופיל והגדרות ספק מפתח ה-API שלך ל-WebBrain Compass. היסטוריית הצ'אט וכניסות OAuth אינן מסונכרנות.", "st.sync.consent.denied": "הרשאת סנכרון מוצפן לא ניתנה.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "הדף השתנה בזמן שהמשימה פעלה ({before} → {after}). ממשיכים במשימה.", 'sp.activity.generating_answer': "יוצר תשובה…", 'sp.activity.retrying_response': "מנסה שוב להשיב…", diff --git a/src/firefox/src/ui/locales/hi.js b/src/firefox/src/ui/locales/hi.js index 2235cbdf1d..4149bdcd8d 100644 --- a/src/firefox/src/ui/locales/hi.js +++ b/src/firefox/src/ui/locales/hi.js @@ -14,14 +14,6 @@ export default { 'sp.ui_scale.decrease': 'एक्सटेंशन UI को छोटा करें', 'sp.ui_scale.increase': 'एक्सटेंशन UI को बड़ा करें', 'sp.ui_scale.reset': 'रीसेट', - 'st.display.ui_scale.label': 'एक्सटेंशन UI ज़ूम', - 'st.display.ui_scale.decrease': 'एक्सटेंशन UI को छोटा करें', - 'st.display.ui_scale.increase': 'एक्सटेंशन UI को बड़ा करें', - 'st.display.ui_scale.reset': 'रीसेट', - 'st.display.ui_scale.desc': 'पेज का ज़ूम बदले बिना साइड पैनल और अलग चैट विंडो का आकार बदलें।', - 'st.display.ui_scale.shortcuts': 'समर्पित शॉर्टकट: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'निर्धारित नहीं', - 'st.display.ui_scale.manage_shortcuts': 'शॉर्टकट कस्टमाइज़ करें', 'tool.delegate_research': 'ChatGPT से शोध हो रहा है', 'st.display.research_escalation.label': 'शोध एस्केलेशन', 'st.display.research_escalation.desc': 'सक्षम होने पर, WebBrain असामान्य रूप से जटिल केवल-पढ़ने योग्य शोध प्रॉम्प्ट को ChatGPT पर भेजने से पहले अनुमति मांग सकता है। डिफ़ॉल्ट रूप से बंद। सटीक प्रॉम्प्ट केवल आपकी स्पष्ट स्वीकृति के बाद साझा किया जाता है।', @@ -497,7 +489,7 @@ export default { 'sp.step.result_label': "नतीजा", 'sp.api.enabled_html': "🔓 एपीआई म्यूटेशन सक्षम इस बातचीत के लिए. जब एजेंट किसी चरण के लिए एपीआई को यूआई से अधिक विश्वसनीय मानता है तो वह अब Fetch_url औरexecute_js के माध्यम से POST/PUT/PATCH/DELETE का उपयोग कर सकता है। यूआई-प्रथम डिफ़ॉल्ट रहता है। जब आप वार्तालाप को रीसेट करते हैं तो यह ध्वज साफ़ हो जाता है।", - 'sp.permissions.disabled_html': "⚠️ अनुमति संकेत बंद हैं. WebBrain पहले पूछे बिना क्लिक करेगा, टाइप करेगा, नेविगेट करेगा, जावास्क्रिप्ट चलाएगा, अपलोड करेगा, डाउनलोड करेगा, रिकॉर्ड करेगा और भविष्य के काम को शेड्यूल करेगा। सेटिंग्स → अनुमतियाँ → परिणामी कार्रवाई से पहले पूछें से इसे पुनः सक्षम करें।", + 'sp.permissions.disabled_html': "⚠️ अनुमति संकेत बंद हैं. WebBrain पहले पूछे बिना क्लिक करेगा, टाइप करेगा, नेविगेट करेगा, जावास्क्रिप्ट चलाएगा, अपलोड करेगा, डाउनलोड करेगा, रिकॉर्ड करेगा और भविष्य के काम को शेड्यूल करेगा। माइक्रोफ़ोन के पास वाले ⚠ बटन से इसे फिर से सक्षम करें।", 'sp.permissions.button': 'अनुमति संकेत: चालू', 'sp.permissions.button_off': 'अनुमति संकेत: बंद', 'sp.permissions.gate_desc': 'किसी साइट पर पहली बार क्लिक करने, टाइप करने, डाउनलोड करने या कोड चलाने से पहले WebBrain पूछता है।', @@ -655,7 +647,7 @@ export default { 'ob.act.warn1': "WebBrain योजना बनाने के लिए स्क्रीनशॉट कैप्चर कर सकता है। स्वास्थ्य, वित्त, डेटिंग या निजी खाता पोर्टल जैसे संवेदनशील पेजों पर एजेंट मोड का उपयोग करने से बचें, जब तक कि आप उस जोखिम को स्वीकार नहीं करते।", 'ob.act.warn2': "वेब सामग्री में एआई व्यवहार में हेरफेर करने के लिए डिज़ाइन किए गए दुर्भावनापूर्ण प्रॉम्प्ट इंजेक्शन हो सकते हैं।", 'ob.act.warn3': "हमेशा सुझाई गई कार्रवाइयों की समीक्षा करें और अप्रत्याशित दिखने वाले रन रोकें।", - 'ob.act.permissions_tip': "अनुमति संकेत डिफ़ॉल्ट रूप से चालू हैं. उन्नत उपयोगकर्ता उन्हें /dangerously-skip-permissions के साथ विश्व स्तर पर अक्षम कर सकते हैं और सेटिंग्स → अनुमतियाँ में उन्हें पुनः सक्षम कर सकते हैं।", + 'ob.act.permissions_tip': "अनुमति संकेत डिफ़ॉल्ट रूप से चालू हैं. उन्नत उपयोगकर्ता उन्हें /dangerously-skip-permissions के साथ विश्व स्तर पर अक्षम कर सकते हैं और माइक्रोफ़ोन के पास वाले ⚠ बटन से उन्हें फिर से सक्षम कर सकते हैं।", 'ob.tokens.title': "एक मॉडल चुनें", 'ob.tokens.body': "WebBrain को काम करने के लिए एक भाषा मॉडल की आवश्यकता है। हम पहले स्थानीय मॉडलों की जांच करेंगे। यदि कोई उपलब्ध नहीं है, तो सेटिंग्स खोलें और एक प्रदाता जोड़ें:", 'ob.tokens.scanning': "स्थानीय मॉडलों की जाँच की जा रही है...", @@ -681,23 +673,32 @@ export default { 'ob.btn.done': "आरंभ करें", 'ob.btn.skip': "अभी के लिए छोड़ें", 'ob.btn.start': 'प्रारंभ', - 'ob.cloud.body': 'WebBrain Compass एक निःशुल्क साप्ताहिक भत्ते के साथ तैयार है। चयनित Compass बातचीत बनाए रखी जा सकती है और WebBrain में सुधार के लिए उपयोग की जा सकती है जबकि Help Improve WebBrain डिफ़ॉल्ट रूप से चालू है। आप इसे Settings → General में बंद कर सकते हैं।', + 'ob.cloud.body': 'WebBrain Compass एक निःशुल्क साप्ताहिक भत्ते के साथ तैयार है। चयनित Compass बातचीत बनाए रखी जा सकती है और WebBrain में सुधार के लिए उपयोग की जा सकती है जबकि Help Improve WebBrain डिफ़ॉल्ट रूप से चालू है। आप इसे Settings → Advanced में बंद कर सकते हैं।', 'ob.cloud.change': 'बदलें', 'ob.cloud.using': 'WebBrain Compass का उपयोग कर रहा है।', // --- Settings ---------------------------------------------------------- 'st.title': "WebBrain सेटिंग्स", - 'st.subtitle': "अपने एलएलएम प्रदाताओं और प्राथमिकताओं को कॉन्फ़िगर करें · v{version}", + 'st.subtitle': "WebBrain के काम करने का तरीका कॉन्फ़िगर करें · v{version}", 'st.tab.display': "सामान्य", + 'st.tab.budgets': 'बजट', + 'st.tab.advanced': 'उन्नत', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'वाक्', + 'st.tab.generative': 'जनरेटिव', + 'st.tab.decision': 'निर्णय', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain प्रदाता', + 'st.providers_page.subtitle': 'WebBrain द्वारा उपयोग किए जाने वाले मॉडल चुनें · v{version}', + 'st.permissions_page.title': 'WebBrain अनुमतियाँ', + 'st.permissions_page.subtitle': 'वे साइटें जहाँ WebBrain पहले पूछे बिना काम कर सकता है', 'st.tab.providers': "प्रदाता", 'st.tab.skills': "कौशल", 'st.tab.vision': "दृष्टि", - 'st.tab.multimodal': "सहायक मॉडल", 'st.tab.memory': "स्मृति", 'st.tab.profile': "प्रोफाइल", 'st.tab.account': "खाता", 'st.tab.captcha': "कैप्चा", - 'st.tab.permissions': "अनुमतियाँ", 'st.perms.gate.label': "परिणामी कार्रवाई से पहले पूछें", 'st.perms.gate.desc': "अनुशंसित. चालू होने पर, WebBrain पहली बार किसी साइट पर क्लिक करने, टाइप करने, नेविगेट करने, जावास्क्रिप्ट चलाने, अपलोड करने, डाउनलोड करने, रिकॉर्ड करने या भविष्य के काम को शेड्यूल करने पर अनुमति मांगता है (फिर आपकी पसंद को याद करता है)। उन साइटों पर तेज़, त्वरित-मुक्त उपयोग के लिए बंद करें जिन पर आप पूरी तरह भरोसा करते हैं।", @@ -719,8 +720,6 @@ export default { "st.account.update_payment": "भुगतान विधि अपडेट करें", 'st.account.manage_billing': "बिलिंग प्रबंधित करें", - 'st.display.language.label': "भाषा", - 'st.display.language.desc': "WebBrain प्लगइन के लिए इंटरफ़ेस भाषा।", 'st.display.theme.label': "दिखावट", 'st.display.theme.desc': "प्रकाश, अंधेरा, या अपनी ओएस सेटिंग का पालन करें।", 'st.display.theme.system': "सिस्टम", @@ -730,8 +729,8 @@ export default { 'st.display.download_directory.desc': "आपके ब्राउज़र या सिस्टम डाउनलोड निर्देशिका के अंदर वैकल्पिक सबफ़ोल्डर। सिस्टम डिफ़ॉल्ट का उपयोग करने के लिए खाली छोड़ दें.", 'st.display.download_directory.placeholder': "सिस्टम डिफ़ॉल्ट", 'st.display.download_directory.error': "WebBrain या Work/WebBrain जैसे संबंधित फ़ोल्डर का उपयोग करें। पूर्ण पथ और \"..\" की अनुमति नहीं है।", - 'st.display.search.placeholder': "सामान्य सेटिंग्स खोजें", - 'st.display.search.empty': "कोई सामान्य सेटिंग मेल नहीं खाती.", + 'st.display.search.placeholder': "सेटिंग्स खोजें", + 'st.display.search.empty': "कोई सेटिंग मेल नहीं खाती.", 'st.display.advanced': "उन्नत", ...getApocalypseModeCopy('hi'), ...getEmergencyBoxCopy('hi'), @@ -787,20 +786,18 @@ export default { 'st.display.auto_screenshot.label': "ऑटो-स्क्रीनशॉट", "st.display.auto_screenshot.desc": "एजेंट के पेज पर कार्य करने के बाद अपने-आप व्यूपोर्ट स्क्रीनशॉट लें, ताकि चुना गया विज़न मार्ग बदलाव देख सके। इसमें अधिक टोकन लगते हैं। विज़न उपलब्ध न होने पर संवर्धन छोड़ दिया जाता है और कार्य स्थिति सूचना के साथ जारी रहता है।", 'st.display.auto_screenshot.off': "बंद", - 'st.display.auto_screenshot.navigation': "नेविगेशन पर", - 'st.display.auto_screenshot.state_change': "राज्य परिवर्तन पर (डिफ़ॉल्ट)", + 'st.display.auto_screenshot.navigation': "नेविगेशन पर (डिफ़ॉल्ट)", + 'st.display.auto_screenshot.state_change': "राज्य परिवर्तन पर", 'st.display.auto_screenshot.every_step': "हर कदम", 'st.display.tracing.label': "रिकॉर्ड निशान (मॉडल तुलना के लिए)", - 'st.display.tracing.desc_html': "प्रत्येक रन (एलएलएम अनुरोध, प्रतिक्रिया, टूल कॉल, स्क्रीनशॉट) को स्थानीय IndexedDB में जारी रखें ताकि आप साथ-साथ मॉडलों का निरीक्षण और तुलना कर सकें। एक अलग ट्रेसेस टैब में खुलता है। डिफ़ॉल्ट रूप से बंद है क्योंकि यह प्रति चरण डिस्क राइट जोड़ता है। ट्रेस पेज खोलें →", - 'st.display.lossless_tracing.label': 'पूर्ण अनुरोध विवरण रिकॉर्ड करें (डीबग स्तर)', - 'st.display.lossless_tracing.desc_html': 'प्रत्येक LLM अनुरोध के पूर्ण प्रॉम्प्ट, संदेश और टूल स्कीमा को बिना सामग्री वाले सारांशों के बजाय सहेजता है, और प्रत्येक टूल परिणाम का 200 KB तक रखता है। गहन डीबगिंग और अनुरोध पुनर्निर्माण सक्षम करता है। डिफ़ॉल्ट रूप से बंद क्योंकि यह आपकी बातचीत की सामग्री को स्थानीय रूप से लिखता है और बहुत अधिक डिस्क उपयोग करता है। ट्रेस रिकॉर्डिंग चालू होना आवश्यक है।', + 'st.display.tracing.desc_html': "प्रत्येक रन (LLM अनुरोध, प्रतिक्रियाएँ, टूल कॉल, स्क्रीनशॉट) को स्थानीय IndexedDB में सहेजें ताकि आप मॉडलों को साथ-साथ जाँच और तुलना कर सकें — प्रत्येक LLM अनुरोध के पूर्ण प्रॉम्प्ट, संदेश और टूल स्कीमा तथा प्रत्येक टूल परिणाम के 200 KB तक सहित। एक अलग ट्रेसेस टैब में खुलता है। डिफ़ॉल्ट रूप से बंद क्योंकि यह आपकी बातचीत की सामग्री को स्थानीय रूप से लिखता है और बहुत अधिक डिस्क उपयोग करता है। ट्रेस पेज खोलें →", 'st.display.cost_session_limit.label': "क्लाउड लागत सत्र भत्ता", 'st.display.cost_session_limit.desc': "एक बार जब यह सत्र रिपोर्ट की गई या अनुमानित लागत भत्ता तक पहुंच जाता है, तो क्लाउड रुक जाता है और OpenRouter किसी अन्य भुगतान मॉडल कॉल से पहले चलता है। डिफ़ॉल्ट $10.", 'st.display.cost_total_limit.label': "क्लाउड लागत कुल भत्ता", 'st.display.cost_total_limit.desc': "ट्रैक रिपोर्ट किए गए या अनुमानित क्लाउड/OpenRouter मॉडल पूरे एक्सटेंशन में खर्च होते हैं और भत्ते पर आगे भुगतान किए गए कॉल को रोकते हैं। स्थानीय प्रदाताओं की गणना नहीं की जाती है.", 'st.display.cost_reset': "व्यय रीसेट करें", 'st.display.strict_secret.label': "सख्त गुप्त संचालन", - 'st.display.strict_secret.desc': "सारांश या सहायक पाठ में क्रेडेंशियल (पासवर्ड, एपीआई कुंजी, टोकन, ओटीपी) उद्धृत करने से इनकार करें - भले ही आप स्पष्ट रूप से उनके लिए पूछें। उपयोगी यदि आप नियमित रूप से ट्रेस फ़ाइलें या स्क्रीन-शेयर साझा करते हैं। डिफ़ॉल्ट रूप से बंद, ताकि एजेंट ज़रूरत पड़ने पर आपके द्वारा पूछा गया सटीक मान दोहरा सके। जब आप चाहते हैं कि `done` सारांश व्यवस्थित रहें और क्रेडेंशियल कभी न दोहराए जाएँ, तो इसे चालू करें (सेटिंग्स → सुरक्षा)।", + 'st.display.strict_secret.desc': "सारांश या सहायक पाठ में क्रेडेंशियल (पासवर्ड, एपीआई कुंजी, टोकन, ओटीपी) उद्धृत करने से इनकार करें - भले ही आप स्पष्ट रूप से उनके लिए पूछें। उपयोगी यदि आप नियमित रूप से ट्रेस फ़ाइलें या स्क्रीन-शेयर साझा करते हैं। डिफ़ॉल्ट रूप से बंद, ताकि एजेंट ज़रूरत पड़ने पर आपके द्वारा पूछा गया सटीक मान दोहरा सके। जब आप चाहते हैं कि `done` सारांश व्यवस्थित रहें और क्रेडेंशियल कभी न दोहराए जाएँ, तो इसे चालू करें।", 'st.display.allow_local_network.label': "एजेंट को स्थानीय नेटवर्क तक पहुंचने की अनुमति दें", 'st.display.allow_local_network.desc': "एजेंट के फ़ेच_यूआरएल टूल को लूपबैक (127.0.0.1, localhost) और निजी/RFC1918 पते (10.x, 192.168.x, 172.16–31.x) तक पहुंचने देता है। स्थानीय डेव सर्वर, इंट्रानेट टूल या स्वयं-होस्टेड एपीआई के लिए उपयोगी। डिफ़ॉल्ट रूप से बंद। बंद होने पर सीधे निजी या लूपबैक IP पते वाले URL और localhost नाम अवरुद्ध होते हैं। DNS रिज़ॉल्यूशन की जाँच नहीं होती, इसलिए अन्य होस्टनाम स्थानीय पतों तक पहुँच सकते हैं। क्लाउड-मेटाडेटा के सीधे IP पते (169.254.169.254) और सूचीबद्ध मेटाडेटा या *.internal/*.local होस्टनाम चालू होने पर भी अवरुद्ध रहते हैं।", 'st.display.scheduled_tasks.label': "निर्धारित कार्य", @@ -890,7 +887,7 @@ export default { 'st.providers.compat.value.max': "अधिकतम", 'st.providers.compat.value.system': "सिस्टम", 'st.providers.compat.value.developer': "डेवलपर", - 'st.providers.webbrain_data_use.body': "मुफ़्त दैनिक WebBrain Compass उपयोग शामिल है। जबकि हेल्प इम्प्रूव WebBrain डिफ़ॉल्ट रूप से चालू है, चयनित Compass वार्तालापों को बनाए रखा जा सकता है और मूल्यांकन, सुधार, फाइन-ट्यूनिंग और प्रशिक्षण के लिए उपयोग किया जा सकता है। उन उपयोगों से भविष्य के Compass इंटरैक्शन को बाहर करने के लिए इसे सामान्य → उन्नत में बंद करें। WebBrain स्थानीय-मॉडल और आपके स्वयं के API अनुरोध केवल तभी एकत्र करता है जब आप उस प्रदाता का “अनुसंधान हेतु क्वेरी साझा करें” विकल्प चालू करते हैं। {privacyLink}. अधिक उपयोग के लिए, {subscribeLink} पर सदस्यता लें। {accountLink} पर बिलिंग प्रबंधित करें।", + 'st.providers.webbrain_data_use.body': "मुफ़्त दैनिक WebBrain Compass उपयोग शामिल है। जबकि हेल्प इम्प्रूव WebBrain डिफ़ॉल्ट रूप से चालू है, चयनित Compass वार्तालापों को बनाए रखा जा सकता है और मूल्यांकन, सुधार, फाइन-ट्यूनिंग और प्रशिक्षण के लिए उपयोग किया जा सकता है। उन उपयोगों से भविष्य के Compass इंटरैक्शन को बाहर करने के लिए इसे सेटिंग्स → उन्नत में बंद करें। WebBrain स्थानीय-मॉडल और आपके स्वयं के API अनुरोध केवल तभी एकत्र करता है जब आप उस प्रदाता का “अनुसंधान हेतु क्वेरी साझा करें” विकल्प चालू करते हैं। {privacyLink}. अधिक उपयोग के लिए, {subscribeLink} पर सदस्यता लें। {accountLink} पर बिलिंग प्रबंधित करें।", 'st.providers.share_research.label': "अनुसंधान हेतु क्वेरी साझा करें", 'st.providers.share_research.hint': "इस प्रदाता के प्रॉम्प और प्रतिक्रियाएँ मूल्यांकन और सुधार हेतु WebBrain को भेजता है, जिसमें प्रयुक्त प्रदाता और मॉडल शामिल हैं। साझा करने से पहले चित्र और बाइनरी अनुलग्नक हटाए जाते हैं और पाठ छोटा किया जाता है; शेष पाठ ज्यों-का-त्यों भेजा जाता है।", 'st.providers.share_research.confirm': "क्या इस प्रदाता की क्वेरी अनुसंधान हेतु WebBrain के साथ साझा करें?\n\nचालू होने पर, इस प्रदाता के साथ आपके प्रॉम्प, प्रतिक्रियाएँ और टूल इंटरैक्शन प्रदाता और मॉडल के नाम सहित मूल्यांकन और सुधार हेतु WebBrain को भेजे जाएँगे। चित्र हटाने और लंबी सामग्री छोटा करने के बाद पाठ ज्यों-का-त्यों भेजा जाता है, इसलिए संवेदनशील व्यक्तिगत डेटा साझा करने से बचें। भविष्य में साझा करना रोकने हेतु आप इसे कभी भी बंद कर सकते हैं।", @@ -1035,7 +1032,6 @@ export default { // Screenshot redaction (issue #312): local, best-effort PII blurring that // runs in-browser before any screenshot reaches a vision model. - 'st.redaction.heading': "स्क्रीनशॉट संशोधन", 'st.redaction.toggle.label': "स्क्रीनशॉट से संवेदनशील सामग्री को संपादित करें", 'st.redaction.toggle.desc': "विज़न मॉडल पर स्क्रीनशॉट भेजने से पहले, फॉर्म फ़ील्ड और टेक्स्ट को धुंधला कर दें जो ईमेल या फ़ोन नंबर जैसा दिखता है। डिटेक्शन पूरी तरह से आपके डिवाइस पर चलता है - अतिरिक्त कुछ भी प्रसारित नहीं होता है।", 'st.redaction.warning': "⚠️ सर्वश्रेष्ठ-प्रयास और असफल-ओपन: यदि किसी पृष्ठ पर संपादन नहीं चल सकता है (उदाहरण के लिए नेविगेशन के ठीक बाद, पीडीएफ दर्शकों पर, या प्रतिबंधित ब्राउज़र पृष्ठों पर), तो स्क्रीनशॉट अभी भी बिना संपादित किए भेजा जाता है। डिटेक्शन केवल DOM ह्यूरिस्टिक्स का उपयोग करता है - कैनवास-तैयार पाठ, छवियों के अंदर पीआईआई, या फॉर्म फ़ील्ड या ईमेल/फोन टेक्स्ट के रूप में पहचानी नहीं गई कोई भी चीज़ फिसल सकती है, और मॉडल को भेजा गया पेज टेक्स्ट इस सेटिंग द्वारा संपादित नहीं किया जाता है। यह कोई सुरक्षा गारंटी नहीं है. पूर्ण गोपनीयता के लिए, स्थानीय/ऑफ़लाइन मॉडल (llama.cpp, Ollama) का उपयोग करें: स्क्रीनशॉट कभी भी आपकी मशीन को नहीं छोड़ते हैं और संपादन अनावश्यक है।", @@ -1223,7 +1219,7 @@ export default { "sp.slash.export_traces_full": "स्क्रीनशॉट सहित पूरा सहेजा गया ट्रेस सत्र JSON के रूप में निर्यात करें", "sp.export_traces.recording_truncated": "सभी सहेजे गए रिकॉर्ड JSON में निर्यात हो गए। रिकॉर्डिंग के दौरान छोड़ी गई सामग्री निर्यात से वापस नहीं मिल सकती।", "sp.slash.export_traces": "उपकरण श्रृंखला (निशान) निर्यात करें", - "sp.export_traces.none": "इस बातचीत का कोई निशान नहीं. सेटिंग्स में रिकॉर्ड ट्रेस सक्षम करें, फिर से चलाएँ।", + "sp.export_traces.none": "इस बातचीत का कोई निशान नहीं. सेटिंग्स → उन्नत में रिकॉर्ड ट्रेस सक्षम करें, फिर से चलाएँ।", "sp.export_traces.error": "निशान निर्यात नहीं किए जा सके.", "sp.export_traces.done": "टूल श्रृंखला निर्यात की गई.", "sp.export_traces.no_conversation": "अभी तक निर्यात करने के लिए कुछ भी नहीं है - पहले बातचीत शुरू करें।", @@ -1297,7 +1293,7 @@ export default { "st.sync.confirm.reset": "क्या एन्क्रिप्टेड क्लाउड कॉपी को इस डिवाइस के मौजूदा WebBrain सेटअप से बदलना है?", "st.sync.consent.legacy": "एन्क्रिप्टेड सिंक चालू करें? WebBrain आपकी यादों, प्रोफ़ाइल ऑटोफ़िल और API-कुंजी प्रदाता सेटिंग्स की एंड-टू-एंड एन्क्रिप्टेड कॉपी WebBrain Compass को भेजेगा। चैट इतिहास और OAuth साइन-इन सिंक नहीं किए जाते।", "st.sync.consent.denied": "एन्क्रिप्टेड सिंक अनुमति नहीं दी गई थी.", - 'st.providers.webgpu_note.body': '{modelLink} बिना किसी API एंडपॉइंट के पूरी तरह Chrome में चलता है। इसे Settings > Providers > WebGPU या Apocalypse Mode में डाउनलोड करें, फिर standalone chat में nuclear control का उपयोग करें।', + 'st.providers.webgpu_note.body': '{modelLink} बिना किसी API एंडपॉइंट के पूरी तरह Chrome में चलता है। इसे Providers > WebGPU या Apocalypse Mode में डाउनलोड करें, फिर standalone chat में nuclear control का उपयोग करें।', 'sp.monitor.navigation': "काम चलने के दौरान पेज बदल गया ({before} → {after})। काम जारी है।", 'sp.activity.generating_answer': "उत्तर तैयार हो रहा है…", 'sp.activity.retrying_response': "उत्तर के लिए फिर प्रयास हो रहा है…", diff --git a/src/firefox/src/ui/locales/id.js b/src/firefox/src/ui/locales/id.js index 979380c871..3232573899 100644 --- a/src/firefox/src/ui/locales/id.js +++ b/src/firefox/src/ui/locales/id.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Perkecil UI ekstensi', 'sp.ui_scale.increase': 'Perbesar UI ekstensi', 'sp.ui_scale.reset': 'Atur ulang', - 'st.display.ui_scale.label': 'Zoom UI ekstensi', - 'st.display.ui_scale.decrease': 'Perkecil UI ekstensi', - 'st.display.ui_scale.increase': 'Perbesar UI ekstensi', - 'st.display.ui_scale.reset': 'Atur ulang', - 'st.display.ui_scale.desc': 'Ubah ukuran panel samping dan jendela chat terpisah tanpa mengubah zoom halaman.', - 'st.display.ui_scale.shortcuts': 'Pintasan khusus: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Belum ditetapkan', - 'st.display.ui_scale.manage_shortcuts': 'Sesuaikan pintasan', 'tool.delegate_research': 'Meneliti dengan ChatGPT', 'st.display.research_escalation.label': 'Eskalasi riset', 'st.display.research_escalation.desc': 'Jika diaktifkan, WebBrain dapat meminta izin sebelum mengirim prompt riset hanya-baca yang sangat kompleks ke ChatGPT. Nonaktif secara default. Prompt yang persis sama hanya dibagikan setelah persetujuan eksplisit Anda.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Jangan lanjutkan", "sp.recipient.reason_unrequested": "WebBrain tidak dapat memastikan dari permintaan Anda bahwa pesan harus dikirim. Percakapan yang terbuka di {host} adalah dengan {recipient}.", "sp.recipient.reason_unnamed": "WebBrain tidak dapat memastikan dari permintaan Anda siapa yang harus menerima pesan ini. Percakapan yang terbuka di {host} adalah dengan {recipient}.", - 'st.tab.permissions': "Izin", 'st.perms.revoke': "Cabut", 'st.perms.clear_all': "Hapus semua izin", 'st.perms.gate.label': "Tanya sebelum tindakan penting", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Mulai', 'ob.btn.skip': 'Lewati dulu', 'ob.btn.start': 'Mulai', - 'ob.cloud.body': 'WebBrain Compass siap dengan alokasi mingguan gratis. Percakapan Compass yang dipilih dapat disimpan dan digunakan untuk meningkatkan WebBrain selama Bantu Tingkatkan WebBrain aktif secara default. Anda dapat mematikannya di Pengaturan → Umum.', + 'ob.cloud.body': 'WebBrain Compass siap dengan alokasi mingguan gratis. Percakapan Compass yang dipilih dapat disimpan dan digunakan untuk meningkatkan WebBrain selama Bantu Tingkatkan WebBrain aktif secara default. Anda dapat mematikannya di Pengaturan → Lanjutan.', 'ob.cloud.change': 'Ubah', 'ob.cloud.using': 'Menggunakan WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Hasil', 'sp.api.enabled_html': '🔓 Perubahan melalui API diaktifkan untuk percakapan ini. Agen kini dapat menggunakan POST/PUT/PATCH/DELETE melalui fetch_url dan execute_js bila menilai API lebih andal daripada UI untuk suatu langkah. UI tetap menjadi pilihan utama secara bawaan. Flag ini akan terhapus saat Anda mereset percakapan.', - 'sp.permissions.disabled_html': '⚠️ Pertanyaan izin dimatikan. WebBrain akan mengeklik, mengetik, menavigasi, menjalankan JavaScript, mengunggah, mengunduh, merekam, dan menjadwalkan pekerjaan mendatang tanpa bertanya terlebih dahulu. Aktifkan kembali dari Pengaturan → Izin → Tanya sebelum tindakan penting.', + 'sp.permissions.disabled_html': '⚠️ Pertanyaan izin dimatikan. WebBrain akan mengeklik, mengetik, menavigasi, menjalankan JavaScript, mengunggah, mengunduh, merekam, dan menjadwalkan pekerjaan mendatang tanpa bertanya terlebih dahulu. Aktifkan kembali dari tombol ⚠ di samping mikrofon.', 'sp.permissions.button': 'Permintaan izin: aktif', 'sp.permissions.button_off': 'Permintaan izin: nonaktif', 'sp.permissions.gate_desc': 'WebBrain bertanya saat pertama kali mengklik, mengetik, mengunduh, atau menjalankan kode di sebuah situs.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Menunggu "{selector}"', 'st.title': 'Pengaturan WebBrain', - 'st.subtitle': 'Konfigurasikan penyedia LLM dan preferensi · v{version}', + 'st.subtitle': 'Konfigurasikan cara kerja WebBrain · v{version}', 'st.tab.display': 'Umum', + 'st.tab.budgets': 'Anggaran', + 'st.tab.advanced': 'Lanjutan', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Ucapan', + 'st.tab.generative': 'Generatif', + 'st.tab.decision': 'Keputusan', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Penyedia WebBrain', + 'st.providers_page.subtitle': 'Pilih model yang digunakan WebBrain · v{version}', + 'st.permissions_page.title': 'Izin WebBrain', + 'st.permissions_page.subtitle': 'Situs tempat WebBrain boleh bertindak tanpa bertanya dulu', 'st.tab.providers': 'Penyedia', 'st.tab.vision': 'Visi', 'st.tab.profile': 'Profil', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "Perbarui metode pembayaran", 'st.account.manage_billing': 'Kelola penagihan', - 'st.display.language.label': 'Bahasa', - 'st.display.language.desc': 'Bahasa antarmuka untuk plugin WebBrain.', 'st.display.verbose.label': 'Mode terperinci', 'st.display.verbose.desc': 'Tampilkan detail lengkap pemanggilan alat, argumen, dan hasil JSON mentah. Nonaktif secara bawaan demi tampilan obrolan yang lebih bersih.', 'st.display.selection_shortcut.label': 'Pintasan pilihan', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Tangkapan layar otomatis', "st.display.auto_screenshot.desc": "Ambil tangkapan layar viewport secara otomatis setelah agen bertindak pada halaman, agar rute visi yang dipilih dapat melihat perubahan. Ini memakai lebih banyak token. Jika visi tidak tersedia, pengayaan dilewati dan tugas berlanjut dengan pemberitahuan status.", 'st.display.auto_screenshot.off': 'Nonaktif', - 'st.display.auto_screenshot.navigation': 'Saat navigasi', - 'st.display.auto_screenshot.state_change': 'Saat perubahan status (bawaan)', + 'st.display.auto_screenshot.navigation': 'Saat navigasi (bawaan)', + 'st.display.auto_screenshot.state_change': 'Saat perubahan status', 'st.display.auto_screenshot.every_step': 'Setiap langkah', 'st.display.tracing.label': 'Rekam jejak (untuk perbandingan model)', - 'st.display.tracing.desc_html': 'Simpan setiap proses (permintaan LLM, respons, pemanggilan alat, tangkapan layar) ke IndexedDB lokal sehingga Anda dapat memeriksa dan membandingkan model berdampingan. Membuka tab Jejak terpisah. Nonaktif secara bawaan karena menambah penulisan disk per langkah. Buka halaman Jejak →', - 'st.display.lossless_tracing.label': 'Rekam detail lengkap permintaan (tingkat debug)', - 'st.display.lossless_tracing.desc_html': 'Juga menyimpan prompt, pesan, dan skema alat lengkap dari setiap permintaan LLM alih-alih ringkasan tanpa konten, dan menyimpan hingga 200 KB setiap hasil alat. Memungkinkan debug mendalam dan rekonstruksi permintaan. Nonaktif secara default karena menulis konten percakapan Anda secara lokal dan memakai disk jauh lebih banyak. Memerlukan perekaman trace aktif.', + 'st.display.tracing.desc_html': 'Simpan setiap proses (permintaan LLM, respons, pemanggilan alat, tangkapan layar) ke IndexedDB lokal sehingga Anda dapat memeriksa dan membandingkan model berdampingan, termasuk prompt, pesan, dan skema alat lengkap dari setiap permintaan LLM serta hingga 200 KB setiap hasil alat. Membuka tab Jejak terpisah. Nonaktif secara bawaan karena menulis konten percakapan Anda secara lokal dan memakai disk jauh lebih banyak. Buka halaman Jejak →', 'st.display.allow_local_network.label': 'Izinkan agen mengakses jaringan lokal', 'st.display.allow_local_network.desc': 'Memungkinkan alat fetch_url agen menjangkau loopback (127.0.0.1, localhost) dan alamat privat/RFC1918 (10.x, 192.168.x, 172.16–31.x). Berguna untuk server pengembangan lokal, alat intranet, atau API yang di-host sendiri. Nonaktif secara bawaan. Saat nonaktif, URL dengan alamat IP privat atau loopback yang ditulis langsung dan nama localhost diblokir. Resolusi DNS tidak diperiksa, sehingga nama host lain masih dapat menjangkau alamat lokal. IP literal metadata cloud (169.254.169.254) dan nama metadata dalam daftar atau *.internal/*.local tetap diblokir meskipun diaktifkan.', 'st.display.notify_sound.label': "Suara notifikasi", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Mode visi diaktifkan untuk penyedia aktif.", "sp.vision.off": "Mode visi dinonaktifkan untuk penyedia aktif.", "sp.vision.error": "Pengalihan visi gagal: {msg}", - "st.tab.multimodal": "Model Pendukung", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Disarankan. Saat aktif, WebBrain meminta izin pertama kali ia mengeklik, mengetik, menavigasi, menjalankan JavaScript, mengunggah, mengunduh, atau merekam pada sebuah situs (lalu mengingat pilihan Anda). Matikan untuk penggunaan cepat tanpa konfirmasi pada situs yang sepenuhnya Anda percayai.", "st.perms.gate.warning": "⚠️ Konfirmasi izin NONAKTIF. WebBrain akan mengeklik, mengetik, menavigasi, menjalankan JavaScript, mengunggah, mengunduh, dan merekam pada situs apa pun TANPA bertanya — termasuk pada halaman yang kontennya mungkin dikendalikan penyerang. Konten halaman tetap diperlakukan sebagai tidak tepercaya secara internal, tetapi tidak ada yang akan mencegah instruksi yang disisipkan memicu sebuah tindakan. Biarkan nonaktif hanya jika Anda sepenuhnya memercayai setiap situs tempat Anda memakai asisten ini.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Bawaan sistem", "st.display.download_directory.error": "Gunakan folder relatif seperti WebBrain atau Work/WebBrain. Jalur absolut dan “..” tidak diizinkan.", "st.display.strict_secret.label": "Penanganan rahasia ketat", - "st.display.strict_secret.desc": "Menolak mengutip kredensial (kata sandi, kunci API, token, OTP) dalam ringkasan atau teks asisten — bahkan saat Anda memintanya secara eksplisit. Berguna jika Anda kerap berbagi berkas jejak atau berbagi layar. Nonaktif secara bawaan sehingga agen dapat mengulang nilai persis yang Anda minta saat Anda membutuhkannya. Aktifkan (Pengaturan → Keamanan) jika Anda ingin ringkasan `done` tetap rapi dan kredensial tidak pernah diulang.", + "st.display.strict_secret.desc": "Menolak mengutip kredensial (kata sandi, kunci API, token, OTP) dalam ringkasan atau teks asisten — bahkan saat Anda memintanya secara eksplisit. Berguna jika Anda kerap berbagi berkas jejak atau berbagi layar. Nonaktif secara bawaan sehingga agen dapat mengulang nilai persis yang Anda minta saat Anda membutuhkannya. Aktifkan jika Anda ingin ringkasan `done` tetap rapi dan kredensial tidak pernah diulang.", "st.display.request_timeout.label": "Batas waktu permintaan LLM", "st.display.request_timeout.desc": "Batas waktu menunggu header respons dan setiap jeda antarbagian respons streaming. Bawaan: 120 detik. Naikkan untuk model lokal yang lambat, terutama pada CPU atau dengan konteks besar.", "st.providers.filter.all": "Semua", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Pesan dimasukkan ke antrean saat WebBrain sibuk. Hanya /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces, dan /verbose yang dapat langsung berjalan sebagai perintah slash.', 'tool.go_back': 'Kembali', 'tool.go_forward': 'Maju', - 'st.display.search.placeholder': 'Cari pengaturan Umum', - 'st.display.search.empty': 'Tidak ada pengaturan Umum yang cocok.', + 'st.display.search.placeholder': 'Cari pengaturan', + 'st.display.search.empty': 'Tidak ada pengaturan yang cocok.', 'st.display.advanced': 'Lanjutan', ...getApocalypseModeCopy('id'), ...getEmergencyBoxCopy('id'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Sisi terpanjang (lebar atau tinggi) dalam piksel untuk setiap tangkapan yang dikirim ke visi. Batas lebih kecil mengecilkan gambar sebelum dikirim, mengurangi token dan biaya. Batas lebih besar menjaga fidelitas.", "st.imageBudget.warning": "⚠️ Pengaturan ini berlaku untuk tangkapan untuk visi (tangkapan otomatis, /screenshot, halaman penuh, verify_form). Gambar resolusi penuh yang disimpan manual tidak terpengaruh. «Image detail» dihormati endpoint bergaya OpenAI; penyedia lain mungkin mengabaikannya.", - "st.redaction.heading": "Penyamaran tangkapan layar", "st.redaction.toggle.label": "Samarkan konten sensitif pada tangkapan layar", "st.redaction.toggle.desc": "Sebelum tangkapan layar dikirim ke model visi, WebBrain mengaburkan kolom formulir dan teks yang terlihat seperti email atau nomor telepon. Pendeteksian berjalan sepenuhnya di perangkat Anda — tidak ada yang dikirim ekstra.", "st.redaction.warning": "⚠️ Ini bersifat best-effort dan fail-open: jika penyamaran tidak bisa berjalan di suatu halaman (misalnya tepat setelah navigasi, di penampil PDF, atau di halaman browser yang dibatasi), tangkapan layar tetap dikirim tanpa disamarkan. Pendeteksian hanya menggunakan heuristik DOM — teks yang digambar di canvas, informasi pribadi di dalam gambar, atau apa pun yang tidak dikenali sebagai kolom formulir atau teks email/telepon bisa saja lolos, dan teks halaman yang dikirim ke model tidak disamarkan oleh pengaturan ini. Ini BUKAN jaminan keamanan. Untuk privasi penuh, gunakan model lokal/offline (llama.cpp, Ollama): tangkapan layar tidak akan pernah meninggalkan perangkat Anda dan penyamaran pun jadi tidak diperlukan.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "Ekspor seluruh sesi jejak tersimpan sebagai JSON, termasuk tangkapan layar", "sp.export_traces.recording_truncated": "Semua catatan tersimpan telah diekspor sebagai JSON. Konten yang dihilangkan saat perekaman tidak dapat dipulihkan melalui ekspor.", "sp.slash.export_traces": "Ekspor rantai alat (jejak)", - "sp.export_traces.none": "Tidak ada jejak untuk percakapan ini. Aktifkan Rekam jejak di Pengaturan, lalu jalankan lagi.", + "sp.export_traces.none": "Tidak ada jejak untuk percakapan ini. Aktifkan Rekam jejak di Pengaturan → Lanjutan, lalu jalankan lagi.", "sp.export_traces.error": "Tidak dapat mengekspor jejak.", "sp.export_traces.done": "Rantai alat diekspor.", "sp.export_traces.no_conversation": "Belum ada yang diekspor — mulai percakapan dulu.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Rantai alat diekspor. Giliran lama mungkin hilang jika percakapan ini punya banyak jejak.", "st.display.help_improve.label": "Bantu Tingkatkan WebBrain", "st.display.help_improve.desc_html": "Izinkan interaksi WebBrain Compass tertentu disimpan dan digunakan untuk evaluasi, peningkatan, penyempurnaan, dan pelatihan. Aktif secara default. Nonaktifkan agar interaksi Compass mendatang tidak digunakan untuk tujuan tersebut. WebBrain hanya mengumpulkan permintaan model lokal dan API Anda sendiri dari penyedia tempat Anda mengaktifkan “Bagikan kueri untuk riset”. Kebijakan privasi →", - "st.providers.webbrain_data_use.body": "Penggunaan harian gratis WebBrain Compass sudah termasuk. Saat Bantu Tingkatkan WebBrain aktif secara default, percakapan Compass tertentu dapat disimpan dan digunakan untuk evaluasi, peningkatan, penyempurnaan, dan pelatihan. Nonaktifkan di Umum → Lanjutan agar interaksi Compass mendatang tidak digunakan untuk tujuan tersebut. WebBrain hanya mengumpulkan permintaan model lokal dan API Anda sendiri jika Anda mengaktifkan opsi “Bagikan kueri untuk riset” penyedia ini. {privacyLink}. Untuk penggunaan lebih banyak, berlangganan di {subscribeLink}. Kelola penagihan di {accountLink}.", + "st.providers.webbrain_data_use.body": "Penggunaan harian gratis WebBrain Compass sudah termasuk. Saat Bantu Tingkatkan WebBrain aktif secara default, percakapan Compass tertentu dapat disimpan dan digunakan untuk evaluasi, peningkatan, penyempurnaan, dan pelatihan. Nonaktifkan di Pengaturan → Lanjutan agar interaksi Compass mendatang tidak digunakan untuk tujuan tersebut. WebBrain hanya mengumpulkan permintaan model lokal dan API Anda sendiri jika Anda mengaktifkan opsi “Bagikan kueri untuk riset” penyedia ini. {privacyLink}. Untuk penggunaan lebih banyak, berlangganan di {subscribeLink}. Kelola penagihan di {accountLink}.", 'st.providers.share_research.label': "Bagikan kueri untuk riset", 'st.providers.share_research.hint': "Mengirim prompt dan respons dari penyedia ini ke WebBrain untuk evaluasi dan peningkatan, termasuk penyedia dan model yang digunakan. Gambar dan lampiran biner dihapus dan teks dipotong sebelum dibagikan; sisa teks dikirim apa adanya.", 'st.providers.share_research.confirm': "Bagikan kueri dari penyedia ini dengan WebBrain untuk riset?\n\nJika aktif, prompt, respons, dan interaksi alat Anda dengan penyedia ini akan dikirim ke WebBrain untuk evaluasi dan peningkatan, beserta nama penyedia dan model. Teks dikirim apa adanya setelah gambar dihapus dan konten panjang dipotong, jadi hindari membagikan data pribadi yang sensitif. Anda dapat mematikannya kapan saja untuk menghentikan berbagi.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "Ingin lebih sedikit gangguan? “Selalu izinkan” mengingat situs ini. Perintah di bawah menonaktifkan permintaan izin WebBrain di semua situs.", "sp.perm.insert_skip_command": "Sisipkan /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Draf Anda tidak berubah. Kosongkan sebelum menyisipkan perintah.", - "ob.act.permissions_tip": "Permintaan izin aktif secara default. Pengguna tingkat lanjut dapat menonaktifkannya secara global dengan /dangerously-skip-permissions dan mengaktifkannya kembali di Pengaturan → Izin.", + "ob.act.permissions_tip": "Permintaan izin aktif secara default. Pengguna tingkat lanjut dapat menonaktifkannya secara global dengan /dangerously-skip-permissions dan mengaktifkannya kembali dari tombol ⚠ di samping mikrofon.", 'st.provider.field.cache_read_cost_per_million': "Perkiraan biaya baca cache ($ / 1 juta token)", 'st.provider.field.cache_write_cost_per_million': "Perkiraan biaya tulis cache 5 menit ($ / 1 juta token)", 'st.provider.field.cache_write_1h_cost_per_million': "Perkiraan biaya tulis cache 1 jam ($ / 1 juta token)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "Ganti salinan cloud terenkripsi dengan pengaturan WebBrain perangkat ini saat ini?", "st.sync.consent.legacy": "Aktifkan sinkronisasi terenkripsi? WebBrain akan mengirimkan salinan memori Anda yang terenkripsi ujung ke ujung, pengisian otomatis profil, dan pengaturan penyedia kunci API ke WebBrain Compass. Riwayat obrolan dan proses masuk OAuth tidak disinkronkan.", "st.sync.consent.denied": "Izin sinkronisasi terenkripsi tidak diberikan.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Halaman berubah saat tugas berjalan ({before} → {after}). Tugas dilanjutkan.", 'sp.activity.generating_answer': "Membuat jawaban…", 'sp.activity.retrying_response': "Mencoba ulang jawaban…", diff --git a/src/firefox/src/ui/locales/ja.js b/src/firefox/src/ui/locales/ja.js index 4902105ff8..94dd24fa19 100644 --- a/src/firefox/src/ui/locales/ja.js +++ b/src/firefox/src/ui/locales/ja.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': '拡張機能 UI を縮小', 'sp.ui_scale.increase': '拡張機能 UI を拡大', 'sp.ui_scale.reset': 'リセット', - 'st.display.ui_scale.label': '拡張機能 UI のズーム', - 'st.display.ui_scale.decrease': '拡張機能 UI を縮小', - 'st.display.ui_scale.increase': '拡張機能 UI を拡大', - 'st.display.ui_scale.reset': 'リセット', - 'st.display.ui_scale.desc': 'ページのズームを変更せずに、サイドパネルと独立したチャットウィンドウのサイズを変更します。', - 'st.display.ui_scale.shortcuts': '専用ショートカット: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': '未設定', - 'st.display.ui_scale.manage_shortcuts': 'ショートカットをカスタマイズ', 'tool.delegate_research': 'ChatGPTで調査中', 'st.display.research_escalation.label': '調査のエスカレーション', 'st.display.research_escalation.desc': '有効にすると、WebBrainは非常に複雑な読み取り専用の調査プロンプトをChatGPTへ送信する前に許可を求めることがあります。デフォルトではオフです。正確なプロンプトは、明示的な承認後にのみ共有されます。', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "続行しない", "sp.recipient.reason_unrequested": "WebBrain はリクエストから、メッセージを送るべきかどうか判断できませんでした。{host} で開いている会話の相手は {recipient} です。", "sp.recipient.reason_unnamed": "WebBrain はリクエストから、このメッセージを誰に送るか判断できませんでした。{host} で開いている会話の相手は {recipient} です。", - 'st.tab.permissions': "権限", 'st.perms.revoke': "取り消す", 'st.perms.clear_all': "すべての権限を消去", 'st.perms.gate.label': "重要な操作の前に確認する", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': '開始', 'ob.btn.skip': '今はスキップ', 'ob.btn.start': '開始', - 'ob.cloud.body': 'WebBrain Compassは1週間あたりの無料割り当てで準備できています。選択したCompass会話は、WebBrainの改善支援がデフォルトでオンになっている間、WebBrainの改善のために保存および使用される可能性があります。設定 → 一般でオフにできます。', + 'ob.cloud.body': 'WebBrain Compassは1週間あたりの無料割り当てで準備できています。選択したCompass会話は、WebBrainの改善支援がデフォルトでオンになっている間、WebBrainの改善のために保存および使用される可能性があります。設定 → 詳細設定でオフにできます。', 'ob.cloud.change': '変更', 'ob.cloud.using': 'WebBrain Compassを使用しています。', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': '結果', 'sp.api.enabled_html': '🔓 この会話で API による変更が有効 になりました。エージェントは UI より API のほうが確実だと判断したとき、fetch_url と execute_js で POST/PUT/PATCH/DELETE を使えるようになります。UI 優先という基本方針は変わりません。このフラグは会話をリセットするとクリアされます。', - 'sp.permissions.disabled_html': '⚠️ 権限の確認がオフです。 WebBrain は確認なしにクリック、入力、移動、JavaScript の実行、アップロード、ダウンロード、録画、将来の作業のスケジュールを行います。設定 → 権限 → 重要な操作の前に確認する から再有効にしてください。', + 'sp.permissions.disabled_html': '⚠️ 権限の確認がオフです。 WebBrain は確認なしにクリック、入力、移動、JavaScript の実行、アップロード、ダウンロード、録画、将来の作業のスケジュールを行います。マイクの横の ⚠ ボタンから再び有効にしてください。', 'sp.permissions.button': '権限の確認: オン', 'sp.permissions.button_off': '権限の確認: オフ', 'sp.permissions.gate_desc': 'サイトで初めてクリック、入力、ダウンロード、コードの実行を行う前に WebBrain が確認します。', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': '「{selector}」を待機', 'st.title': 'WebBrain 設定', - 'st.subtitle': 'LLM プロバイダーと設定を構成 · v{version}', + 'st.subtitle': 'WebBrain の動作を設定 · v{version}', 'st.tab.display': '一般', + 'st.tab.budgets': '予算', + 'st.tab.advanced': '詳細設定', + 'st.tab.llm': 'LLM', + 'st.tab.speech': '音声', + 'st.tab.generative': '生成', + 'st.tab.decision': '判定', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain プロバイダー', + 'st.providers_page.subtitle': 'WebBrain が使うモデルを選択 · v{version}', + 'st.permissions_page.title': 'WebBrain の権限', + 'st.permissions_page.subtitle': 'WebBrain が確認せずに操作できるサイト', 'st.tab.providers': 'プロバイダー', 'st.tab.vision': '画像認識', 'st.tab.profile': 'プロフィール', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "支払い方法を更新", 'st.account.manage_billing': '請求を管理', - 'st.display.language.label': '言語', - 'st.display.language.desc': 'WebBrain プラグインのインターフェース言語です。', 'st.display.verbose.label': '詳細モード', 'st.display.verbose.desc': 'ツール呼び出しの詳細・引数・生の JSON 結果をすべて表示します。チャットをすっきり見せるため、デフォルトはオフです。', 'st.display.selection_shortcut.label': '選択ショートカット', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': '自動スクリーンショット', "st.display.auto_screenshot.desc": "エージェントがページを操作した後にビューポートのスクリーンショットを自動取得し、選択された画像認識ルートで変化を確認できるようにします。トークン消費が増えます。画像認識が利用できない場合は補足処理を省略し、状態通知を表示してタスクを続行します。", 'st.display.auto_screenshot.off': 'オフ', - 'st.display.auto_screenshot.navigation': '遷移時', - 'st.display.auto_screenshot.state_change': '状態変化時(デフォルト)', + 'st.display.auto_screenshot.navigation': '遷移時(デフォルト)', + 'st.display.auto_screenshot.state_change': '状態変化時', 'st.display.auto_screenshot.every_step': '毎ステップ', 'st.display.tracing.label': 'トレースを記録(モデル比較用)', - 'st.display.tracing.desc_html': 'すべての実行(LLM リクエスト、レスポンス、ツール呼び出し、スクリーンショット)をローカルの IndexedDB に保存し、モデルを並べて検査・比較できるようにします。別の「トレース」タブで開きます。毎ステップで書き込みが増えるためデフォルトはオフです。トレースページを開く →', - 'st.display.lossless_tracing.label': 'リクエストの完全な詳細を記録(デバッグ層)', - 'st.display.lossless_tracing.desc_html': '各LLMリクエストの完全なプロンプト・メッセージ・ツールスキーマを、内容を含まない要約の代わりに保存し、各ツール結果を最大200KB保持します。深いデバッグとリクエスト再構築が可能になります。会話内容をローカルに書き込み、ディスク消費が大幅に増えるため、既定ではオフです。トレース記録の有効化が必要です。', + 'st.display.tracing.desc_html': 'すべての実行(LLM リクエスト、レスポンス、ツール呼び出し、スクリーンショット)をローカルの IndexedDB に保存し、モデルを並べて検査・比較できるようにします。各 LLM リクエストの完全なプロンプト・メッセージ・ツールスキーマと、各ツール結果の最大 200KB も保存されます。別の「トレース」タブで開きます。会話内容をローカルに書き込み、ディスク消費が大幅に増えるため、既定ではオフです。トレースページを開く →', 'st.display.allow_local_network.label': 'エージェントにローカルネットワークへのアクセスを許可', 'st.display.allow_local_network.desc': 'エージェントの fetch_url ツールがループバック(127.0.0.1、localhost)やプライベート/RFC1918 アドレス(10.x、192.168.x、172.16–31.x)に届くようになります。ローカル開発サーバー、社内ツール、セルフホスト API に便利です。デフォルトはオフです。オフの場合、プライベート IP やループバック IP を直接記述した URL と localhost のホスト名をブロックします。DNS の名前解決は確認しないため、別のホスト名からローカルアドレスに接続できる場合があります。クラウドメタデータの IP リテラル(169.254.169.254)と、指定のメタデータ名または *.internal/*.local はオンでもブロックされます。', 'st.display.notify_sound.label': "通知サウンド", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "アクティブなプロバイダーで画像認識モードを有効にしました。", "sp.vision.off": "アクティブなプロバイダーで画像認識モードを無効にしました。", "sp.vision.error": "画像認識の切り替えに失敗しました: {msg}", - "st.tab.multimodal": "補助モデル", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "推奨。オンにすると、WebBrain はサイトで初めてクリック・入力・移動・JavaScript の実行・アップロード・ダウンロード・録画を行うときに権限を尋ねます(その後はあなたの選択を記憶します)。完全に信頼できるサイトで、確認なしに素早く使いたい場合はオフにしてください。", "st.perms.gate.warning": "⚠️ 権限の確認がオフです。WebBrain はあらゆるサイトで確認なしにクリック・入力・移動・JavaScript の実行・アップロード・ダウンロード・録画を行います — 内容が攻撃者に操作されている可能性のあるページでも同様です。ページの内容は内部的には引き続き信頼できないものとして扱われますが、注入された指示が操作を引き起こすのを止めるものは何もありません。アシスタントを使うすべてのサイトを完全に信頼できる場合にのみ、これをオフのままにしてください。", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "システムの既定値", "st.display.download_directory.error": "WebBrain や Work/WebBrain のような相対フォルダーを指定してください。絶対パスと「..」は使用できません。", "st.display.strict_secret.label": "資格情報の厳格な取り扱い", - "st.display.strict_secret.desc": "要約やアシスタントの文章の中で資格情報(パスワード、API キー、トークン、OTP)を引用することを、たとえ明示的に求めた場合でも拒否します。トレースファイルを共有したり画面を共有したりすることが多い場合に便利です。デフォルトはオフなので、必要なときにエージェントがあなたが求めた正確な値をそのまま返せます。`done` の要約をすっきり保ち、資格情報を決して繰り返さないようにしたい場合は、有効にしてください(設定 → セキュリティ)。", + "st.display.strict_secret.desc": "要約やアシスタントの文章の中で資格情報(パスワード、API キー、トークン、OTP)を引用することを、たとえ明示的に求めた場合でも拒否します。トレースファイルを共有したり画面を共有したりすることが多い場合に便利です。デフォルトはオフなので、必要なときにエージェントがあなたが求めた正確な値をそのまま返せます。`done` の要約をすっきり保ち、資格情報を決して繰り返さないようにしたい場合は、有効にしてください。", "st.display.request_timeout.label": "LLM リクエストのタイムアウト", "st.display.request_timeout.desc": "応答ヘッダーの受信と、ストリーミング応答の各部分の間で待機できる最大時間です。デフォルトは120秒です。ローカルモデルが遅い場合、特にCPUで実行する場合やコンテキストが大きい場合は、時間を長くしてください。", "st.providers.filter.all": "すべて", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'WebBrain がビジーの間、メッセージはキューに入ります。/help、/progress、/btw、/scratchpad、/memory、/schedule --list、/watch、/dangerously-skip-permissions、/screenshot、/export、/export --traces、/verbose だけがスラッシュコマンドとしてすぐに実行できます。', 'tool.go_back': '戻る', 'tool.go_forward': '進む', - 'st.display.search.placeholder': '一般設定を検索', - 'st.display.search.empty': '一致する一般設定はありません。', + 'st.display.search.placeholder': '設定を検索', + 'st.display.search.empty': '一致する設定はありません。', 'st.display.advanced': '詳細設定', ...getApocalypseModeCopy('ja'), ...getEmergencyBoxCopy('ja'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "ビジョンに送るスクリーンショットの長辺(幅または高さ)のピクセル上限。上限を下げると送信前に縮小しトークンとコストを削減。上げると忠実度を保ちます。", "st.imageBudget.warning": "⚠️ これらの設定はビジョン用のスクリーンショット(自動撮影、/screenshot、全ページ、verify_form)に適用されます。手動で保存したフル解像度画像には影響しません。「Image detail」は OpenAI 系エンドポイントで尊重され、他のプロバイダでは無視されることがあります。", - "st.redaction.heading": "スクリーンショットの黒塗り", "st.redaction.toggle.label": "スクリーンショット内の機密情報を黒塗りする", "st.redaction.toggle.desc": "スクリーンショットをビジョンモデルに送信する前に、フォーム項目やメールアドレス・電話番号らしきテキストにモザイクをかけます。検出はすべて端末内で行われ、追加で送信されるデータはありません。", "st.redaction.warning": "⚠️ これはベストエフォートかつフェイルオープンな処理です。ページ上で黒塗り処理が実行できない場合(ナビゲーション直後、PDFビューア、制限されたブラウザページなど)、スクリーンショットは黒塗りされないまま送信されます。検出はDOMヒューリスティックのみに基づいており、canvasに描画されたテキスト、画像内の個人情報、フォーム項目やメール/電話のテキストと認識されないものは見逃される可能性があります。またモデルに送られるページの本文テキストはこの設定では黒塗りされません。これはセキュリティ上の保証ではありません。完全なプライバシーが必要な場合は、ローカル/オフラインモデル(llama.cpp、Ollamaなど)を使用してください。その場合スクリーンショットは端末から一切出ないため、黒塗りは不要になります。", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "スクリーンショットを含む保存済みトレースセッション全体をJSONでエクスポート", "sp.export_traces.recording_truncated": "保存済みの全記録をJSONでエクスポートしました。記録時に省略された内容はエクスポートでは復元できません。", "sp.slash.export_traces": "ツールチェーンをエクスポート(トレース)", - "sp.export_traces.none": "この会話のトレースがありません。設定で「トレースを記録」をオンにして、もう一度実行してください。", + "sp.export_traces.none": "この会話のトレースがありません。設定 → 詳細設定で「トレースを記録」をオンにして、もう一度実行してください。", "sp.export_traces.error": "トレースをエクスポートできませんでした。", "sp.export_traces.done": "ツールチェーンを書き出しました。", "sp.export_traces.no_conversation": "まだ書き出すものがありません — 先に会話を始めてください。", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "ツールチェーンを書き出しました。この会話にトレースが多い場合、古いターンが欠けることがあります。", "st.display.help_improve.label": "WebBrain の改善に協力する", "st.display.help_improve.desc_html": "選択された WebBrain Compass の操作を保持し、評価、改善、微調整、トレーニングに使用することを許可します。既定でオンです。今後の Compass 操作がこれらの目的に使用されないようにするにはオフにしてください。ローカルモデルやご自身のAPIへのリクエストは、「研究のためにクエリを共有」をオンにしたプロバイダーからのみWebBrainが収集します。プライバシーポリシー →", - "st.providers.webbrain_data_use.body": "WebBrain Compass には毎日の無料利用枠が含まれます。「WebBrain の改善に協力する」は既定でオンであり、選択された Compass の会話が保持され、評価、改善、微調整、トレーニングに使用される場合があります。今後の Compass 操作をこれらの用途から除外するには、一般 → 詳細設定でオフにしてください。ローカルモデルやご自身のAPIへのリクエストは、このプロバイダーの「研究のためにクエリを共有」オプションをオンにした場合のみWebBrainが収集します。{privacyLink}。追加利用は {subscribeLink} で購読してください。請求は {accountLink} で管理できます。", + "st.providers.webbrain_data_use.body": "WebBrain Compass には毎日の無料利用枠が含まれます。「WebBrain の改善に協力する」は既定でオンであり、選択された Compass の会話が保持され、評価、改善、微調整、トレーニングに使用される場合があります。今後の Compass 操作をこれらの用途から除外するには、設定 → 詳細設定でオフにしてください。ローカルモデルやご自身のAPIへのリクエストは、このプロバイダーの「研究のためにクエリを共有」オプションをオンにした場合のみWebBrainが収集します。{privacyLink}。追加利用は {subscribeLink} で購読してください。請求は {accountLink} で管理できます。", 'st.providers.share_research.label': "研究のためにクエリを共有", 'st.providers.share_research.hint': "このプロバイダーのプロンプトと応答を、使用したプロバイダーとモデル名とともに評価・改善のためWebBrainに送信します。画像やバイナリ添付は共有前に除去され、テキストは切り詰められます。残りのテキストはそのまま送信されます。", 'st.providers.share_research.confirm': "このプロバイダーのクエリを研究のためにWebBrainと共有しますか?\n\nオンにすると、このプロバイダーとのプロンプト、応答、ツール操作がプロバイダー名・モデル名とともに評価・改善のためWebBrainに送信されます。テキストは画像除去・長い内容の切り詰め後にそのまま送信されるため、機密の個人情報を共有しないでください。オフにすればいつでも今後の共有を停止できます。", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "中断を減らしますか?「常に許可」はこのサイトを記憶します。以下のコマンドは、すべてのサイトで WebBrain の許可確認を無効にします。", "sp.perm.insert_skip_command": "/dangerously-skip-permissions を入力", "sp.perm.skip_hint_draft": "下書きは変更されていません。コマンドを入力する前に消去してください。", - "ob.act.permissions_tip": "許可確認は既定で有効です。上級ユーザーは /dangerously-skip-permissions ですべてのサイトの確認を無効にし、設定 → 権限から再び有効にできます。", + "ob.act.permissions_tip": "許可確認は既定で有効です。上級ユーザーは /dangerously-skip-permissions ですべてのサイトの確認を無効にし、マイクの横の ⚠ ボタンから再び有効にできます。", 'st.provider.field.cache_read_cost_per_million': "キャッシュ読み取りの推定費用($ / 100万トークン)", 'st.provider.field.cache_write_cost_per_million': "5分キャッシュ書き込みの推定費用($ / 100万トークン)", 'st.provider.field.cache_write_1h_cost_per_million': "1時間キャッシュ書き込みの推定費用($ / 100万トークン)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "暗号化されたクラウド コピーをこのデバイスの現在の WebBrain セットアップに置き換えますか?", "st.sync.consent.legacy": "暗号化された同期をオンにしますか? WebBrain は、エンドツーエンドで暗号化された思い出、プロファイルの自動入力、API キー プロバイダー設定のコピーを WebBrain Compass に送信します。チャット履歴と OAuth サインインは同期されません。", "st.sync.consent.denied": "暗号化された同期権限が付与されませんでした。", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "タスク実行中にページが変わりました({before} → {after})。タスクを続行します。", 'sp.activity.generating_answer': "回答を生成中…", 'sp.activity.retrying_response': "回答を再試行中…", diff --git a/src/firefox/src/ui/locales/ko.js b/src/firefox/src/ui/locales/ko.js index 0c26dd3aac..aba6023953 100644 --- a/src/firefox/src/ui/locales/ko.js +++ b/src/firefox/src/ui/locales/ko.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': '확장 프로그램 UI 축소', 'sp.ui_scale.increase': '확장 프로그램 UI 확대', 'sp.ui_scale.reset': '초기화', - 'st.display.ui_scale.label': '확장 프로그램 UI 확대/축소', - 'st.display.ui_scale.decrease': '확장 프로그램 UI 축소', - 'st.display.ui_scale.increase': '확장 프로그램 UI 확대', - 'st.display.ui_scale.reset': '초기화', - 'st.display.ui_scale.desc': '페이지 확대/축소는 변경하지 않고 사이드 패널과 별도 채팅 창의 크기를 조정합니다.', - 'st.display.ui_scale.shortcuts': '전용 단축키: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': '지정되지 않음', - 'st.display.ui_scale.manage_shortcuts': '단축키 사용자 지정', 'tool.delegate_research': 'ChatGPT로 조사 중', 'st.display.research_escalation.label': '조사 에스컬레이션', 'st.display.research_escalation.desc': '활성화하면 WebBrain이 매우 복잡한 읽기 전용 조사 프롬프트를 ChatGPT에 보내기 전에 허가를 요청할 수 있습니다. 기본값은 꺼짐입니다. 정확한 프롬프트는 명시적으로 승인한 후에만 공유됩니다.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "계속하지 않기", "sp.recipient.reason_unrequested": "WebBrain이 요청에서 메시지를 보내야 하는지 판단하지 못했습니다. {host}에서 열려 있는 대화 상대는 {recipient}입니다.", "sp.recipient.reason_unnamed": "WebBrain이 요청에서 이 메시지를 누구에게 보낼지 판단하지 못했습니다. {host}에서 열려 있는 대화 상대는 {recipient}입니다.", - 'st.tab.permissions': "권한", 'st.perms.revoke': "취소", 'st.perms.clear_all': "모든 권한 지우기", 'st.perms.gate.label': "중요한 작업 전에 확인", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': '시작하기', 'ob.btn.skip': '지금은 건너뛰기', 'ob.btn.start': '시작', - 'ob.cloud.body': 'WebBrain Compass는 무료 주간 할당량으로 준비되어 있습니다. 선택된 Compass 대화는 WebBrain 개선 도움말이 기본적으로 켜져 있는 동안 WebBrain 개선을 위해 저장 및 사용될 수 있습니다. 설정 → 일반에서 끌 수 있습니다.', + 'ob.cloud.body': 'WebBrain Compass는 무료 주간 할당량으로 준비되어 있습니다. 선택된 Compass 대화는 WebBrain 개선 도움말이 기본적으로 켜져 있는 동안 WebBrain 개선을 위해 저장 및 사용될 수 있습니다. 설정 → 고급에서 끌 수 있습니다.', 'ob.cloud.change': '변경', 'ob.cloud.using': 'WebBrain Compass를 사용 중입니다.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': '결과', 'sp.api.enabled_html': '🔓 이 대화에서 API 변경이 허용되었습니다. 에이전트는 이제 UI보다 API가 더 안정적이라고 판단할 때 fetch_url과 execute_js를 통해 POST/PUT/PATCH/DELETE를 사용할 수 있습니다. 기본적으로는 UI 우선 방침을 유지합니다. 이 플래그는 대화를 초기화하면 해제됩니다.', - 'sp.permissions.disabled_html': '⚠️ 권한 확인이 꺼져 있습니다. WebBrain은 클릭, 입력, 이동, JavaScript 실행, 업로드, 다운로드, 녹화, 예약 작업을 미리 묻지 않고 수행합니다. 설정 → 권한 → 중요 작업 전에 확인에서 다시 활성화하세요.', + 'sp.permissions.disabled_html': '⚠️ 권한 확인이 꺼져 있습니다. WebBrain은 클릭, 입력, 이동, JavaScript 실행, 업로드, 다운로드, 녹화, 예약 작업을 미리 묻지 않고 수행합니다. 마이크 옆의 ⚠ 버튼에서 다시 활성화하세요.', 'sp.permissions.button': '권한 확인: 켜짐', 'sp.permissions.button_off': '권한 확인: 꺼짐', 'sp.permissions.gate_desc': 'WebBrain은 사이트에서 처음으로 클릭, 입력, 다운로드 또는 코드 실행을 할 때 확인을 요청합니다.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': '"{selector}" 대기', 'st.title': 'WebBrain 설정', - 'st.subtitle': 'LLM 제공자와 설정을 구성합니다 · v{version}', + 'st.subtitle': 'WebBrain의 동작 방식을 구성합니다 · v{version}', 'st.tab.display': '일반', + 'st.tab.budgets': '예산', + 'st.tab.advanced': '고급', + 'st.tab.llm': 'LLM', + 'st.tab.speech': '음성', + 'st.tab.generative': '생성', + 'st.tab.decision': '결정', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain 제공자', + 'st.providers_page.subtitle': 'WebBrain이 사용할 모델을 선택합니다 · v{version}', + 'st.permissions_page.title': 'WebBrain 권한', + 'st.permissions_page.subtitle': 'WebBrain이 먼저 묻지 않고 작업할 수 있는 사이트', 'st.tab.providers': '제공자', 'st.tab.vision': '비전', 'st.tab.profile': '프로필', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "결제 수단 업데이트", 'st.account.manage_billing': '청구 관리', - 'st.display.language.label': '언어', - 'st.display.language.desc': 'WebBrain 플러그인의 인터페이스 언어입니다.', 'st.display.verbose.label': '상세 모드', 'st.display.verbose.desc': '도구 호출의 상세 내용, 인수, 원본 JSON 결과를 모두 표시합니다. 기본적으로는 끔으로 깔끔한 채팅 환경을 제공합니다.', 'st.display.selection_shortcut.label': '선택 바로가기', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': '자동 스크린샷', "st.display.auto_screenshot.desc": "에이전트가 페이지에서 동작한 뒤 뷰포트 스크린샷을 자동으로 캡처하여 선택된 비전 경로가 변경 사항을 볼 수 있게 합니다. 토큰을 더 사용합니다. 비전을 사용할 수 없으면 보강을 건너뛰고 상태 알림과 함께 작업을 계속합니다.", 'st.display.auto_screenshot.off': '끔', - 'st.display.auto_screenshot.navigation': '이동 시', - 'st.display.auto_screenshot.state_change': '상태 변경 시 (기본값)', + 'st.display.auto_screenshot.navigation': '이동 시 (기본값)', + 'st.display.auto_screenshot.state_change': '상태 변경 시', 'st.display.auto_screenshot.every_step': '매 단계', 'st.display.tracing.label': '트레이스 기록 (모델 비교용)', - 'st.display.tracing.desc_html': '모든 실행(LLM 요청, 응답, 도구 호출, 스크린샷)을 로컬 IndexedDB에 보관하여 모델을 나란히 검사하고 비교할 수 있게 합니다. 별도의 트레이스 탭에서 열립니다. 매 단계마다 디스크 쓰기가 늘어나므로 기본값은 꺼짐입니다. 트레이스 페이지 열기 →', - 'st.display.lossless_tracing.label': '요청 전체 세부정보 기록(디버그 계층)', - 'st.display.lossless_tracing.desc_html': '각 LLM 요청의 전체 프롬프트·메시지·도구 스키마를 내용 없는 요약 대신 저장하고, 각 도구 결과를 최대 200KB까지 보관합니다. 심층 디버깅과 요청 재구성이 가능합니다. 대화 내용을 로컬에 기록하고 디스크를 훨씬 더 사용하므로 기본적으로 꺼져 있습니다. 트레이스 기록이 켜져 있어야 합니다.', + 'st.display.tracing.desc_html': '모든 실행(LLM 요청, 응답, 도구 호출, 스크린샷)을 로컬 IndexedDB에 보관하여 모델을 나란히 검사하고 비교할 수 있게 합니다. 각 LLM 요청의 전체 프롬프트·메시지·도구 스키마와 각 도구 결과를 최대 200KB까지 함께 저장합니다. 별도의 트레이스 탭에서 열립니다. 대화 내용을 로컬에 기록하고 디스크를 훨씬 더 사용하므로 기본적으로 꺼져 있습니다. 트레이스 페이지 열기 →', 'st.display.allow_local_network.label': '에이전트의 로컬 네트워크 접근 허용', 'st.display.allow_local_network.desc': '에이전트의 fetch_url 도구가 루프백(127.0.0.1, localhost)과 사설/RFC1918 주소(10.x, 192.168.x, 172.16–31.x)에 접근할 수 있게 합니다. 로컬 개발 서버, 인트라넷 도구, 자체 호스팅 API에 유용합니다. 기본값은 끔입니다. 꺼져 있으면 사설 또는 루프백 IP를 직접 적은 URL과 localhost 이름을 차단합니다. DNS 해석은 확인하지 않으므로 다른 호스트명은 로컬 주소에 접근할 수 있습니다. 클라우드 메타데이터 IP 리터럴(169.254.169.254)과 목록에 있는 메타데이터 이름 또는 *.internal/*.local은 켜져 있어도 차단됩니다.', 'st.display.notify_sound.label': "알림 소리", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "활성 제공자에서 비전 모드가 활성화되었습니다.", "sp.vision.off": "활성 제공자에서 비전 모드가 비활성화되었습니다.", "sp.vision.error": "비전 전환에 실패했습니다: {msg}", - "st.tab.multimodal": "보조 모델", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "권장됩니다. 켜져 있으면 WebBrain이 사이트에서 처음으로 클릭, 입력, 이동, JavaScript 실행, 업로드, 다운로드 또는 녹화할 때 권한을 요청합니다(이후 선택을 기억합니다). 완전히 신뢰하는 사이트에서 확인 없이 빠르게 사용하려면 끄세요.", "st.perms.gate.warning": "⚠️ 권한 확인이 꺼져 있습니다. WebBrain이 어떤 사이트에서든 — 콘텐츠가 공격자에 의해 조작될 수 있는 페이지를 포함해 — 묻지 않고 클릭, 입력, 이동, JavaScript 실행, 업로드, 다운로드, 녹화를 수행합니다. 페이지 콘텐츠는 내부적으로 여전히 신뢰할 수 없는 것으로 취급되지만, 주입된 지시가 동작을 유발하는 것을 막을 수는 없습니다. 어시스턴트를 사용하는 모든 사이트를 완전히 신뢰하는 경우에만 끈 채로 두세요.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "시스템 기본값", "st.display.download_directory.error": "WebBrain 또는 Work/WebBrain 같은 상대 폴더를 사용하세요. 절대 경로와 “..”는 허용되지 않습니다.", "st.display.strict_secret.label": "엄격한 비밀 정보 처리", - "st.display.strict_secret.desc": "요약이나 어시스턴트 텍스트에 자격 증명(비밀번호, API 키, 토큰, OTP)을 인용하기를 거부합니다 — 명시적으로 요청하더라도 마찬가지입니다. 트레이스 파일을 자주 공유하거나 화면을 공유한다면 유용합니다. 기본값은 꺼짐: 필요할 때 에이전트가 요청한 정확한 값을 그대로 알려줄 수 있습니다. `done` 요약을 깔끔하게 유지하고 자격 증명이 반복되지 않게 하려면 켜세요 (설정 → 보안).", + "st.display.strict_secret.desc": "요약이나 어시스턴트 텍스트에 자격 증명(비밀번호, API 키, 토큰, OTP)을 인용하기를 거부합니다 — 명시적으로 요청하더라도 마찬가지입니다. 트레이스 파일을 자주 공유하거나 화면을 공유한다면 유용합니다. 기본값은 꺼짐: 필요할 때 에이전트가 요청한 정확한 값을 그대로 알려줄 수 있습니다. `done` 요약을 깔끔하게 유지하고 자격 증명이 반복되지 않게 하려면 켜세요.", "st.display.request_timeout.label": "LLM 요청 시간 제한", "st.display.request_timeout.desc": "응답 헤더 수신과 스트리밍 응답의 각 청크 사이에 기다리는 최대 시간입니다. 기본값: 120초. 로컬 모델이 느리면, 특히 CPU에서 실행하거나 컨텍스트가 큰 경우 이 시간을 늘리세요.", "st.providers.filter.all": "전체", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'WebBrain이 사용 중일 때 메시지는 대기열에 추가됩니다. /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces, /verbose만 슬래시 명령으로 즉시 실행할 수 있습니다.', 'tool.go_back': '뒤로 가기', 'tool.go_forward': '앞으로 가기', - 'st.display.search.placeholder': '일반 설정 검색', - 'st.display.search.empty': '일치하는 일반 설정이 없습니다.', + 'st.display.search.placeholder': '설정 검색', + 'st.display.search.empty': '일치하는 설정이 없습니다.', 'st.display.advanced': '고급', ...getApocalypseModeCopy('ko'), ...getEmergencyBoxCopy('ko'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "비전으로 보내는 스크린샷의 긴 변(너비 또는 높이) 픽셀 상한. 낮은 상한은 전송 전 축소로 토큰·비용을 줄이고, 높은 상한은 충실도를 유지합니다.", "st.imageBudget.warning": "⚠️ 이 설정은 비전용 스크린샷(자동 캡처, /screenshot, 전체 페이지, verify_form)에 적용됩니다. 수동으로 저장한 전체 해상도 이미지는 영향을 받지 않습니다. «Image detail»은 OpenAI 스타일 엔드포인트에서 적용되며 다른 제공자는 무시할 수 있습니다.", - "st.redaction.heading": "스크린샷 마스킹", "st.redaction.toggle.label": "스크린샷의 민감한 콘텐츠 마스킹", "st.redaction.toggle.desc": "스크린샷을 비전 모델로 보내기 전에 양식 필드와 이메일이나 전화번호처럼 보이는 텍스트를 흐리게 처리합니다. 감지는 전적으로 사용자 기기에서 실행되며, 추가로 전송되는 데이터는 없습니다.", "st.redaction.warning": "⚠️ 이 기능은 최선을 다하는(best-effort) 방식이며 fail-open입니다. 마스킹이 페이지에서 실행될 수 없는 경우(예: 탐색 직후, PDF 뷰어, 제한된 브라우저 페이지 등) 스크린샷은 마스킹되지 않은 채로 그대로 전송됩니다. 감지는 DOM 휴리스틱만 사용하므로 캔버스에 그려진 텍스트, 이미지 안의 개인정보, 양식 필드나 이메일/전화번호 텍스트로 인식되지 않는 항목은 놓칠 수 있으며, 모델로 전송되는 페이지 텍스트는 이 설정으로 마스킹되지 않습니다. 이는 보안을 보장하는 기능이 아닙니다. 완전한 프라이버시가 필요하다면 로컬/오프라인 모델(llama.cpp, Ollama)을 사용하세요. 이 경우 스크린샷이 기기를 벗어나지 않으므로 마스킹 자체가 필요하지 않습니다.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "스크린샷을 포함한 저장된 전체 추적 세션을 JSON으로 내보내기", "sp.export_traces.recording_truncated": "저장된 모든 기록을 JSON으로 내보냈습니다. 기록 중 누락된 내용은 내보내기로 복구할 수 없습니다.", "sp.slash.export_traces": "도구 체인 내보내기(트레이스)", - "sp.export_traces.none": "이 대화에 대한 트레이스가 없습니다. 설정에서 '트레이스 기록'을 켜고 다시 실행하세요.", + "sp.export_traces.none": "이 대화에 대한 트레이스가 없습니다. 설정 → 고급에서 '트레이스 기록'을 켜고 다시 실행하세요.", "sp.export_traces.error": "트레이스를 내보낼 수 없습니다.", "sp.export_traces.done": "도구 체인을 내보냈습니다.", "sp.export_traces.no_conversation": "아직 내보낼 내용이 없습니다 — 먼저 대화를 시작하세요.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "도구 체인을 내보냈습니다. 이 대화에 트레이스가 많으면 이전 턴이 빠질 수 있습니다.", "st.display.help_improve.label": "WebBrain 개선에 참여", "st.display.help_improve.desc_html": "선택된 WebBrain Compass 상호작용을 보관하고 평가, 개선, 미세 조정 및 학습에 사용하도록 허용합니다. 기본적으로 켜져 있습니다. 향후 Compass 상호작용이 이러한 목적으로 사용되지 않도록 하려면 끄세요. 로컬 모델 및 자체 API 요청은 “연구를 위해 쿼리 공유”를 켜 제공업체에 한해 WebBrain이 수집합니다. 개인정보 처리방침 →", - "st.providers.webbrain_data_use.body": "WebBrain Compass에는 일일 무료 사용량이 포함됩니다. ‘WebBrain 개선에 참여’가 기본적으로 켜져 있는 동안 선택된 Compass 대화가 보관되어 평가, 개선, 미세 조정 및 학습에 사용될 수 있습니다. 향후 Compass 상호작용을 이러한 사용에서 제외하려면 일반 → 고급에서 끄세요. 로컬 모델 및 자체 API 요청은 이 제공업체의 “연구를 위해 쿼리 공유” 옵션을 켜 경우에만 WebBrain이 수집합니다. {privacyLink}. 더 많은 사용량이 필요하면 {subscribeLink}에서 구독하세요. 청구는 {accountLink}에서 관리하세요.", + "st.providers.webbrain_data_use.body": "WebBrain Compass에는 일일 무료 사용량이 포함됩니다. ‘WebBrain 개선에 참여’가 기본적으로 켜져 있는 동안 선택된 Compass 대화가 보관되어 평가, 개선, 미세 조정 및 학습에 사용될 수 있습니다. 향후 Compass 상호작용을 이러한 사용에서 제외하려면 설정 → 고급에서 끄세요. 로컬 모델 및 자체 API 요청은 이 제공업체의 “연구를 위해 쿼리 공유” 옵션을 켜 경우에만 WebBrain이 수집합니다. {privacyLink}. 더 많은 사용량이 필요하면 {subscribeLink}에서 구독하세요. 청구는 {accountLink}에서 관리하세요.", 'st.providers.share_research.label': "연구를 위해 쿼리 공유", 'st.providers.share_research.hint': "이 제공업체의 프롬프트와 응답을 사용된 제공업체 및 모델과 함께 평가 및 개선을 위해 WebBrain에 전송합니다. 이미지와 바이너리 첨부파일은 공유 전에 제거되고 텍스트는 잘립니다. 나머지 텍스트는 그대로 전송됩니다.", 'st.providers.share_research.confirm': "이 제공업체의 쿼리를 연구를 위해 WebBrain과 공유하시겠습니까?\n\n켜면 이 제공업체와의 프롬프트, 응답, 도구 상호작용이 제공업체 및 모델 이름과 함께 평가 및 개선을 위해 WebBrain에 전송됩니다. 텍스트는 이미지 제거 및 긴 내용 자르기 후 그대로 전송되므로 민감한 개인정보는 공유하지 마세요. 언제든지 꺼서 이후 공유를 중단할 수 있습니다.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "방해를 줄이고 싶으신가요? “항상 허용”은 이 사이트를 기억합니다. 아래 명령은 모든 사이트에서 WebBrain 권한 확인을 끕니다.", "sp.perm.insert_skip_command": "/dangerously-skip-permissions 입력", "sp.perm.skip_hint_draft": "초안은 변경되지 않았습니다. 명령을 입력하기 전에 비워 주세요.", - "ob.act.permissions_tip": "권한 확인은 기본적으로 켜져 있습니다. 고급 사용자는 /dangerously-skip-permissions로 모든 사이트의 확인을 끄고 설정 → 권한에서 다시 켤 수 있습니다.", + "ob.act.permissions_tip": "권한 확인은 기본적으로 켜져 있습니다. 고급 사용자는 /dangerously-skip-permissions로 모든 사이트의 확인을 끄고 마이크 옆의 ⚠ 버튼에서 다시 켤 수 있습니다.", 'st.provider.field.cache_read_cost_per_million': "캐시 읽기 예상 비용($ / 100만 토큰)", 'st.provider.field.cache_write_cost_per_million': "5분 캐시 쓰기 예상 비용($ / 100만 토큰)", 'st.provider.field.cache_write_1h_cost_per_million': "1시간 캐시 쓰기 예상 비용($ / 100만 토큰)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "암호화된 클라우드 사본을 이 기기의 현재 WebBrain 설정으로 바꾸시겠습니까?", "st.sync.consent.legacy": "암호화된 동기화를 사용하시겠습니까? WebBrain은 추억, 프로필 자동 완성 및 API 키 제공자 설정의 엔드 투 엔드 암호화 사본을 WebBrain Compass로 전송합니다. 채팅 기록과 OAuth 로그인은 동기화되지 않습니다.", "st.sync.consent.denied": "암호화된 동기화 권한이 부여되지 않았습니다.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "작업 실행 중 페이지가 변경되었습니다({before} → {after}). 작업을 계속합니다.", 'sp.activity.generating_answer': "답변 생성 중…", 'sp.activity.retrying_response': "답변 다시 시도 중…", diff --git a/src/firefox/src/ui/locales/ms.js b/src/firefox/src/ui/locales/ms.js index 8a43d444cd..655b788d21 100644 --- a/src/firefox/src/ui/locales/ms.js +++ b/src/firefox/src/ui/locales/ms.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Kecilkan UI sambungan', 'sp.ui_scale.increase': 'Besarkan UI sambungan', 'sp.ui_scale.reset': 'Tetapkan semula', - 'st.display.ui_scale.label': 'Zum UI sambungan', - 'st.display.ui_scale.decrease': 'Kecilkan UI sambungan', - 'st.display.ui_scale.increase': 'Besarkan UI sambungan', - 'st.display.ui_scale.reset': 'Tetapkan semula', - 'st.display.ui_scale.desc': 'Ubah saiz panel sisi dan tetingkap sembang berasingan tanpa mengubah zum halaman.', - 'st.display.ui_scale.shortcuts': 'Pintasan khusus: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Tidak ditetapkan', - 'st.display.ui_scale.manage_shortcuts': 'Sesuaikan pintasan', 'tool.delegate_research': 'Menyelidik dengan ChatGPT', 'st.display.research_escalation.label': 'Eskalasi penyelidikan', 'st.display.research_escalation.desc': 'Apabila diaktifkan, WebBrain mungkin meminta izin sebelum menghantar gesaan penyelidikan baca sahaja yang luar biasa kompleks kepada ChatGPT. Dimatikan secara lalai. Gesaan tepat hanya dikongsi selepas kelulusan jelas anda.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Jangan teruskan", "sp.recipient.reason_unrequested": "WebBrain tidak dapat memastikan daripada permintaan anda bahawa mesej perlu dihantar. Perbualan yang terbuka di {host} adalah dengan {recipient}.", "sp.recipient.reason_unnamed": "WebBrain tidak dapat memastikan daripada permintaan anda siapa yang patut menerima mesej ini. Perbualan yang terbuka di {host} adalah dengan {recipient}.", - 'st.tab.permissions': "Kebenaran", 'st.perms.revoke': "Batalkan", 'st.perms.clear_all': "Kosongkan semua kebenaran", 'st.perms.gate.label': "Tanya sebelum tindakan penting", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Mula', 'ob.btn.skip': 'Langkau buat masa ini', 'ob.btn.start': 'Mula', - 'ob.cloud.body': 'WebBrain Compass sedia dengan elaun mingguan percuma. Perbincangan Compass yang dipilih boleh disimpan dan digunakan untuk meningkatkan WebBrain semasa Bantu Tingkatkan WebBrain didayakan secara lalai. Anda boleh mematikannya di Tetapan → Umum.', + 'ob.cloud.body': 'WebBrain Compass sedia dengan elaun mingguan percuma. Perbincangan Compass yang dipilih boleh disimpan dan digunakan untuk meningkatkan WebBrain semasa Bantu Tingkatkan WebBrain didayakan secara lalai. Anda boleh mematikannya di Tetapan → Lanjutan.', 'ob.cloud.change': 'Tukar', 'ob.cloud.using': 'Menggunakan WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Keputusan', 'sp.api.enabled_html': '🔓 Pengubahan API diaktifkan untuk perbualan ini. Ejen kini boleh menggunakan POST/PUT/PATCH/DELETE melalui fetch_url dan execute_js apabila ia menilai API lebih boleh dipercayai berbanding UI untuk sesuatu langkah. UI tetap menjadi pilihan utama secara lalai. Bendera ini akan dikosongkan apabila anda menetapkan semula perbualan.', - 'sp.permissions.disabled_html': '⚠️ Gesaan kebenaran DIMATIKAN. WebBrain akan mengklik, menaip, menavigasi, menjalankan JavaScript, memuat naik, memuat turun, merakam, dan menjadualkan kerja masa hadapan tanpa bertanya terlebih dahulu. Aktifkan semula ini dari Tetapan → Kebenaran → Tanya sebelum tindakan penting.', + 'sp.permissions.disabled_html': '⚠️ Gesaan kebenaran DIMATIKAN. WebBrain akan mengklik, menaip, menavigasi, menjalankan JavaScript, memuat naik, memuat turun, merakam, dan menjadualkan kerja masa hadapan tanpa bertanya terlebih dahulu. Aktifkan semula ini dari butang ⚠ di sebelah mikrofon.', 'sp.permissions.button': 'Gesaan kebenaran: hidup', 'sp.permissions.button_off': 'Gesaan kebenaran: mati', 'sp.permissions.gate_desc': 'WebBrain bertanya kali pertama ia mengklik, menaip, memuat turun atau menjalankan kod di sesebuah tapak.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Menunggu "{selector}"', 'st.title': 'Tetapan WebBrain', - 'st.subtitle': 'Konfigurasi pembekal LLM dan keutamaan anda · v{version}', + 'st.subtitle': 'Konfigurasi cara WebBrain berfungsi · v{version}', 'st.tab.display': 'Umum', + 'st.tab.budgets': 'Bajet', + 'st.tab.advanced': 'Lanjutan', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Pertuturan', + 'st.tab.generative': 'Generatif', + 'st.tab.decision': 'Keputusan', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Pembekal WebBrain', + 'st.providers_page.subtitle': 'Pilih model yang digunakan WebBrain · v{version}', + 'st.permissions_page.title': 'Kebenaran WebBrain', + 'st.permissions_page.subtitle': 'Tapak tempat WebBrain boleh bertindak tanpa bertanya dahulu', 'st.tab.providers': 'Pembekal', 'st.tab.vision': 'Penglihatan', 'st.tab.profile': 'Profil', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "Kemas kini kaedah pembayaran", 'st.account.manage_billing': 'Urus pengebilan', - 'st.display.language.label': 'Bahasa', - 'st.display.language.desc': 'Bahasa antara muka untuk pemalam WebBrain.', 'st.display.verbose.label': 'Mod terperinci', 'st.display.verbose.desc': 'Tunjukkan butiran penuh panggilan alat, argumen, dan hasil JSON mentah. Dimatikan secara lalai untuk pengalaman sembang yang lebih bersih.', 'st.display.selection_shortcut.label': 'Pintasan pilihan', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Tangkapan skrin auto', "st.display.auto_screenshot.desc": "Tangkap tangkapan skrin viewport secara automatik selepas ejen bertindak pada halaman supaya laluan penglihatan yang dipilih dapat melihat perubahan. Ini menggunakan lebih banyak token. Jika penglihatan tidak tersedia, pengayaan dilangkau dan tugas diteruskan dengan notis status.", 'st.display.auto_screenshot.off': 'Mati', - 'st.display.auto_screenshot.navigation': 'Apabila navigasi', - 'st.display.auto_screenshot.state_change': 'Apabila keadaan berubah (lalai)', + 'st.display.auto_screenshot.navigation': 'Apabila navigasi (lalai)', + 'st.display.auto_screenshot.state_change': 'Apabila keadaan berubah', 'st.display.auto_screenshot.every_step': 'Setiap langkah', 'st.display.tracing.label': 'Rakam jejak (untuk perbandingan model)', - 'st.display.tracing.desc_html': 'Simpan setiap larian (permintaan LLM, respons, panggilan alat, tangkapan skrin) ke dalam IndexedDB tempatan supaya anda boleh memeriksa dan membandingkan model secara bersebelahan. Dibuka dalam tab Jejak yang berasingan. Dimatikan secara lalai kerana ia menambah penulisan cakera pada setiap langkah. Buka halaman Jejak →', - 'st.display.lossless_tracing.label': 'Rekod butiran penuh permintaan (peringkat debug)', - 'st.display.lossless_tracing.desc_html': 'Juga menyimpan prompt, mesej, dan skema alatan penuh bagi setiap permintaan LLM dan bukannya ringkasan tanpa kandungan, serta mengekalkan sehingga 200 KB bagi setiap hasil alatan. Membolehkan penyahpepijatan mendalam dan pembinaan semula permintaan. Dimatikan secara lalai kerana menulis kandungan perbualan anda secara setempat dan menggunakan lebih banyak cakera. Memerlukan rakaman jejak dihidupkan.', + 'st.display.tracing.desc_html': 'Simpan setiap larian (permintaan LLM, respons, panggilan alat, tangkapan skrin) ke dalam IndexedDB tempatan supaya anda boleh memeriksa dan membandingkan model secara bersebelahan, termasuk prompt, mesej dan skema alatan penuh bagi setiap permintaan LLM serta sehingga 200 KB bagi setiap hasil alatan. Dibuka dalam tab Jejak yang berasingan. Dimatikan secara lalai kerana menulis kandungan perbualan anda secara setempat dan menggunakan lebih banyak cakera. Buka halaman Jejak →', 'st.display.allow_local_network.label': 'Benarkan ejen mengakses rangkaian tempatan', 'st.display.allow_local_network.desc': 'Membenarkan alat fetch_url ejen mencapai loopback (127.0.0.1, localhost) dan alamat peribadi/RFC1918 (10.x, 192.168.x, 172.16–31.x). Berguna untuk pelayan pembangunan tempatan, alat intranet, atau API yang dihos sendiri. Dimatikan secara lalai. Apabila dimatikan, URL yang menggunakan IP peribadi atau loopback secara langsung dan nama localhost disekat. Resolusi DNS tidak diperiksa, jadi nama hos lain masih boleh mencapai alamat tempatan. IP literal metadata awan (169.254.169.254) dan nama metadata yang disenaraikan atau *.internal/*.local kekal disekat walaupun dihidupkan.', 'st.display.notify_sound.label': "Bunyi pemberitahuan", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Mod penglihatan didayakan untuk pembekal aktif.", "sp.vision.off": "Mod penglihatan dinyahaktifkan untuk pembekal aktif.", "sp.vision.error": "Togol penglihatan gagal: {msg}", - "st.tab.multimodal": "Model Bantuan", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Disyorkan. Apabila dihidupkan, WebBrain meminta kebenaran kali pertama ia mengklik, menaip, menavigasi, menjalankan JavaScript, memuat naik, memuat turun atau merakam pada sesuatu laman (kemudian mengingati pilihan anda). Matikan untuk penggunaan pantas tanpa gesaan pada laman yang anda percayai sepenuhnya.", "st.perms.gate.warning": "⚠️ Gesaan kebenaran DIMATIKAN. WebBrain akan mengklik, menaip, menavigasi, menjalankan JavaScript, memuat naik, memuat turun dan merakam pada mana-mana laman TANPA bertanya — termasuk pada halaman yang kandungannya mungkin dikawal oleh penyerang. Kandungan halaman masih dianggap tidak dipercayai secara dalaman, tetapi tiada apa-apa akan menghalang arahan yang disuntik daripada mencetuskan tindakan. Biarkan ini dimatikan hanya jika anda mempercayai sepenuhnya setiap laman tempat anda menggunakan pembantu ini.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Lalai sistem", "st.display.download_directory.error": "Gunakan folder relatif seperti WebBrain atau Work/WebBrain. Laluan mutlak dan “..” tidak dibenarkan.", "st.display.strict_secret.label": "Pengendalian rahsia ketat", - "st.display.strict_secret.desc": "Enggan memetik kelayakan (kata laluan, kunci API, token, OTP) dalam ringkasan atau teks pembantu — walaupun apabila anda secara jelas memintanya. Berguna jika anda kerap berkongsi fail jejak atau berkongsi skrin. Dimatikan secara lalai supaya ejen boleh mengulangi nilai tepat yang anda minta apabila anda memerlukannya. Hidupkannya (Tetapan → Keselamatan) apabila anda mahu ringkasan `done` kekal kemas dan kelayakan tidak pernah diulangi.", + "st.display.strict_secret.desc": "Enggan memetik kelayakan (kata laluan, kunci API, token, OTP) dalam ringkasan atau teks pembantu — walaupun apabila anda secara jelas memintanya. Berguna jika anda kerap berkongsi fail jejak atau berkongsi skrin. Dimatikan secara lalai supaya ejen boleh mengulangi nilai tepat yang anda minta apabila anda memerlukannya. Hidupkannya apabila anda mahu ringkasan `done` kekal kemas dan kelayakan tidak pernah diulangi.", "st.display.request_timeout.label": "Tamat masa permintaan LLM", "st.display.request_timeout.desc": "Masa menunggu maksimum untuk pengepala respons dan setiap jeda antara bahagian respons penstriman. Lalai: 120 saat. Tambahkan masa ini untuk model tempatan yang perlahan, terutamanya pada CPU atau dengan konteks besar.", "st.providers.filter.all": "Semua", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Mesej dimasukkan ke giliran semasa WebBrain sibuk. Hanya /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces, dan /verbose boleh berjalan serta-merta sebagai arahan slash.', 'tool.go_back': 'Kembali', 'tool.go_forward': 'Maju', - 'st.display.search.placeholder': 'Cari tetapan Umum', - 'st.display.search.empty': 'Tiada tetapan Umum yang sepadan.', + 'st.display.search.placeholder': 'Cari tetapan', + 'st.display.search.empty': 'Tiada tetapan yang sepadan.', 'st.display.advanced': 'Lanjutan', ...getApocalypseModeCopy('ms'), ...getEmergencyBoxCopy('ms'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Sisi terpanjang (lebar atau tinggi) dalam piksel untuk mana-mana tangkapan yang dihantar ke visi. Had lebih kecil mengecilkan imej sebelum dihantar, mengurangkan token dan kos. Had lebih besar mengekalkan ketepatan.", "st.imageBudget.warning": "⚠️ Tetapan ini digunakan pada tangkapan untuk visi (tangkapan auto, /screenshot, halaman penuh, verify_form). Imej resolusi penuh yang disimpan secara manual tidak terjejas. «Image detail» dihormati oleh endpoint gaya OpenAI; pembekal lain mungkin mengabaikannya.", - "st.redaction.heading": "Penyamaran tangkapan skrin", "st.redaction.toggle.label": "Samarkan kandungan sensitif dalam tangkapan skrin", "st.redaction.toggle.desc": "Sebelum tangkapan skrin dihantar ke model visi, medan borang dan teks yang kelihatan seperti e-mel atau nombor telefon akan dikaburkan. Pengesanan berjalan sepenuhnya pada peranti anda — tiada apa-apa tambahan dihantar.", "st.redaction.warning": "⚠️ Ini bersifat usaha terbaik (best-effort) dan fail-open: jika penyamaran tidak dapat berjalan pada sesuatu halaman (contohnya sejurus selepas navigasi, dalam pemapar PDF, atau pada halaman pelayar yang dihadkan), tangkapan skrin tetap dihantar tanpa disamarkan. Pengesanan hanya menggunakan heuristik DOM — teks yang dilukis pada canvas, maklumat peribadi dalam imej, atau apa-apa yang tidak dikenali sebagai medan borang atau teks e-mel/telefon mungkin terlepas, dan teks halaman yang dihantar kepada model tidak disamarkan oleh tetapan ini. Ini BUKAN jaminan keselamatan. Untuk privasi sepenuhnya, gunakan model tempatan/luar talian (llama.cpp, Ollama): tangkapan skrin tidak akan meninggalkan peranti anda dan penyamaran menjadi tidak diperlukan.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "Eksport seluruh sesi jejak tersimpan sebagai JSON, termasuk tangkapan skrin", "sp.export_traces.recording_truncated": "Semua rekod tersimpan telah dieksport sebagai JSON. Kandungan yang ditinggalkan semasa rakaman tidak dapat dipulihkan melalui eksport.", "sp.slash.export_traces": "Eksport rantaian alat (jejak)", - "sp.export_traces.none": "Tiada jejak untuk perbualan ini. Hidupkan Rakam jejak dalam Tetapan, kemudian jalankan semula.", + "sp.export_traces.none": "Tiada jejak untuk perbualan ini. Hidupkan Rakam jejak dalam Tetapan → Lanjutan, kemudian jalankan semula.", "sp.export_traces.error": "Tidak dapat mengeksport jejak.", "sp.export_traces.done": "Rantaian alat dieksport.", "sp.export_traces.no_conversation": "Tiada lagi yang dieksport — mulakan perbualan dahulu.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Rantaian alat dieksport. Giliran lama mungkin hilang jika perbualan ini mempunyai banyak jejak.", "st.display.help_improve.label": "Bantu Tingkatkan WebBrain", "st.display.help_improve.desc_html": "Benarkan interaksi WebBrain Compass terpilih disimpan dan digunakan untuk penilaian, penambahbaikan, penalaan halus dan latihan. Dihidupkan secara lalai. Matikan untuk menghalang interaksi Compass pada masa hadapan daripada digunakan bagi tujuan tersebut. WebBrain hanya mengumpul permintaan model setempat dan API anda sendiri daripada penyedia yang anda hidupkan “Kongsi pertanyaan untuk penyelidikan”. Dasar privasi →", - "st.providers.webbrain_data_use.body": "Penggunaan harian percuma WebBrain Compass disertakan. Semasa Bantu Tingkatkan WebBrain dihidupkan secara lalai, perbualan Compass terpilih mungkin disimpan dan digunakan untuk penilaian, penambahbaikan, penalaan halus dan latihan. Matikan di Umum → Lanjutan untuk mengecualikan interaksi Compass pada masa hadapan daripada penggunaan tersebut. WebBrain hanya mengumpul permintaan model setempat dan API anda sendiri jika anda menghidupkan opsyen “Kongsi pertanyaan untuk penyelidikan” penyedia ini. {privacyLink}. Untuk penggunaan tambahan, langgan di {subscribeLink}. Urus pengebilan di {accountLink}.", + "st.providers.webbrain_data_use.body": "Penggunaan harian percuma WebBrain Compass disertakan. Semasa Bantu Tingkatkan WebBrain dihidupkan secara lalai, perbualan Compass terpilih mungkin disimpan dan digunakan untuk penilaian, penambahbaikan, penalaan halus dan latihan. Matikan di Tetapan → Lanjutan untuk mengecualikan interaksi Compass pada masa hadapan daripada penggunaan tersebut. WebBrain hanya mengumpul permintaan model setempat dan API anda sendiri jika anda menghidupkan opsyen “Kongsi pertanyaan untuk penyelidikan” penyedia ini. {privacyLink}. Untuk penggunaan tambahan, langgan di {subscribeLink}. Urus pengebilan di {accountLink}.", 'st.providers.share_research.label': "Kongsi pertanyaan untuk penyelidikan", 'st.providers.share_research.hint': "Menghantar gesaan dan respons daripada penyedia ini kepada WebBrain untuk penilaian dan penambahbaikan, termasuk penyedia dan model yang digunakan. Imej dan lampiran binari dibuang dan teks dipangkas sebelum dikongsi; baki teks dihantar seadanya.", 'st.providers.share_research.confirm': "Kongsi pertanyaan daripada penyedia ini dengan WebBrain untuk penyelidikan?\n\nJika dihidupkan, gesaan, respons dan interaksi alat anda dengan penyedia ini akan dihantar kepada WebBrain untuk penilaian dan penambahbaikan, berserta nama penyedia dan model. Teks dihantar seadanya selepas imej dibuang dan kandungan panjang dipangkas, jadi elakkan berkongsi data peribadi yang sensitif. Anda boleh mematikannya pada bila-bila masa untuk menghentikan perkongsian.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "Mahukan lebih sedikit gangguan? “Sentiasa benarkan” mengingati laman ini. Perintah di bawah mematikan permintaan izin WebBrain di semua laman.", "sp.perm.insert_skip_command": "Sisipkan /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Draf anda tidak berubah. Kosongkannya sebelum menyisipkan perintah.", - "ob.act.permissions_tip": "Permintaan izin dihidupkan secara lalai. Pengguna lanjutan boleh mematikannya secara global dengan /dangerously-skip-permissions dan menghidupkannya semula di Tetapan → Izin.", + "ob.act.permissions_tip": "Permintaan izin dihidupkan secara lalai. Pengguna lanjutan boleh mematikannya secara global dengan /dangerously-skip-permissions dan menghidupkannya semula dari butang ⚠ di sebelah mikrofon.", 'st.provider.field.cache_read_cost_per_million': "Anggaran kos bacaan cache ($ / 1 juta token)", 'st.provider.field.cache_write_cost_per_million': "Anggaran kos tulis cache 5 minit ($ / 1 juta token)", 'st.provider.field.cache_write_1h_cost_per_million': "Anggaran kos tulis cache 1 jam ($ / 1 juta token)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "Gantikan salinan awan yang disulitkan dengan persediaan WebBrain semasa peranti ini?", "st.sync.consent.legacy": "Hidupkan penyegerakan yang disulitkan? WebBrain akan menghantar salinan memori anda yang disulitkan hujung ke hujung, autolengkap profil dan tetapan pembekal kunci API ke WebBrain Compass. Sejarah sembang dan log masuk OAuth tidak disegerakkan.", "st.sync.consent.denied": "Kebenaran penyegerakan yang disulitkan tidak diberikan.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Halaman berubah semasa tugas berjalan ({before} → {after}). Tugas diteruskan.", 'sp.activity.generating_answer': "Menjana jawapan…", 'sp.activity.retrying_response': "Mencuba semula jawapan…", diff --git a/src/firefox/src/ui/locales/nl.js b/src/firefox/src/ui/locales/nl.js index 5d50120118..cec6d0625e 100644 --- a/src/firefox/src/ui/locales/nl.js +++ b/src/firefox/src/ui/locales/nl.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Extensie-interface uitzoomen', 'sp.ui_scale.increase': 'Extensie-interface inzoomen', 'sp.ui_scale.reset': 'Resetten', - 'st.display.ui_scale.label': 'Zoom van extensie-interface', - 'st.display.ui_scale.decrease': 'Extensie-interface uitzoomen', - 'st.display.ui_scale.increase': 'Extensie-interface inzoomen', - 'st.display.ui_scale.reset': 'Resetten', - 'st.display.ui_scale.desc': 'Pas het formaat van het zijpaneel en het losse chatvenster aan zonder de paginazoom te wijzigen.', - 'st.display.ui_scale.shortcuts': 'Speciale sneltoetsen: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Niet toegewezen', - 'st.display.ui_scale.manage_shortcuts': 'Sneltoetsen aanpassen', 'tool.delegate_research': 'Onderzoeken met ChatGPT', 'st.display.research_escalation.label': 'Onderzoeksescalatie', 'st.display.research_escalation.desc': 'Indien ingeschakeld kan WebBrain toestemming vragen voordat een ongewoon complexe alleen-lezen onderzoeksprompt naar ChatGPT wordt gestuurd. Standaard uitgeschakeld. De exacte prompt wordt alleen gedeeld na uw uitdrukkelijke goedkeuring.', @@ -663,21 +655,30 @@ export default { 'ob.btn.done': 'Aan de slag', 'ob.btn.skip': 'Nu overslaan', 'ob.btn.start': 'Starten', - 'ob.cloud.body': 'WebBrain Compass is klaar met een gratis wekelijkse quotum. Geselecteerde Compass-gesprekken kunnen worden bewaard en gebruikt om WebBrain te verbeteren terwijl Help WebBrain verbeteren standaard is ingeschakeld. U kunt dit uitschakelen in Instellingen → Algemeen.', + 'ob.cloud.body': 'WebBrain Compass is klaar met een gratis wekelijkse quotum. Geselecteerde Compass-gesprekken kunnen worden bewaard en gebruikt om WebBrain te verbeteren terwijl Help WebBrain verbeteren standaard is ingeschakeld. U kunt dit uitschakelen in Instellingen → Geavanceerd.', 'ob.cloud.change': 'Wijzigen', 'ob.cloud.using': 'WebBrain Compass gebruiken.', 'st.title': 'WebBrain Instellingen', - 'st.subtitle': 'Configureer uw LLM-providers en voorkeuren · v{version}', + 'st.subtitle': 'Configureer hoe WebBrain werkt · v{version}', 'st.tab.display': 'Algemeen', + 'st.tab.budgets': 'Budgetten', + 'st.tab.advanced': 'Geavanceerd', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Spraak', + 'st.tab.generative': 'Generatief', + 'st.tab.decision': 'Beslissing', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain-providers', + 'st.providers_page.subtitle': 'Kies de modellen die WebBrain gebruikt · v{version}', + 'st.permissions_page.title': 'WebBrain-machtigingen', + 'st.permissions_page.subtitle': 'Sites waar WebBrain zonder eerst te vragen mag handelen', 'st.tab.providers': 'Providers', 'st.tab.skills': 'Vaardigheden', 'st.tab.vision': 'Visie', - 'st.tab.multimodal': "Ondersteunende modellen", 'st.tab.memory': 'Geheugen', 'st.tab.profile': 'Profiel', 'st.tab.account': 'Account', 'st.tab.captcha': 'CAPTCHA', - 'st.tab.permissions': 'Machtigingen', 'st.perms.gate.label': 'Vragen voor gevolghebbende acties', 'st.perms.gate.desc': 'Aanbevolen. Wanneer ingeschakeld, vraagt WebBrain om toestemming de eerste keer dat...', 'st.perms.gate.warning': '⚠️ Machtigingsvragen zijn UIT...', @@ -696,8 +697,6 @@ export default { "st.account.payment_failed": "Je abonnementsbetaling kon niet worden voltooid. Werk je betaalmethode bij om je betaalde abonnement te herstellen.", "st.account.update_payment": "Betaalmethode bijwerken", 'st.account.manage_billing': 'Facturering beheren', - 'st.display.language.label': 'Taal', - 'st.display.language.desc': 'Interfacetaal voor de WebBrain-plug-in.', 'st.display.theme.label': 'Weergave', 'st.display.theme.desc': 'Licht, donker of volg uw OS-instelling.', 'st.display.theme.system': 'Systeem', @@ -707,8 +706,8 @@ export default { 'st.display.download_directory.desc': 'Optionele submap binnen uw browser- of systeemdownloadmap...', 'st.display.download_directory.placeholder': 'Standaard', 'st.display.download_directory.error': 'Gebruik een relatieve map zoals WebBrain of Work/WebBrain...', - 'st.display.search.placeholder': 'Zoek in Algemene instellingen', - 'st.display.search.empty': 'Geen algemene instellingen gevonden.', + 'st.display.search.placeholder': 'Zoek in instellingen', + 'st.display.search.empty': 'Geen instellingen gevonden.', 'st.display.advanced': 'Geavanceerd', ...getApocalypseModeCopy('nl'), ...getEmergencyBoxCopy('nl'), @@ -764,20 +763,18 @@ export default { 'st.display.auto_screenshot.label': 'Automatische schermafbeelding', "st.display.auto_screenshot.desc": "Maak automatisch een schermafbeelding van de viewport nadat de agent op de pagina heeft gehandeld, zodat de gekozen visieroute de wijziging kan zien. Dit kost meer tokens. Als visie niet beschikbaar is, wordt de verrijking overgeslagen en gaat de taak verder met een statusmelding.", 'st.display.auto_screenshot.off': 'Uit', - 'st.display.auto_screenshot.navigation': 'Bij navigatie', - 'st.display.auto_screenshot.state_change': 'Bij statustwijziging (standaard)', + 'st.display.auto_screenshot.navigation': 'Bij navigatie (standaard)', + 'st.display.auto_screenshot.state_change': 'Bij statustwijziging', 'st.display.auto_screenshot.every_step': 'Elke stap', 'st.display.tracing.label': 'Traces opslaan (voor modelvergelijking)', - 'st.display.tracing.desc_html': 'Sla elke uitvoering op in lokale IndexedDB... Traces openen →', - 'st.display.lossless_tracing.label': 'Volledige verzoekdetails opnemen (debuglaag)', - 'st.display.lossless_tracing.desc_html': 'Bewaart ook de volledige prompts, berichten en tool-schema\'s van elk LLM-verzoek in plaats van inhoudsloze samenvattingen, en houdt tot 200 KB van elk toolresultaat. Maakt diepgaand debuggen en reconstructie van verzoeken mogelijk. Standaard uit omdat het de inhoud van uw gesprek lokaal opslaat en veel meer schijfruimte gebruikt. Vereist dat tracerecordering aan staat.', + 'st.display.tracing.desc_html': "Slaat elke uitvoering (LLM-verzoeken, antwoorden, tool-aanroepen, screenshots) op in lokale IndexedDB, zodat u modellen naast elkaar kunt inspecteren en vergelijken, inclusief de volledige prompts, berichten en tool-schema's van elk LLM-verzoek en tot 200 KB van elk toolresultaat. Opent in een apart Traces-tabblad. Standaard uit omdat het de inhoud van uw gesprek lokaal opslaat en veel meer schijfruimte gebruikt. Traces openen →", 'st.display.cost_session_limit.label': 'Cloudkostensessietegoed', 'st.display.cost_session_limit.desc': 'Stopt cloud- en OpenRouter-uitvoeringen voordat nog een betaald modelaanroep plaatsvindt...', 'st.display.cost_total_limit.label': 'Cloudkostentotaaltegoed', 'st.display.cost_total_limit.desc': 'Volgt gerapporteerde of geschatte cloud-/OpenRouter-modeluitgaven...', 'st.display.cost_reset': 'Uitgaven resetten', 'st.display.strict_secret.label': 'Strikte geheimhouding', - 'st.display.strict_secret.desc': 'Weiger om inloggegevens (wachtwoorden, API-sleutels, tokens, OTP\'s) te citeren in samenvattingen of assistenttekst — zelfs wanneer je er expliciet om vraagt. Handig als je regelmatig tracebestanden deelt of het scherm deelt. Standaard uit, zodat de agent de exacte waarde kan herhalen die je opvraagt wanneer je die nodig hebt. Schakel het in (Instellingen → Beveiliging) wanneer je wilt dat `done`-samenvattingen netjes blijven en inloggegevens nooit worden herhaald.', + 'st.display.strict_secret.desc': "Weiger om inloggegevens (wachtwoorden, API-sleutels, tokens, OTP's) te citeren in samenvattingen of assistenttekst — zelfs wanneer je er expliciet om vraagt. Handig als je regelmatig tracebestanden deelt of het scherm deelt. Standaard uit, zodat de agent de exacte waarde kan herhalen die je opvraagt wanneer je die nodig hebt. Schakel het in wanneer je wilt dat `done`-samenvattingen netjes blijven en inloggegevens nooit worden herhaald.", 'st.display.allow_local_network.label': 'Sta agent toe om lokaal netwerk te bereiken', 'st.display.allow_local_network.desc': 'Staat het fetch_url-gereedschap van de agent toe om loopback- en privé-/RFC1918-adressen te bereiken...', 'st.display.scheduled_tasks.label': 'Geplande taken', @@ -939,7 +936,6 @@ export default { 'st.imageBudget.maxDimension.label': 'Max afbeeldingsdimensie', 'st.imageBudget.maxDimension.desc': 'Grootste zijde (breedte of hoogte) in pixels...', 'st.imageBudget.warning': '⚠️ Deze instellingen gelden voor schermafbeeldingen vastgelegd voor visie...', - 'st.redaction.heading': 'Schermafbeeldingreductie', 'st.redaction.toggle.label': 'Gevoelige inhoud onleesbaar maken op schermafbeeldingen', 'st.redaction.toggle.desc': 'Voordat een schermafbeelding naar een viemodel wordt verzonden, maak formuliervelden onleesbaar...', 'st.redaction.warning': '⚠️ Op basis van inschatting en faalt open...', @@ -1159,7 +1155,7 @@ export default { 'st.providers.compat.value.max': 'Max', 'st.providers.compat.value.system': 'Systeem', 'st.providers.compat.value.developer': 'Ontwikkelaar', - 'st.providers.webbrain_data_use.body': 'Gratis wekelijks WebBrain Compass-gebruik is inbegrepen. Zolang „Help WebBrain verbeteren“ standaard is ingeschakeld, kunnen geselecteerde Compass-gesprekken worden bewaard en gebruikt voor evaluatie, verbetering, fine-tuning en training. Schakel dit uit onder Algemeen → Geavanceerd om toekomstige Compass-interacties van dit gebruik uit te sluiten. Verzoeken aan lokale modellen en je eigen API worden door WebBrain alleen verzameld wanneer je de provideroptie “Query’s delen voor onderzoek” inschakelt. {privacyLink}. Abonneer u voor meer gebruik via {subscribeLink}. Beheer facturering via {accountLink}.', + 'st.providers.webbrain_data_use.body': 'Gratis wekelijks WebBrain Compass-gebruik is inbegrepen. Zolang „Help WebBrain verbeteren“ standaard is ingeschakeld, kunnen geselecteerde Compass-gesprekken worden bewaard en gebruikt voor evaluatie, verbetering, fine-tuning en training. Schakel dit uit onder Instellingen → Geavanceerd om toekomstige Compass-interacties van dit gebruik uit te sluiten. Verzoeken aan lokale modellen en je eigen API worden door WebBrain alleen verzameld wanneer je de provideroptie “Query’s delen voor onderzoek” inschakelt. {privacyLink}. Abonneer u voor meer gebruik via {subscribeLink}. Beheer facturering via {accountLink}.', 'st.providers.share_research.label': "Query’s delen voor onderzoek", 'st.providers.share_research.hint': "Verzendt prompts en antwoorden van deze provider naar WebBrain voor evaluatie en verbetering, inclusief de gebruikte provider en het model. Afbeeldingen en binaire bijlagen worden verwijderd en tekst wordt ingekort vóór het delen; de resterende tekst wordt ongewijzigd verzonden.", 'st.providers.share_research.confirm': "Query’s van deze provider delen met WebBrain voor onderzoek?\n\nIndien ingeschakeld worden je prompts, antwoorden en toolinteracties met deze provider samen met de provider- en modelnaam naar WebBrain verzonden voor evaluatie en verbetering. Tekst wordt ongewijzigd verzonden na het verwijderen van afbeeldingen en het inkorten van lange inhoud; deel dus geen gevoelige persoonsgegevens. Je kunt dit op elk moment uitschakelen om verder delen te stoppen.", @@ -1250,7 +1246,7 @@ export default { "st.sync.confirm.reset": "De gecodeerde cloudkopie vervangen door de huidige WebBrain-installatie van dit apparaat?", "st.sync.consent.legacy": "Versleutelde synchronisatie inschakelen? WebBrain verzendt een end-to-end gecodeerde kopie van uw herinneringen, automatisch aanvullen van profielen en API-sleutelproviderinstellingen naar WebBrain Compass. Chatgeschiedenis en OAuth-aanmeldingen worden niet gesynchroniseerd.", "st.sync.consent.denied": "Er is geen versleutelde synchronisatietoestemming verleend.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "De pagina is gewijzigd terwijl de taak actief was ({before} → {after}). De taak wordt voortgezet.", 'sp.activity.generating_answer': "Antwoord wordt gegenereerd…", 'sp.activity.retrying_response': "Antwoord opnieuw proberen…", diff --git a/src/firefox/src/ui/locales/pl.js b/src/firefox/src/ui/locales/pl.js index 38279d2399..eb155e019e 100644 --- a/src/firefox/src/ui/locales/pl.js +++ b/src/firefox/src/ui/locales/pl.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Pomniejsz interfejs rozszerzenia', 'sp.ui_scale.increase': 'Powiększ interfejs rozszerzenia', 'sp.ui_scale.reset': 'Resetuj', - 'st.display.ui_scale.label': 'Powiększenie interfejsu rozszerzenia', - 'st.display.ui_scale.decrease': 'Pomniejsz interfejs rozszerzenia', - 'st.display.ui_scale.increase': 'Powiększ interfejs rozszerzenia', - 'st.display.ui_scale.reset': 'Resetuj', - 'st.display.ui_scale.desc': 'Zmień rozmiar panelu bocznego i osobnego okna czatu bez zmieniania powiększenia strony.', - 'st.display.ui_scale.shortcuts': 'Dedykowane skróty: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Nie przypisano', - 'st.display.ui_scale.manage_shortcuts': 'Dostosuj skróty', 'tool.delegate_research': 'Badanie z ChatGPT', 'st.display.research_escalation.label': 'Eskalacja badań', 'st.display.research_escalation.desc': 'Po włączeniu WebBrain może poprosić o zgodę przed wysłaniem do ChatGPT wyjątkowo złożonego polecenia badawczego tylko do odczytu. Domyślnie wyłączone. Dokładne polecenie jest udostępniane wyłącznie po wyraźnej zgodzie użytkownika.', @@ -383,7 +375,7 @@ export default { 'sp.step.input_label': 'Wejście', 'sp.step.result_label': 'Wynik', 'sp.api.enabled_html': '🔓 Modyfikacje API włączone dla tej rozmowy. Agent może teraz używać POST/PUT/PATCH/DELETE przez fetch_url i execute_js, gdy uzna API za bardziej niezawodne niż interfejs dla danego kroku. Domyślnie nadal preferowany jest interfejs. Ta flaga jest czyszczona po zresetowaniu rozmowy.', - 'sp.permissions.disabled_html': '⚠️ Pytania o uprawnienia są WYŁĄCZONE. WebBrain będzie klikać, pisać, nawigować, uruchamiać JavaScript, przesyłać, pobierać, nagrywać i planować przyszłe działania bez pytania. Włącz ponownie w Ustawienia → Uprawnienia → Pytaj przed istotnymi działaniami.', + 'sp.permissions.disabled_html': '⚠️ Pytania o uprawnienia są WYŁĄCZONE. WebBrain będzie klikać, pisać, nawigować, uruchamiać JavaScript, przesyłać, pobierać, nagrywać i planować przyszłe działania bez pytania. Włącz ponownie przyciskiem ⚠ obok mikrofonu.', 'sp.permissions.button': 'Pytania o uprawnienia: włączone', 'sp.permissions.button_off': 'Pytania o uprawnienia: wyłączone', 'sp.permissions.gate_desc': 'WebBrain pyta za pierwszym razem, gdy klika, pisze, pobiera pliki lub uruchamia kod na stronie.', @@ -521,19 +513,28 @@ export default { 'ob.btn.done': 'Rozpocznij', 'ob.btn.skip': 'Pomiń na razie', 'ob.btn.start': 'Rozpocznij', - 'ob.cloud.body': 'WebBrain Compass jest gotowy z bezpłatnym tygodniowym przydziałem. Wybrane rozmowy Compass mogą być zachowane i użyte do ulepszenia WebBrain, dopóki Pomóż ulepszyć WebBrain jest domyślnie włączony. Możesz to wyłączyć w Ustawienia → Ogólne.', + 'ob.cloud.body': 'WebBrain Compass jest gotowy z bezpłatnym tygodniowym przydziałem. Wybrane rozmowy Compass mogą być zachowane i użyte do ulepszenia WebBrain, dopóki Pomóż ulepszyć WebBrain jest domyślnie włączony. Możesz to wyłączyć w Ustawienia → Zaawansowane.', 'ob.cloud.change': 'Zmień', 'ob.cloud.using': 'Korzystanie z WebBrain Compass.', 'st.title': 'Ustawienia WebBrain', - 'st.subtitle': 'Skonfiguruj dostawców LLM i preferencje · v{version}', + 'st.subtitle': 'Skonfiguruj działanie WebBrain · v{version}', 'st.tab.display': 'Ogólne', + 'st.tab.budgets': 'Budżety', + 'st.tab.advanced': 'Zaawansowane', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Mowa', + 'st.tab.generative': 'Generatywne', + 'st.tab.decision': 'Decyzje', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Dostawcy WebBrain', + 'st.providers_page.subtitle': 'Wybierz modele, których używa WebBrain · v{version}', + 'st.permissions_page.title': 'Uprawnienia WebBrain', + 'st.permissions_page.subtitle': 'Witryny, w których WebBrain może działać bez pytania', 'st.tab.providers': 'Dostawcy', 'st.tab.vision': 'Wizja', - 'st.tab.multimodal': "Modele pomocnicze", 'st.tab.profile': 'Profil', 'st.tab.account': 'Konto', 'st.tab.captcha': 'CAPTCHA', - 'st.tab.permissions': 'Uprawnienia', 'st.perms.gate.label': 'Pytaj przed istotnymi działaniami', 'st.perms.gate.desc': 'Zalecane. Po włączeniu WebBrain pyta o pozwolenie przy pierwszym kliknięciu, pisaniu, nawigacji, uruchomieniu JavaScriptu, przesyłaniu, pobieraniu, nagrywaniu lub planowaniu przyszłych działań na stronie (a następnie zapamiętuje Twój wybór). Wyłącz, aby szybko korzystać bez pytań na stronach, którym w pełni ufasz.', 'st.perms.gate.warning': '⚠️ Pytania o uprawnienia są WYŁĄCZONE. WebBrain będzie klikać, pisać, nawigować, uruchamiać JavaScript, przesyłać, pobierać, nagrywać i planować przyszłe działania na każdej stronie BEZ pytania — w tym na stronach, których treść może być kontrolowana przez atakującego. Treść strony jest nadal wewnętrznie traktowana jako niezaufana, ale nic nie powstrzyma wstrzykniętego polecenia przed wywołaniem działania. Zostaw to wyłączone tylko, jeśli w pełni ufasz każdej stronie, na której używasz asystenta.', @@ -552,8 +553,6 @@ export default { "st.account.payment_failed": "Nie udało się zrealizować płatności za subskrypcję. Zaktualizuj metodę płatności, aby przywrócić płatny plan.", "st.account.update_payment": "Zaktualizuj metodę płatności", 'st.account.manage_billing': 'Zarządzaj rozliczeniami', - 'st.display.language.label': 'Język', - 'st.display.language.desc': 'Język interfejsu wtyczki WebBrain.', 'st.display.theme.label': 'Wygląd', 'st.display.theme.desc': 'Jasny, ciemny lub zgodny z ustawieniem systemu.', 'st.display.theme.system': 'Systemowy', @@ -576,20 +575,18 @@ export default { 'st.display.auto_screenshot.label': 'Automatyczny zrzut ekranu', "st.display.auto_screenshot.desc": "Automatycznie przechwytuj zrzut widocznego obszaru po działaniu agenta na stronie, aby wybrana trasa wizyjna mogła zobaczyć zmianę. Zużywa to więcej tokenów. Jeśli wizja jest niedostępna, wzbogacanie jest pomijane, a zadanie jest kontynuowane z komunikatem o stanie.", 'st.display.auto_screenshot.off': 'Wyłączone', - 'st.display.auto_screenshot.navigation': 'Przy nawigacji', - 'st.display.auto_screenshot.state_change': 'Przy zmianie stanu (domyślnie)', + 'st.display.auto_screenshot.navigation': 'Przy nawigacji (domyślnie)', + 'st.display.auto_screenshot.state_change': 'Przy zmianie stanu', 'st.display.auto_screenshot.every_step': 'Przy każdym kroku', 'st.display.tracing.label': 'Rejestruj ślady (do porównywania modeli)', - 'st.display.tracing.desc_html': 'Zapisuj każde wykonanie (żądania LLM, odpowiedzi, wywołania narzędzi, zrzuty ekranu) w lokalnej bazie IndexedDB, aby móc je analizować i porównywać modele obok siebie. Otwiera się w osobnej karcie Ślady. Domyślnie wyłączone, ponieważ dodaje zapisy na dysk przy każdym kroku. Otwórz stronę Ślady →', - 'st.display.lossless_tracing.label': 'Zapisuj pełne szczegóły żądań (poziom debugowania)', - 'st.display.lossless_tracing.desc_html': 'Zapisuje również pełne prompty, wiadomości i schematy narzędzi każdego żądania LLM zamiast podsumowań bez treści oraz przechowuje do 200 KB każdego wyniku narzędzia. Umożliwia głębokie debugowanie i rekonstrukcję żądań. Wyłączone domyślnie, ponieważ zapisuje treść rozmowy lokalnie i zużywa znacznie więcej miejsca. Wymaga włączonego zapisu śladów.', + 'st.display.tracing.desc_html': 'Zapisuj każde wykonanie (żądania LLM, odpowiedzi, wywołania narzędzi, zrzuty ekranu) w lokalnej bazie IndexedDB, aby móc analizować i porównywać modele obok siebie, wraz z pełnymi promptami, wiadomościami i schematami narzędzi każdego żądania LLM oraz do 200 KB każdego wyniku narzędzia. Otwiera się w osobnej karcie Ślady. Domyślnie wyłączone, ponieważ zapisuje treść rozmowy lokalnie i zużywa znacznie więcej miejsca. Otwórz stronę Ślady →', 'st.display.cost_session_limit.label': 'Limit kosztów chmury na sesję', 'st.display.cost_session_limit.desc': 'Zatrzymuje wykonania w chmurze i OpenRouter przed kolejnym płatnym wywołaniem modelu, gdy ta sesja osiągnie zgłoszony lub szacowany limit kosztów. Domyślnie 10 USD.', 'st.display.cost_total_limit.label': 'Całkowity limit kosztów chmury', 'st.display.cost_total_limit.desc': 'Śledzi zgłoszone lub szacowane wydatki na modele chmury/OpenRouter w całym rozszerzeniu i zatrzymuje dalsze płatne wywołania po osiągnięciu limitu. Dostawcy lokalni nie są liczeni.', 'st.display.cost_reset': 'Zresetuj wydatki', 'st.display.strict_secret.label': 'Ścisłe traktowanie sekretów', - 'st.display.strict_secret.desc': 'Odmawiaj cytowania poświadczeń (hasła, klucze API, tokeny, kody OTP) w podsumowaniach lub tekście asystenta — nawet gdy o nie wprost poprosisz. Przydatne, jeśli regularnie udostępniasz pliki śladów lub ekran. Domyślnie wyłączone, dzięki czemu agent może powtórzyć dokładną wartość, o którą poprosisz, gdy jej potrzebujesz. Włącz je (Ustawienia → Bezpieczeństwo), gdy chcesz, aby podsumowania `done` pozostały uporządkowane, a poświadczenia nigdy nie były powtarzane.', + 'st.display.strict_secret.desc': 'Odmawiaj cytowania poświadczeń (hasła, klucze API, tokeny, kody OTP) w podsumowaniach lub tekście asystenta — nawet gdy o nie wprost poprosisz. Przydatne, jeśli regularnie udostępniasz pliki śladów lub ekran. Domyślnie wyłączone, dzięki czemu agent może powtórzyć dokładną wartość, o którą poprosisz, gdy jej potrzebujesz. Włącz je, gdy chcesz, aby podsumowania `done` pozostały uporządkowane, a poświadczenia nigdy nie były powtarzane.', 'st.display.allow_local_network.label': 'Zezwól agentowi na dostęp do sieci lokalnej', 'st.display.allow_local_network.desc': 'Pozwala narzędziu fetch_url agenta sięgać do pętli zwrotnej (127.0.0.1, localhost) i adresów prywatnych/RFC1918 (10.x, 192.168.x, 172.16–31.x). Przydatne dla lokalnych serwerów deweloperskich, narzędzi intranetowych lub samodzielnie hostowanych API. Domyślnie wyłączone. Gdy opcja jest wyłączona, blokowane są URL z wpisanym bezpośrednio prywatnym adresem IP lub adresem pętli zwrotnej oraz nazwy localhost. Rozwiązywanie DNS nie jest sprawdzane, więc inne nazwy hostów mogą nadal prowadzić do adresów lokalnych. Dosłowne adresy IP metadanych chmury (169.254.169.254) i nazwy metadanych z listy lub *.internal/*.local pozostają zablokowane także po włączeniu.', 'st.display.scheduled_tasks.label': 'Zaplanowane zadania', @@ -889,8 +886,8 @@ export default { 'sp.slash.busy_only_oob': 'Wiadomości są kolejkowane, gdy WebBrain jest zajęty. Tylko /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces i /verbose mogą uruchamiać się od razu jako polecenia slash.', 'tool.go_back': 'Cofanie', 'tool.go_forward': 'Przechodzenie do przodu', - 'st.display.search.placeholder': 'Szukaj w ustawieniach ogólnych', - 'st.display.search.empty': 'Brak pasujących ustawień ogólnych.', + 'st.display.search.placeholder': 'Szukaj w ustawieniach', + 'st.display.search.empty': 'Brak pasujących ustawień.', 'st.display.advanced': 'Zaawansowane', ...getApocalypseModeCopy('pl'), ...getEmergencyBoxCopy('pl'), @@ -1138,7 +1135,6 @@ export default { "st.imageBudget.maxDimension.desc": "Najdłuższy bok (szerokość lub wysokość) w pikselach dla każdego zrzutu wysyłanego do vision. Niższy limit zmniejsza obrazy przed wysłaniem, tnąc tokeny i koszt. Wyższy limit zachowuje wierność.", "st.imageBudget.warning": "⚠️ Te ustawienia dotyczą zrzutów na vision (auto-zrzut, /screenshot, cała strona, verify_form). Ręcznie zapisane obrazy w pełnej rozdzielczości nie są objęte. «Image detail» honorują endpointy w stylu OpenAI; inni dostawcy mogą to ignorować.", - "st.redaction.heading": "Redakcja zrzutów ekranu", "st.redaction.toggle.label": "Redaguj poufną treść na zrzutach ekranu", "st.redaction.toggle.desc": "Zanim zrzut ekranu zostanie wysłany do modelu wizyjnego, rozmywa pola formularzy oraz tekst wyglądający jak e-mail lub numer telefonu. Wykrywanie działa całkowicie na Twoim urządzeniu — nic dodatkowego nie jest przesyłane.", "st.redaction.warning": "⚠️ To redakcja typu best-effort i fail-open: jeśli redakcja nie może zadziałać na danej stronie (np. tuż po nawigacji, w przeglądarkach PDF lub na ograniczonych stronach przeglądarki), zrzut ekranu i tak zostanie wysłany bez redakcji. Wykrywanie opiera się wyłącznie na heurystykach DOM — tekst narysowany na canvasie, dane osobowe wewnątrz obrazów lub cokolwiek nierozpoznanego jako pole formularza czy tekst e-mail/telefon może zostać pominięte, a tekst strony wysyłany do modelu nie jest redagowany przez to ustawienie. To NIE jest gwarancja bezpieczeństwa. Dla pełnej prywatności użyj lokalnego/offline'owego modelu (llama.cpp, Ollama): wtedy zrzuty ekranu nigdy nie opuszczają Twojego urządzenia, a redakcja przestaje być potrzebna.", @@ -1152,7 +1148,7 @@ export default { "sp.slash.export_traces_full": "Eksportuj całą zapisaną sesję śledzenia jako JSON, wraz ze zrzutami ekranu", "sp.export_traces.recording_truncated": "Wyeksportowano wszystkie zapisane rekordy jako JSON. Treści pominiętych podczas rejestrowania nie można odzyskać przez eksport.", "sp.slash.export_traces": "Eksportuj łańcuch narzędzi (ślady)", - "sp.export_traces.none": "Brak śladów dla tej rozmowy. Włącz „Rejestruj ślady\" w Ustawieniach i uruchom ponownie.", + "sp.export_traces.none": "Brak śladów dla tej rozmowy. Włącz „Rejestruj ślady\" w Ustawieniach → Zaawansowane i uruchom ponownie.", "sp.export_traces.error": "Nie udało się wyeksportować śladów.", "sp.export_traces.done": "Wyeksportowano łańcuch narzędzi.", "sp.export_traces.no_conversation": "Nie ma jeszcze nic do eksportu — najpierw rozpocznij rozmowę.", @@ -1160,7 +1156,7 @@ export default { "sp.export_traces.truncated": "Wyeksportowano łańcuch narzędzi. Starsze tury mogą brakować, jeśli ta rozmowa ma wiele śladów.", "st.display.help_improve.label": "Pomóż ulepszać WebBrain", "st.display.help_improve.desc_html": "Zezwól na przechowywanie wybranych interakcji z WebBrain Compass i używanie ich do oceny, ulepszania, dostrajania i trenowania. Domyślnie włączone. Wyłącz, aby przyszłe interakcje Compass nie były używane do tych celów. WebBrain zbiera żądania modeli lokalnych i własnych API wyłącznie od dostawców, u których włączysz „Udostępniaj zapytania do badań”. Polityka prywatności →", - "st.providers.webbrain_data_use.body": "Darmowe dzienne korzystanie z WebBrain Compass jest wliczone. Gdy opcja „Pomóż ulepszać WebBrain” jest domyślnie włączona, wybrane rozmowy Compass mogą być przechowywane i używane do oceny, ulepszania, dostrajania i trenowania. Wyłącz ją w Ogólne → Zaawansowane, aby wykluczyć przyszłe interakcje Compass z tych zastosowań. WebBrain zbiera żądania modeli lokalnych i własnych API tylko wtedy, gdy włączysz opcję „Udostępniaj zapytania do badań” dla danego dostawcy. {privacyLink}. Aby korzystać więcej, subskrybuj na {subscribeLink}. Zarządzaj rozliczeniami na {accountLink}.", + "st.providers.webbrain_data_use.body": "Darmowe dzienne korzystanie z WebBrain Compass jest wliczone. Gdy opcja „Pomóż ulepszać WebBrain” jest domyślnie włączona, wybrane rozmowy Compass mogą być przechowywane i używane do oceny, ulepszania, dostrajania i trenowania. Wyłącz ją w Ustawienia → Zaawansowane, aby wykluczyć przyszłe interakcje Compass z tych zastosowań. WebBrain zbiera żądania modeli lokalnych i własnych API tylko wtedy, gdy włączysz opcję „Udostępniaj zapytania do badań” dla danego dostawcy. {privacyLink}. Aby korzystać więcej, subskrybuj na {subscribeLink}. Zarządzaj rozliczeniami na {accountLink}.", 'st.providers.share_research.label': "Udostępniaj zapytania do badań", 'st.providers.share_research.hint': "Wysyła prompty i odpowiedzi tego dostawcy do WebBrain w celu oceny i ulepszania, wraz z nazwą dostawcy i modelu. Obrazy i załączniki binarne są usuwane, a tekst jest przycinany przed udostępnieniem; pozostały tekst jest wysyłany bez zmian.", 'st.providers.share_research.confirm': "Udostępniać zapytania tego dostawcy WebBrain do badań?\n\nPo włączeniu Twoje prompty, odpowiedzi i interakcje narzędzi z tym dostawcą będą wysyłane do WebBrain w celu oceny i ulepszania, wraz z nazwą dostawcy i modelu. Tekst jest wysyłany bez zmian po usunięciu obrazów i przycięciu długich treści, dlatego unikaj udostępniania wrażliwych danych osobowych. Możesz to w każdej chwili wyłączyć, aby zatrzymać udostępnianie.", @@ -1175,7 +1171,7 @@ export default { "sp.perm.skip_hint": "Chcesz mniej przerw? „Zawsze zezwalaj” zapamiętuje tę witrynę. Poniższe polecenie wyłącza pytania WebBrain o uprawnienia we wszystkich witrynach.", "sp.perm.insert_skip_command": "Wstaw /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Szkic pozostał bez zmian. Wyczyść go przed wstawieniem polecenia.", - "ob.act.permissions_tip": "Pytania o uprawnienia są domyślnie włączone. Zaawansowani użytkownicy mogą wyłączyć je globalnie poleceniem /dangerously-skip-permissions i ponownie włączyć w Ustawienia → Uprawnienia.", + "ob.act.permissions_tip": "Pytania o uprawnienia są domyślnie włączone. Zaawansowani użytkownicy mogą wyłączyć je globalnie poleceniem /dangerously-skip-permissions i ponownie włączyć przyciskiem ⚠ obok mikrofonu.", 'st.provider.field.cache_read_cost_per_million': "Szacowany koszt odczytu z pamięci podręcznej ($ / 1M tokenów)", 'st.provider.field.cache_write_cost_per_million': "Szacowany koszt zapisu do pamięci podręcznej (5 min) ($ / 1M tokenów)", 'st.provider.field.cache_write_1h_cost_per_million': "Szacowany koszt zapisu do pamięci podręcznej (1 godz.) ($ / 1M tokenów)", @@ -1237,7 +1233,7 @@ export default { "st.sync.confirm.reset": "Zastąpić zaszyfrowaną kopię w chmurze bieżącą konfiguracją WebBrain tego urządzenia?", "st.sync.consent.legacy": "Włączyć szyfrowaną synchronizację? WebBrain prześle kompleksowo zaszyfrowaną kopię Twoich wspomnień, autouzupełniania profilu i ustawień dostawcy klucza API do WebBrain Compass. Historia czatów i logowania OAuth nie są synchronizowane.", "st.sync.consent.denied": "Nie przyznano zezwolenia na szyfrowaną synchronizację.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Strona zmieniła się podczas wykonywania zadania ({before} → {after}). Zadanie jest kontynuowane.", 'sp.activity.generating_answer': "Generowanie odpowiedzi…", 'sp.activity.retrying_response': "Ponawianie odpowiedzi…", diff --git a/src/firefox/src/ui/locales/pt.js b/src/firefox/src/ui/locales/pt.js index 3771257b90..3057b15bf1 100644 --- a/src/firefox/src/ui/locales/pt.js +++ b/src/firefox/src/ui/locales/pt.js @@ -14,14 +14,6 @@ export default { 'sp.ui_scale.decrease': 'Reduzir o zoom da interface', 'sp.ui_scale.increase': 'Aumentar o zoom da interface', 'sp.ui_scale.reset': 'Redefinir', - 'st.display.ui_scale.label': 'Zoom da interface da extensão', - 'st.display.ui_scale.decrease': 'Reduzir o zoom da interface', - 'st.display.ui_scale.increase': 'Aumentar o zoom da interface', - 'st.display.ui_scale.reset': 'Redefinir', - 'st.display.ui_scale.desc': 'Redimensiona o painel lateral e a janela de chat independente sem alterar o zoom da página.', - 'st.display.ui_scale.shortcuts': 'Atalhos dedicados: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Não atribuído', - 'st.display.ui_scale.manage_shortcuts': 'Personalizar atalhos', 'tool.delegate_research': 'Pesquisando com ChatGPT', 'st.display.research_escalation.label': 'Escalonamento de pesquisa', 'st.display.research_escalation.desc': 'Quando ativado, o WebBrain pode pedir permissão antes de enviar ao ChatGPT uma solicitação de pesquisa somente leitura incomumente complexa. Desativado por padrão. A solicitação exata só é compartilhada após sua aprovação explícita.', @@ -497,7 +489,7 @@ export default { 'sp.step.result_label': "Resultado", 'sp.api.enabled_html': "🔓 Mutações de API ativadas para esta conversa. O agente agora pode usar POST/PUT/PATCH/DELETE via fetch_url e execute_js quando julgar que a API é mais confiável do que a UI para uma etapa. UI-first continua sendo o padrão. Esse sinalizador é apagado quando você reinicia a conversa.", - 'sp.permissions.disabled_html': "⚠️ Os prompts de permissão estão DESATIVADOS. WebBrain clicará, digitará, navegará, executará JavaScript, fará upload, baixará, gravará e agendará trabalhos futuros sem perguntar primeiro. Reative isso em Configurações → Permissões → Perguntar antes de ações consequentes.", + 'sp.permissions.disabled_html': "⚠️ Os prompts de permissão estão DESATIVADOS. WebBrain clicará, digitará, navegará, executará JavaScript, fará upload, baixará, gravará e agendará trabalhos futuros sem perguntar primeiro. Reative isso no botão ⚠ ao lado do microfone.", 'sp.permissions.button': 'Prompts de permissão: ativados', 'sp.permissions.button_off': 'Prompts de permissão: desativados', 'sp.permissions.gate_desc': 'O WebBrain pergunta na primeira vez que clica, digita, baixa arquivos ou executa código em um site.', @@ -655,7 +647,7 @@ export default { 'ob.act.warn1': "WebBrain pode capturar capturas de tela para planejamento. Evite usar o modo agente em páginas confidenciais, como portais de saúde, finanças, namoro ou contas privadas, a menos que você aceite esse risco.", 'ob.act.warn2': "O conteúdo da Web pode conter injeções de alerta maliciosas projetadas para manipular o comportamento da IA.", 'ob.act.warn3': "Sempre revise as ações sugeridas e interrompa execuções que pareçam inesperadas.", - 'ob.act.permissions_tip': "Os prompts de permissão estão ativados por padrão. Usuários avançados podem desativá-los globalmente com /dangerously-skip-permissions e reativá-los em Configurações → Permissões.", + 'ob.act.permissions_tip': "Os prompts de permissão estão ativados por padrão. Usuários avançados podem desativá-los globalmente com /dangerously-skip-permissions e reativá-los no botão ⚠ ao lado do microfone.", 'ob.tokens.title': "Escolha um modelo", 'ob.tokens.body': "WebBrain precisa de um modelo de linguagem para funcionar. Verificaremos primeiro os modelos locais. Se nenhum estiver disponível, abra Configurações e adicione um provedor:", 'ob.tokens.scanning': "Verificando modelos locais...", @@ -681,23 +673,32 @@ export default { 'ob.btn.done': "Comece", 'ob.btn.skip': "Pular por enquanto", 'ob.btn.start': 'Iniciar', - 'ob.cloud.body': 'WebBrain Compass está pronto com uma alocação semanal gratuita. Conversas selecionadas do Compass podem ser retidas e usadas para melhorar o WebBrain enquanto Ajuda a Melhorar o WebBrain está ativado por padrão. Você pode desativá-lo em Configurações → Geral.', + 'ob.cloud.body': 'WebBrain Compass está pronto com uma alocação semanal gratuita. Conversas selecionadas do Compass podem ser retidas e usadas para melhorar o WebBrain enquanto Ajuda a Melhorar o WebBrain está ativado por padrão. Você pode desativá-lo em Configurações → Avançado.', 'ob.cloud.change': 'Alterar', 'ob.cloud.using': 'Usando WebBrain Compass.', // --- Settings ---------------------------------------------------------- 'st.title': "Configurações WebBrain", - 'st.subtitle': "Configure seus provedores e preferências de LLM · v{version}", + 'st.subtitle': "Configure como o WebBrain funciona · v{version}", 'st.tab.display': "Geral", + 'st.tab.budgets': 'Orçamentos', + 'st.tab.advanced': 'Avançado', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Fala', + 'st.tab.generative': 'Generativo', + 'st.tab.decision': 'Decisão', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Provedores do WebBrain', + 'st.providers_page.subtitle': 'Escolha os modelos que o WebBrain usa · v{version}', + 'st.permissions_page.title': 'Permissões do WebBrain', + 'st.permissions_page.subtitle': 'Sites onde o WebBrain pode agir sem perguntar antes', 'st.tab.providers': "Provedores", 'st.tab.skills': "Habilidades", 'st.tab.vision': "Visão", - 'st.tab.multimodal': "Modelos auxiliares", 'st.tab.memory': "Memória", 'st.tab.profile': "Perfil", 'st.tab.account': "Conta", 'st.tab.captcha': "CAPTCHA", - 'st.tab.permissions': "Permissões", 'st.perms.gate.label': "Pergunte antes de ações consequentes", 'st.perms.gate.desc': "Recomendado. Quando ativado, WebBrain pede permissão na primeira vez que clica, digita, navega, executa JavaScript, carrega, baixa, registra ou agenda trabalhos futuros em um site (depois lembra sua escolha). Desligue para uso rápido e gratuito em sites em que você confia totalmente.", @@ -719,8 +720,6 @@ export default { "st.account.update_payment": "Atualizar método de pagamento", 'st.account.manage_billing': "Gerenciar faturamento", - 'st.display.language.label': "Idioma", - 'st.display.language.desc': "Linguagem de interface para o plugin WebBrain.", 'st.display.theme.label': "Aparência", 'st.display.theme.desc': "Claro, escuro ou siga a configuração do seu sistema operacional.", 'st.display.theme.system': "Sistema", @@ -730,8 +729,8 @@ export default { 'st.display.download_directory.desc': "Subpasta opcional dentro do seu navegador ou diretório de downloads do sistema. Deixe em branco para usar o padrão do sistema.", 'st.display.download_directory.placeholder': "Padrão do sistema", 'st.display.download_directory.error': "Use uma pasta relativa como WebBrain ou Work/WebBrain. Caminhos absolutos e “..” não são permitidos.", - 'st.display.search.placeholder': "Pesquisar configurações gerais", - 'st.display.search.empty': "Nenhuma configuração geral corresponde.", + 'st.display.search.placeholder': "Pesquisar configurações", + 'st.display.search.empty': "Nenhuma configuração corresponde.", 'st.display.advanced': "Avançado", ...getApocalypseModeCopy('pt'), ...getEmergencyBoxCopy('pt'), @@ -787,20 +786,18 @@ export default { 'st.display.auto_screenshot.label': "Captura de tela automática", "st.display.auto_screenshot.desc": "Capture automaticamente a janela de visualização depois que o agente atuar na página, para que a rota de visão selecionada veja o que mudou. Isso consome mais tokens. Se a visão estiver indisponível, o enriquecimento será ignorado e a tarefa continuará com um aviso de status.", 'st.display.auto_screenshot.off': "Desligado", - 'st.display.auto_screenshot.navigation': "Na navegação", - 'st.display.auto_screenshot.state_change': "Na mudança de estado (padrão)", + 'st.display.auto_screenshot.navigation': "Na navegação (padrão)", + 'st.display.auto_screenshot.state_change': "Na mudança de estado", 'st.display.auto_screenshot.every_step': "Cada passo", 'st.display.tracing.label': "Registrar rastreamentos (para comparação de modelos)", - 'st.display.tracing.desc_html': "Persista cada execução (solicitações LLM, respostas, chamadas de ferramentas, capturas de tela) no IndexedDB local para que você possa inspecionar e comparar modelos lado a lado. Abre em uma guia Traces separada. Desativado por padrão porque adiciona gravações de disco por etapa. Abra a página Traces →", - 'st.display.lossless_tracing.label': 'Registrar detalhes completos da solicitação (nível de depuração)', - 'st.display.lossless_tracing.desc_html': 'Também persiste os prompts, mensagens e esquemas de ferramentas completos de cada solicitação LLM em vez de resumos sem conteúdo, e mantém até 200 KB de cada resultado de ferramenta. Permite depuração profunda e reconstrução de solicitações. Desativado por padrão porque grava o conteúdo da sua conversa localmente e usa muito mais disco. Exige que o registro de rastros esteja ativado.', + 'st.display.tracing.desc_html': "Persista cada execução (solicitações LLM, respostas, chamadas de ferramentas, capturas de tela) no IndexedDB local para que você possa inspecionar e comparar modelos lado a lado, incluindo os prompts, mensagens e esquemas de ferramentas completos de cada solicitação LLM e até 200 KB de cada resultado de ferramenta. Abre em uma guia Traces separada. Desativado por padrão porque grava o conteúdo da sua conversa localmente e usa muito mais disco. Abra a página Traces →", 'st.display.cost_session_limit.label': "Subsídio de sessão de custo na nuvem", 'st.display.cost_session_limit.desc': "Interrompe a nuvem e OpenRouter é executado antes de outra chamada de modelo pago quando esta sessão atinge o limite de custo relatado ou estimado. Padrão $ 10.", 'st.display.cost_total_limit.label': "Permissão total de custos de nuvem", 'st.display.cost_total_limit.desc': "Rastreia os gastos relatados ou estimados do modelo de nuvem/OpenRouter em todo o ramal e interrompe outras chamadas pagas no limite. Os provedores locais não são contabilizados.", 'st.display.cost_reset': "Redefinir gastos", 'st.display.strict_secret.label': "Tratamento estrito de segredos", - 'st.display.strict_secret.desc': "Recuse-se a citar credenciais (senhas, chaves de API, tokens, OTPs) em resumos ou textos de assistente – mesmo quando você as solicitar explicitamente. Útil se você compartilha regularmente arquivos de rastreamento ou compartilhamento de tela. Desativado por padrão para que o agente possa repetir o valor exato que você pedir quando precisar. Ative-o (Configurações → Segurança) quando quiser manter os resumos `done` organizados e evitar que credenciais sejam repetidas.", + 'st.display.strict_secret.desc': "Recuse-se a citar credenciais (senhas, chaves de API, tokens, OTPs) em resumos ou textos de assistente – mesmo quando você as solicitar explicitamente. Útil se você compartilha regularmente arquivos de rastreamento ou compartilhamento de tela. Desativado por padrão para que o agente possa repetir o valor exato que você pedir quando precisar. Ative-o quando quiser manter os resumos `done` organizados e evitar que credenciais sejam repetidas.", 'st.display.allow_local_network.label': "Permitir que o agente acesse a rede local", 'st.display.allow_local_network.desc': "Permite que a ferramenta fetch_url do agente alcance loopback (127.0.0.1, localhost) e endereços privados/RFC1918 (10.x, 192.168.x, 172.16–31.x). Útil para servidores de desenvolvimento locais, ferramentas de intranet ou APIs auto-hospedadas. Desativado por padrão. Quando desativado, URLs com IPs privados ou de loopback escritos diretamente e nomes localhost são bloqueados. A resolução DNS não é verificada, então outros nomes de host ainda podem alcançar endereços locais. IPs literais de metadados da nuvem (169.254.169.254) e nomes de metadados listados ou *.internal/*.local continuam bloqueados mesmo quando ativado.", 'st.display.scheduled_tasks.label': "Tarefas agendadas", @@ -890,7 +887,7 @@ export default { 'st.providers.compat.value.max': "Máx.", 'st.providers.compat.value.system': "Sistema", 'st.providers.compat.value.developer': "Desenvolvedor", - 'st.providers.webbrain_data_use.body': "O uso diário gratuito do WebBrain Compass está incluído. Embora Ajudar a melhorar WebBrain esteja ativado por padrão, conversas selecionadas no Compass podem ser retidas e usadas para avaliação, melhoria, ajuste fino e treinamento. Desative-o em Geral → Avançado para excluir futuras interações no Compass desses usos. A WebBrain só coleta solicitações de modelos locais e de suas próprias APIs quando você ativa a opção “Compartilhar consultas para pesquisa” desse provedor. {privacyLink}. Para mais uso, assine em {subscribeLink}. Gerencie o faturamento em {accountLink}.", + 'st.providers.webbrain_data_use.body': "O uso diário gratuito do WebBrain Compass está incluído. Embora Ajudar a melhorar WebBrain esteja ativado por padrão, conversas selecionadas no Compass podem ser retidas e usadas para avaliação, melhoria, ajuste fino e treinamento. Desative-o em Configurações → Avançado para excluir futuras interações no Compass desses usos. A WebBrain só coleta solicitações de modelos locais e de suas próprias APIs quando você ativa a opção “Compartilhar consultas para pesquisa” desse provedor. {privacyLink}. Para mais uso, assine em {subscribeLink}. Gerencie o faturamento em {accountLink}.", 'st.providers.share_research.label': "Compartilhar consultas para pesquisa", 'st.providers.share_research.hint': "Envia os prompts e respostas deste provedor à WebBrain para avaliação e melhoria, incluindo o provedor e o modelo usados. Imagens e anexos binários são removidos e o texto é truncado antes do compartilhamento; o restante do texto é enviado como está.", 'st.providers.share_research.confirm': "Compartilhar as consultas deste provedor com a WebBrain para pesquisa?\n\nQuando ativado, seus prompts, respostas e interações de ferramentas com este provedor serão enviados à WebBrain para avaliação e melhoria, junto com o nome do provedor e do modelo. O texto é enviado como está após remover imagens e truncar conteúdos longos, portanto evite compartilhar dados pessoais sensíveis. Você pode desativar a qualquer momento para interromper o compartilhamento.", @@ -1035,7 +1032,6 @@ export default { // Screenshot redaction (issue #312): local, best-effort PII blurring that // runs in-browser before any screenshot reaches a vision model. - 'st.redaction.heading': "Redação de captura de tela", 'st.redaction.toggle.label': "Editar conteúdo confidencial de capturas de tela", 'st.redaction.toggle.desc': "Antes de uma captura de tela ser enviada para um modelo de visão, desfoque os campos do formulário e o texto que se parece com um e-mail ou número de telefone. A detecção é executada inteiramente no seu dispositivo – nada extra é transmitido.", 'st.redaction.warning': "⚠️ Melhor esforço e falha na abertura: se a redação não puder ser executada em uma página (por exemplo, logo após uma navegação, em visualizadores de PDF ou em páginas restritas do navegador), a captura de tela ainda será enviada sem edição. A detecção usa apenas heurística DOM – texto desenhado em tela, PII dentro de imagens ou qualquer coisa não reconhecida como um campo de formulário ou texto de e-mail/telefone pode passar despercebido e o texto da página enviado ao modelo não é editado por esta configuração. NÃO é uma garantia de segurança. Para total privacidade, use um modelo local/offline (llama.cpp, Ollama): as capturas de tela nunca saem da sua máquina e a redação é desnecessária.", @@ -1223,7 +1219,7 @@ export default { "sp.slash.export_traces_full": "Exportar toda a sessão de rastreamento salva como JSON, incluindo capturas de tela", "sp.export_traces.recording_truncated": "Todos os registros salvos foram exportados como JSON. O conteúdo omitido durante a gravação não pode ser recuperado pela exportação.", "sp.slash.export_traces": "Exportar a cadeia de ferramentas (traços)", - "sp.export_traces.none": "Não há vestígios desta conversa. Habilite Gravar rastreamentos em Configurações e execute novamente.", + "sp.export_traces.none": "Não há vestígios desta conversa. Habilite Gravar rastreamentos em Configurações → Avançado e execute novamente.", "sp.export_traces.error": "Não foi possível exportar rastreamentos.", "sp.export_traces.done": "Cadeia de ferramentas exportada.", "sp.export_traces.no_conversation": "Nada para exportar ainda – inicie uma conversa primeiro.", @@ -1297,7 +1293,7 @@ export default { "st.sync.confirm.reset": "Substituir a cópia criptografada na nuvem pela configuração atual do WebBrain deste dispositivo?", "st.sync.consent.legacy": "Ativar a sincronização criptografada? O WebBrain transmitirá uma cópia criptografada de ponta a ponta de suas memórias, preenchimento automático de perfil e configurações do provedor de chave API para o WebBrain Compass. O histórico de bate-papo e os logins do OAuth não são sincronizados.", "st.sync.consent.denied": "A permissão de sincronização criptografada não foi concedida.", - 'st.providers.webgpu_note.body': '{modelLink} é executado inteiramente no Chrome, sem endpoint de API. Baixe-o em Settings > Providers > WebGPU ou no Modo Apocalipse e use o controle nuclear no standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} é executado inteiramente no Chrome, sem endpoint de API. Baixe-o em Providers > WebGPU ou no Modo Apocalipse e use o controle nuclear no standalone chat.', 'sp.monitor.navigation': "A página mudou enquanto a tarefa estava em execução ({before} → {after}). A tarefa continua.", 'sp.activity.generating_answer': "Gerando resposta…", 'sp.activity.retrying_response': "Tentando novamente a resposta…", diff --git a/src/firefox/src/ui/locales/ru.js b/src/firefox/src/ui/locales/ru.js index 7ecf35c259..98e1562670 100644 --- a/src/firefox/src/ui/locales/ru.js +++ b/src/firefox/src/ui/locales/ru.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Уменьшить интерфейс расширения', 'sp.ui_scale.increase': 'Увеличить интерфейс расширения', 'sp.ui_scale.reset': 'Сбросить', - 'st.display.ui_scale.label': 'Масштаб интерфейса расширения', - 'st.display.ui_scale.decrease': 'Уменьшить интерфейс расширения', - 'st.display.ui_scale.increase': 'Увеличить интерфейс расширения', - 'st.display.ui_scale.reset': 'Сбросить', - 'st.display.ui_scale.desc': 'Изменяет размер боковой панели и отдельного окна чата, не меняя масштаб страницы.', - 'st.display.ui_scale.shortcuts': 'Специальные сочетания клавиш: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Не назначено', - 'st.display.ui_scale.manage_shortcuts': 'Настроить сочетания клавиш', 'tool.delegate_research': 'Исследование в ChatGPT', 'st.display.research_escalation.label': 'Эскалация исследований', 'st.display.research_escalation.desc': 'Если функция включена, WebBrain может запросить разрешение перед отправкой в ChatGPT необычно сложного исследовательского запроса только для чтения. По умолчанию выключено. Точный запрос передаётся только после вашего явного согласия.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Не продолжать", "sp.recipient.reason_unrequested": "WebBrain не смог понять из вашего запроса, что нужно отправить сообщение. Открытый диалог на {host}: {recipient}.", "sp.recipient.reason_unnamed": "WebBrain не смог понять из вашего запроса, кому отправить это сообщение. Открытый диалог на {host}: {recipient}.", - 'st.tab.permissions': "Разрешения", 'st.perms.revoke': "Отозвать", 'st.perms.clear_all': "Очистить все разрешения", 'st.perms.gate.label': "Спрашивать перед важными действиями", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Начать', 'ob.btn.skip': 'Пропустить пока', 'ob.btn.start': 'Начать', - 'ob.cloud.body': 'WebBrain Compass готов с бесплатным дневным лимитом. Выбранные разговоры Compass могут быть сохранены и использованы для улучшения WebBrain, пока Помощь в улучшении WebBrain включена по умолчанию. Вы можете отключить это в Настройки → Основное.', + 'ob.cloud.body': 'WebBrain Compass готов с бесплатным дневным лимитом. Выбранные разговоры Compass могут быть сохранены и использованы для улучшения WebBrain, пока Помощь в улучшении WebBrain включена по умолчанию. Вы можете отключить это в Настройки → Расширенные.', 'ob.cloud.change': 'Изменить', 'ob.cloud.using': 'Используется WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Результат', 'sp.api.enabled_html': '🔓 Изменения через API включены для этого диалога. Агент теперь может использовать POST/PUT/PATCH/DELETE через fetch_url и execute_js, если посчитает API надёжнее интерфейса. По умолчанию используется интерфейс. Этот флаг сбрасывается при очистке диалога.', - 'sp.permissions.disabled_html': '⚠️ Запросы разрешений отключены. WebBrain будет нажимать, печатать, переходить, запускать JavaScript, загружать, скачивать, записывать и запланировывать будущие задачи без предварительного запроса. Включите снова в Настройки → Разрешения → Спрашивать перед важными действиями.', + 'sp.permissions.disabled_html': '⚠️ Запросы разрешений отключены. WebBrain будет нажимать, печатать, переходить, запускать JavaScript, загружать, скачивать, записывать и запланировывать будущие задачи без предварительного запроса. Включите снова кнопкой ⚠ рядом с микрофоном.', 'sp.permissions.button': 'Запросы разрешений: включены', 'sp.permissions.button_off': 'Запросы разрешений: отключены', 'sp.permissions.gate_desc': 'WebBrain спрашивает, когда впервые нажимает, вводит текст, скачивает файлы или запускает код на сайте.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Ожидание «{selector}»', 'st.title': 'Настройки WebBrain', - 'st.subtitle': 'Настройте провайдеров LLM и параметры · v{version}', + 'st.subtitle': 'Настройте работу WebBrain · v{version}', 'st.tab.display': 'Общие', + 'st.tab.budgets': 'Бюджеты', + 'st.tab.advanced': 'Расширенные', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Речь', + 'st.tab.generative': 'Генерация', + 'st.tab.decision': 'Решения', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Провайдеры WebBrain', + 'st.providers_page.subtitle': 'Выберите модели, которые использует WebBrain · v{version}', + 'st.permissions_page.title': 'Разрешения WebBrain', + 'st.permissions_page.subtitle': 'Сайты, где WebBrain может действовать, не спрашивая заранее', 'st.tab.providers': 'Провайдеры', 'st.tab.vision': 'Зрение', 'st.tab.profile': 'Профиль', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "Обновить способ оплаты", 'st.account.manage_billing': 'Управление оплатой', - 'st.display.language.label': 'Язык', - 'st.display.language.desc': 'Язык интерфейса плагина WebBrain.', 'st.display.verbose.label': 'Подробный режим', 'st.display.verbose.desc': 'Показывать полные детали вызовов инструментов, аргументы и сырой JSON-результат. По умолчанию выключено для более чистого чата.', 'st.display.selection_shortcut.label': 'Быстрое действие для выделения', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Авто-скриншот', "st.display.auto_screenshot.desc": "Автоматически делайте снимок области просмотра после действий агента, чтобы выбранный маршрут обработки изображений видел изменения. Это расходует больше токенов. Если зрение недоступно, обогащение пропускается, а задача продолжается с уведомлением о состоянии.", 'st.display.auto_screenshot.off': 'Выкл.', - 'st.display.auto_screenshot.navigation': 'При навигации', - 'st.display.auto_screenshot.state_change': 'При изменении состояния (по умолчанию)', + 'st.display.auto_screenshot.navigation': 'При навигации (по умолчанию)', + 'st.display.auto_screenshot.state_change': 'При изменении состояния', 'st.display.auto_screenshot.every_step': 'Каждый шаг', 'st.display.tracing.label': 'Записывать трассы (для сравнения моделей)', - 'st.display.tracing.desc_html': 'Сохранять каждый запуск (LLM-запросы, ответы, вызовы инструментов, скриншоты) в локальную IndexedDB, чтобы можно было разбирать и сравнивать модели бок о бок. Открывается в отдельной вкладке «Трассы». По умолчанию выключено, потому что добавляет запись на диск на каждом шаге. Открыть страницу трасс →', - 'st.display.lossless_tracing.label': 'Записывать полные детали запросов (отладочный уровень)', - 'st.display.lossless_tracing.desc_html': 'Также сохраняет полные промпты, сообщения и схемы инструментов каждого LLM-запроса вместо кратких сводок без содержимого, и хранит до 200 КБ каждого результата инструмента. Позволяет глубокую отладку и восстановление запросов. Выключено по умолчанию, так как записывает содержимое вашего диалога локально и занимает заметно больше места. Требует включённой записи трасс.', + 'st.display.tracing.desc_html': 'Сохранять каждый запуск (LLM-запросы, ответы, вызовы инструментов, скриншоты) в локальную IndexedDB, чтобы можно было разбирать и сравнивать модели бок о бок, включая полные промпты, сообщения и схемы инструментов каждого LLM-запроса и до 200 КБ каждого результата инструмента. Открывается в отдельной вкладке «Трассы». По умолчанию выключено, так как записывает содержимое вашего диалога локально и занимает заметно больше места. Открыть страницу трасс →', 'st.display.allow_local_network.label': 'Разрешить агенту доступ к локальной сети', 'st.display.allow_local_network.desc': 'Разрешает инструменту fetch_url агента обращаться к loopback (127.0.0.1, localhost) и частным адресам RFC1918 (10.x, 192.168.x, 172.16–31.x). Полезно для локальных серверов разработки, интранет-инструментов и self-hosted API. По умолчанию выключено. В этом состоянии блокируются URL с явно записанными частными или loopback IP-адресами и имена localhost. Результат DNS не проверяется, поэтому другие имена хостов могут вести к локальным адресам. IP-адреса метаданных облака, записанные явно (169.254.169.254), и перечисленные имена метаданных или *.internal/*.local остаются заблокированы даже при включении.', 'st.display.notify_sound.label': "Звуки уведомлений", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Режим зрения включён для активного провайдера.", "sp.vision.off": "Режим зрения выключен для активного провайдера.", "sp.vision.error": "Не удалось переключить зрение: {msg}", - "st.tab.multimodal": "Вспомогательные модели", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Рекомендуется. Когда включено, WebBrain спрашивает разрешение при первом нажатии, вводе, переходе, запуске JavaScript, загрузке, скачивании или записи на сайте (а затем запоминает ваш выбор). Выключите для быстрой работы без запросов на сайтах, которым вы полностью доверяете.", "st.perms.gate.warning": "⚠️ Запросы на разрешения ВЫКЛЮЧЕНЫ. WebBrain будет нажимать, вводить текст, переходить, запускать JavaScript, загружать, скачивать и записывать на любом сайте БЕЗ запроса — в том числе на страницах, содержимое которых может контролироваться злоумышленником. Содержимое страниц по-прежнему считается недоверенным внутри системы, но ничто не помешает внедрённой инструкции запустить действие. Оставляйте это выключенным, только если полностью доверяете каждому сайту, на котором используете ассистента.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Системное значение", "st.display.download_directory.error": "Используйте относительную папку, например WebBrain или Work/WebBrain. Абсолютные пути и «..» не допускаются.", "st.display.strict_secret.label": "Строгая обработка секретов", - "st.display.strict_secret.desc": "Отказываться цитировать учётные данные (пароли, API-ключи, токены, OTP) в сводках или тексте ассистента — даже когда вы явно об этом просите. Полезно, если вы регулярно делитесь файлами трасс или демонстрируете экран. По умолчанию выключено, чтобы агент мог при необходимости повторять точное значение, которое вы запросите. Включите (Настройки → Безопасность), когда хотите, чтобы сводки `done` оставались аккуратными, а учётные данные никогда не повторялись.", + "st.display.strict_secret.desc": "Отказываться цитировать учётные данные (пароли, API-ключи, токены, OTP) в сводках или тексте ассистента — даже когда вы явно об этом просите. Полезно, если вы регулярно делитесь файлами трасс или демонстрируете экран. По умолчанию выключено, чтобы агент мог при необходимости повторять точное значение, которое вы запросите. Включите, когда хотите, чтобы сводки `done` оставались аккуратными, а учётные данные никогда не повторялись.", "st.display.request_timeout.label": "Тайм-аут запроса к LLM", "st.display.request_timeout.desc": "Максимальное время ожидания заголовков ответа и каждой паузы между фрагментами потокового ответа. По умолчанию: 120 с. Увеличьте его для медленных локальных моделей, особенно на CPU или с большим контекстом.", "st.providers.filter.all": "Все", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Пока WebBrain занят, сообщения ставятся в очередь. Только /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces и /verbose могут запускаться сразу как slash-команды.', 'tool.go_back': 'Назад', 'tool.go_forward': 'Вперёд', - 'st.display.search.placeholder': 'Поиск в общих настройках', - 'st.display.search.empty': 'Нет совпадений в общих настройках.', + 'st.display.search.placeholder': 'Поиск в настройках', + 'st.display.search.empty': 'Нет совпадающих настроек.', 'st.display.advanced': 'Расширенные', ...getApocalypseModeCopy('ru'), ...getEmergencyBoxCopy('ru'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Наибольшая сторона (ширина или высота) в пикселях для любого скриншота, отправляемого в vision. Меньший предел сжимает изображения до отправки, снижая токены и стоимость. Больший предел сохраняет точность.", "st.imageBudget.warning": "⚠️ Эти настройки применяются к скриншотам для vision (авто-скриншот, /screenshot, вся страница, verify_form). Вручную сохранённые изображения в полном разрешении не затрагиваются. «Image detail» учитывается endpoint’ами в стиле OpenAI; другие провайдеры могут игнорировать.", - "st.redaction.heading": "Редактирование скриншотов", "st.redaction.toggle.label": "Скрывать чувствительный контент на скриншотах", "st.redaction.toggle.desc": "Перед отправкой скриншота модели зрения размывает поля форм и текст, похожий на email или номер телефона. Обнаружение выполняется полностью на вашем устройстве — ничего лишнего не передаётся.", "st.redaction.warning": "⚠️ Работает по принципу «максимум усилий» и fail-open: если редактирование не может выполниться на странице (например, сразу после перехода, в просмотрщиках PDF или на ограниченных страницах браузера), скриншот всё равно отправляется неотредактированным. Обнаружение использует только эвристики DOM — текст, нарисованный на canvas, персональные данные внутри изображений или что-либо, не распознанное как поле формы или текст email/телефона, может остаться незамеченным, а текст страницы, отправляемый модели, этой настройкой не редактируется. Это НЕ гарантия безопасности. Для полной приватности используйте локальную/офлайн-модель (llama.cpp, Ollama): тогда скриншоты вообще не покидают ваше устройство и редактирование не требуется.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "Экспортировать всю сохранённую сессию трассировки в JSON, включая снимки экрана", "sp.export_traces.recording_truncated": "Все сохранённые записи экспортированы в JSON. Содержимое, пропущенное при записи, невозможно восстановить экспортом.", "sp.slash.export_traces": "Экспорт цепочки инструментов (трассировки)", - "sp.export_traces.none": "Нет трассировок для этого разговора. Включите «Записывать трассировки» в настройках и запустите снова.", + "sp.export_traces.none": "Нет трассировок для этого разговора. Включите «Записывать трассировки» в разделе Настройки → Расширенные и запустите снова.", "sp.export_traces.error": "Не удалось экспортировать трассировки.", "sp.export_traces.done": "Цепочка инструментов экспортирована.", "sp.export_traces.no_conversation": "Пока нечего экспортировать — сначала начните разговор.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Цепочка инструментов экспортирована. Старые ходы могут отсутствовать, если у разговора много трассировок.", "st.display.help_improve.label": "Помогать улучшать WebBrain", "st.display.help_improve.desc_html": "Разрешить хранить отдельные взаимодействия с WebBrain Compass и использовать их для оценки, улучшения, тонкой настройки и обучения. Включено по умолчанию. Отключите, чтобы будущие взаимодействия с Compass не использовались для этих целей. WebBrain собирает запросы к локальным моделям и вашим собственным API только от провайдеров, у которых вы включили «Делиться запросами для исследований». Политика конфиденциальности →", - "st.providers.webbrain_data_use.body": "Включён бесплатный ежедневный объём WebBrain Compass. Пока параметр «Помогать улучшать WebBrain» включён по умолчанию, отдельные разговоры в Compass могут храниться и использоваться для оценки, улучшения, тонкой настройки и обучения. Отключите его в разделе «Общие → Расширенные», чтобы исключить будущие взаимодействия с Compass из такого использования. WebBrain собирает запросы к локальным моделям и вашим собственным API, только когда вы включаете опцию «Делиться запросами для исследований» для этого провайдера. {privacyLink}. Для большего объёма оформите подписку на {subscribeLink}. Управляйте оплатой на {accountLink}.", + "st.providers.webbrain_data_use.body": "Включён бесплатный ежедневный объём WebBrain Compass. Пока параметр «Помогать улучшать WebBrain» включён по умолчанию, отдельные разговоры в Compass могут храниться и использоваться для оценки, улучшения, тонкой настройки и обучения. Отключите его в разделе «Настройки → Расширенные», чтобы исключить будущие взаимодействия с Compass из такого использования. WebBrain собирает запросы к локальным моделям и вашим собственным API, только когда вы включаете опцию «Делиться запросами для исследований» для этого провайдера. {privacyLink}. Для большего объёма оформите подписку на {subscribeLink}. Управляйте оплатой на {accountLink}.", 'st.providers.share_research.label': "Делиться запросами для исследований", 'st.providers.share_research.hint': "Отправляет запросы и ответы этого провайдера в WebBrain для оценки и улучшения, включая сведения об используемом провайдере и модели. Изображения и бинарные вложения удаляются, а текст сокращается перед отправкой; остальной текст отправляется как есть.", 'st.providers.share_research.confirm': "Делиться запросами этого провайдера с WebBrain для исследований?\n\nПри включении ваши запросы, ответы и взаимодействия с инструментами этого провайдера будут отправляться в WebBrain для оценки и улучшения вместе с названием провайдера и модели. Текст отправляется как есть после удаления изображений и сокращения длинного содержимого, поэтому не передавайте чувствительные персональные данные. Вы можете отключить это в любое время, чтобы прекратить передачу.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "Хотите меньше прерываний? «Всегда разрешать» запоминает этот сайт. Команда ниже отключает запросы разрешений WebBrain на всех сайтах.", "sp.perm.insert_skip_command": "Вставить /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Черновик не изменён. Очистите его перед вставкой команды.", - "ob.act.permissions_tip": "Запросы разрешений включены по умолчанию. Опытные пользователи могут отключить их глобально командой /dangerously-skip-permissions и снова включить в Настройки → Разрешения.", + "ob.act.permissions_tip": "Запросы разрешений включены по умолчанию. Опытные пользователи могут отключить их глобально командой /dangerously-skip-permissions и снова включить кнопкой ⚠ рядом с микрофоном.", 'st.provider.field.cache_read_cost_per_million': "Расчётная стоимость чтения из кэша ($ / 1 млн токенов)", 'st.provider.field.cache_write_cost_per_million': "Расчётная стоимость записи в кэш на 5 минут ($ / 1 млн токенов)", 'st.provider.field.cache_write_1h_cost_per_million': "Расчётная стоимость записи в кэш на 1 час ($ / 1 млн токенов)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "Заменить зашифрованную облачную копию текущей настройкой WebBrain этого устройства?", "st.sync.consent.legacy": "Включить шифрованную синхронизацию? WebBrain передаст сквозную зашифрованную копию ваших воспоминаний, автозаполнение профиля и настройки поставщика ключей API в WebBrain Compass. История чата и входы по OAuth не синхронизируются.", "st.sync.consent.denied": "Разрешение на зашифрованную синхронизацию не предоставлено.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Страница изменилась во время выполнения задачи ({before} → {after}). Задача продолжается.", 'sp.activity.generating_answer': "Формирование ответа…", 'sp.activity.retrying_response': "Повторная попытка ответа…", diff --git a/src/firefox/src/ui/locales/th.js b/src/firefox/src/ui/locales/th.js index 477e1fa375..25e51d5d79 100644 --- a/src/firefox/src/ui/locales/th.js +++ b/src/firefox/src/ui/locales/th.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'ย่อ UI ของส่วนขยาย', 'sp.ui_scale.increase': 'ขยาย UI ของส่วนขยาย', 'sp.ui_scale.reset': 'รีเซ็ต', - 'st.display.ui_scale.label': 'ซูม UI ของส่วนขยาย', - 'st.display.ui_scale.decrease': 'ย่อ UI ของส่วนขยาย', - 'st.display.ui_scale.increase': 'ขยาย UI ของส่วนขยาย', - 'st.display.ui_scale.reset': 'รีเซ็ต', - 'st.display.ui_scale.desc': 'ปรับขนาดแผงด้านข้างและหน้าต่างแชตแบบแยก โดยไม่เปลี่ยนการซูมหน้าเว็บ', - 'st.display.ui_scale.shortcuts': 'แป้นพิมพ์ลัดเฉพาะ: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'ยังไม่ได้กำหนด', - 'st.display.ui_scale.manage_shortcuts': 'ปรับแต่งแป้นพิมพ์ลัด', 'tool.delegate_research': 'กำลังค้นคว้าด้วย ChatGPT', 'st.display.research_escalation.label': 'การส่งต่อการค้นคว้า', 'st.display.research_escalation.desc': 'เมื่อเปิดใช้ WebBrain อาจขออนุญาตก่อนส่งพรอมต์ค้นคว้าแบบอ่านอย่างเดียวที่ซับซ้อนเป็นพิเศษไปยัง ChatGPT ปิดไว้ตามค่าเริ่มต้น พรอมต์ที่ตรงกันจะถูกแชร์หลังจากคุณอนุมัติอย่างชัดเจนเท่านั้น', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "ไม่ดำเนินการ", "sp.recipient.reason_unrequested": "WebBrain ไม่แน่ใจจากคำขอของคุณว่าต้องส่งข้อความ บทสนทนาที่เปิดอยู่บน {host} คือกับ {recipient}", "sp.recipient.reason_unnamed": "WebBrain ไม่แน่ใจจากคำขอของคุณว่าใครควรได้รับข้อความนี้ บทสนทนาที่เปิดอยู่บน {host} คือกับ {recipient}", - 'st.tab.permissions': "สิทธิ์", 'st.perms.revoke': "เพิกถอน", 'st.perms.clear_all': "ล้างสิทธิ์ทั้งหมด", 'st.perms.gate.label': "ถามก่อนการดำเนินการสำคัญ", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'เริ่มต้น', 'ob.btn.skip': 'ข้ามไปก่อน', 'ob.btn.start': 'เริ่ม', - 'ob.cloud.body': 'WebBrain Compass พร้อมพร้อมกับการจัดสรรรายสัปดาห์ฟรี บทสนทนา Compass ที่เลือกอาจถูกเก็บและใช้เพื่อปรับปรุง WebBrain ในขณะที่ช่วยปรับปรุง WebBrain เปิดใช้งานตามค่าเริ่มต้น คุณสามารถปิดได้ในการตั้งค่า → ทั่วไป', + 'ob.cloud.body': 'WebBrain Compass พร้อมพร้อมกับการจัดสรรรายสัปดาห์ฟรี บทสนทนา Compass ที่เลือกอาจถูกเก็บและใช้เพื่อปรับปรุง WebBrain ในขณะที่ช่วยปรับปรุง WebBrain เปิดใช้งานตามค่าเริ่มต้น คุณสามารถปิดได้ในการตั้งค่า → ขั้นสูง', 'ob.cloud.change': 'เปลี่ยน', 'ob.cloud.using': 'กำลังใช้ WebBrain Compass', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'ผลลัพธ์', 'sp.api.enabled_html': '🔓 เปิดการแก้ไขผ่าน API สำหรับการสนทนานี้แล้ว เอเจนต์สามารถใช้ POST/PUT/PATCH/DELETE ผ่าน fetch_url และ execute_js เมื่อพิจารณาว่า API น่าเชื่อถือกว่า UI สำหรับขั้นตอนหนึ่ง โดย UI ยังคงเป็นค่าเริ่มต้น แฟล็กนี้จะถูกล้างเมื่อคุณรีเซ็ตการสนทนา', - 'sp.permissions.disabled_html': '⚠️ การถามสิทธิ์ถูกปิดอยู่ WebBrain จะคลิก พิมพ์ นำทาง รัน JavaScript อัปโหลด ดาวน์โหลด บันทึก และจัดงานในอนาคตโดยไม่ถามก่อน เปิดใช้งานอีกครั้งได้จาก การตั้งค่า → สิทธิ์ → ถามก่อนการดำเนินการสำคัญ', + 'sp.permissions.disabled_html': '⚠️ การถามสิทธิ์ถูกปิดอยู่ WebBrain จะคลิก พิมพ์ นำทาง รัน JavaScript อัปโหลด ดาวน์โหลด บันทึก และจัดงานในอนาคตโดยไม่ถามก่อน เปิดใช้งานอีกครั้งได้จากปุ่ม ⚠ ข้างไมโครโฟน', 'sp.permissions.button': 'การถามสิทธิ์: เปิด', 'sp.permissions.button_off': 'การถามสิทธิ์: ปิด', 'sp.permissions.gate_desc': 'WebBrain จะถามก่อนครั้งแรกที่คลิก พิมพ์ ดาวน์โหลด หรือเรียกใช้โค้ดบนเว็บไซต์', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'รอ “{selector}”', 'st.title': 'การตั้งค่า WebBrain', - 'st.subtitle': 'ตั้งค่าผู้ให้บริการ LLM และการตั้งค่า · v{version}', + 'st.subtitle': 'ตั้งค่าการทำงานของ WebBrain · v{version}', 'st.tab.display': 'ทั่วไป', + 'st.tab.budgets': 'งบประมาณ', + 'st.tab.advanced': 'ขั้นสูง', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'เสียงพูด', + 'st.tab.generative': 'เชิงสร้างสรรค์', + 'st.tab.decision': 'การตัดสินใจ', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'ผู้ให้บริการ WebBrain', + 'st.providers_page.subtitle': 'เลือกโมเดลที่ WebBrain ใช้ · v{version}', + 'st.permissions_page.title': 'สิทธิ์ของ WebBrain', + 'st.permissions_page.subtitle': 'เว็บไซต์ที่ WebBrain ดำเนินการได้โดยไม่ต้องถามก่อน', 'st.tab.providers': 'ผู้ให้บริการ', 'st.tab.vision': 'การมองเห็น', 'st.tab.profile': 'โปรไฟล์', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "อัปเดตวิธีชำระเงิน", 'st.account.manage_billing': 'จัดการการเรียกเก็บเงิน', - 'st.display.language.label': 'ภาษา', - 'st.display.language.desc': 'ภาษาของหน้าจอปลั๊กอิน WebBrain', 'st.display.verbose.label': 'โหมดละเอียด', 'st.display.verbose.desc': 'แสดงรายละเอียดการเรียกใช้เครื่องมือเต็ม อาร์กิวเมนต์ และผลลัพธ์ JSON ดิบ ปิดเป็นค่าเริ่มต้นเพื่อประสบการณ์แชตที่สะอาดขึ้น', 'st.display.selection_shortcut.label': 'ทางลัดสำหรับข้อความที่เลือก', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'จับภาพหน้าจออัตโนมัติ', "st.display.auto_screenshot.desc": "จับภาพหน้าจอของวิวพอร์ตโดยอัตโนมัติหลังจากเอเจนต์ทำงานบนหน้า เพื่อให้เส้นทางการมองเห็นที่เลือกเห็นการเปลี่ยนแปลง การทำงานนี้ใช้โทเค็นมากขึ้น หากการมองเห็นไม่พร้อมใช้งาน ระบบจะข้ามการเสริมข้อมูลและทำงานต่อพร้อมแจ้งสถานะ", 'st.display.auto_screenshot.off': 'ปิด', - 'st.display.auto_screenshot.navigation': 'เมื่อมีการนำทาง', - 'st.display.auto_screenshot.state_change': 'เมื่อสถานะเปลี่ยน (ค่าเริ่มต้น)', + 'st.display.auto_screenshot.navigation': 'เมื่อมีการนำทาง (ค่าเริ่มต้น)', + 'st.display.auto_screenshot.state_change': 'เมื่อสถานะเปลี่ยน', 'st.display.auto_screenshot.every_step': 'ทุกขั้น', 'st.display.tracing.label': 'บันทึกการติดตาม (เพื่อเปรียบเทียบโมเดล)', - 'st.display.tracing.desc_html': 'จัดเก็บทุกการทำงาน (คำขอ LLM, การตอบกลับ, การเรียกใช้เครื่องมือ, ภาพหน้าจอ) ลงใน IndexedDB ในเครื่อง เพื่อให้คุณตรวจสอบและเปรียบเทียบโมเดลแบบเคียงข้างกันได้ จะเปิดในแท็บ Traces แยกต่างหาก ปิดเป็นค่าเริ่มต้นเพราะเพิ่มการเขียนดิสก์ในทุกขั้น เปิดหน้า Traces →', - 'st.display.lossless_tracing.label': 'บันทึกรายละเอียดคำขอทั้งหมด (ระดับดีบัก)', - 'st.display.lossless_tracing.desc_html': 'จัดเก็บพรอมต์ ข้อความ และโครงสร้างเครื่องมือแบบเต็มของแต่ละคำขอ LLM แทนสรุปที่ไม่มีเนื้อหา และเก็บผลลัพธ์เครื่องมือแต่ละรายการสูงสุด 200 KB เปิดใช้งานการดีบักเชิงลึกและการสร้างคำขอใหม่ ปิดโดยค่าเริ่มต้นเพราะเขียนเนื้อหาสนทนาของคุณในเครื่องและใช้พื้นที่ดิสก์มากกว่ามาก ต้องเปิดการบันทึกเทรซ', + 'st.display.tracing.desc_html': 'จัดเก็บทุกการทำงาน (คำขอ LLM, การตอบกลับ, การเรียกใช้เครื่องมือ, ภาพหน้าจอ) ลงใน IndexedDB ในเครื่อง เพื่อให้คุณตรวจสอบและเปรียบเทียบโมเดลแบบเคียงข้างกันได้ รวมถึงพรอมต์ ข้อความ และโครงสร้างเครื่องมือแบบเต็มของแต่ละคำขอ LLM และผลลัพธ์เครื่องมือแต่ละรายการสูงสุด 200 KB จะเปิดในแท็บ Traces แยกต่างหาก ปิดเป็นค่าเริ่มต้นเพราะเขียนเนื้อหาสนทนาของคุณในเครื่องและใช้พื้นที่ดิสก์มากกว่ามาก เปิดหน้า Traces →', 'st.display.allow_local_network.label': 'อนุญาตให้เอเจนต์เข้าถึงเครือข่ายภายใน', 'st.display.allow_local_network.desc': 'ให้เครื่องมือ fetch_url ของเอเจนต์เข้าถึง loopback (127.0.0.1, localhost) และที่อยู่ส่วนตัว/RFC1918 (10.x, 192.168.x, 172.16–31.x) มีประโยชน์สำหรับเซิร์ฟเวอร์พัฒนาภายใน เครื่องมืออินทราเน็ต หรือ API ที่โฮสต์เอง ปิดเป็นค่าเริ่มต้น เมื่อปิด จะบล็อก URL ที่ระบุ IP ส่วนตัวหรือ loopback โดยตรงและชื่อ localhost ไม่มีการตรวจสอบผลการแปลงชื่อ DNS ดังนั้นชื่อโฮสต์อื่นอาจยังเข้าถึงที่อยู่ภายในได้ IP เมตาดาตาคลาวด์ที่ระบุโดยตรง (169.254.169.254) และชื่อเมตาดาตาในรายการหรือ *.internal/*.local ยังคงถูกบล็อกแม้เปิดไว้', 'st.display.notify_sound.label': "เสียงแจ้งเตือน", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "โหมดการมองเห็น เปิดใช้งานแล้ว สำหรับผู้ให้บริการที่ใช้งานอยู่", "sp.vision.off": "โหมดการมองเห็น ปิดใช้งานแล้ว สำหรับผู้ให้บริการที่ใช้งานอยู่", "sp.vision.error": "สลับโหมดการมองเห็นไม่สำเร็จ: {msg}", - "st.tab.multimodal": "โมเดลเสริม", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "แนะนำ เมื่อเปิด WebBrain จะขออนุญาตในครั้งแรกที่คลิก พิมพ์ นำทาง รัน JavaScript อัปโหลด ดาวน์โหลด หรือบันทึกบนเว็บไซต์ (จากนั้นจะจดจำตัวเลือกของคุณ) ปิดไว้เพื่อใช้งานได้รวดเร็วโดยไม่ต้องถาม บนเว็บไซต์ที่คุณไว้วางใจเต็มที่", "st.perms.gate.warning": "⚠️ การถามสิทธิ์ถูกปิดอยู่ WebBrain จะคลิก พิมพ์ นำทาง รัน JavaScript อัปโหลด ดาวน์โหลด และบันทึกบนเว็บไซต์ใด ๆ โดยไม่ถาม — รวมถึงหน้าที่เนื้อหาอาจถูกควบคุมโดยผู้โจมตี เนื้อหาของหน้ายังถูกปฏิบัติเสมือนไม่น่าเชื่อถือภายในระบบ แต่ไม่มีอะไรหยุดคำสั่งที่ถูกแทรกเข้ามาไม่ให้กระตุ้นการกระทำได้ ปิดไว้เฉพาะเมื่อคุณไว้วางใจทุกเว็บไซต์ที่ใช้ผู้ช่วยนี้เต็มที่", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "ค่าเริ่มต้นของระบบ", "st.display.download_directory.error": "ใช้โฟลเดอร์แบบสัมพัทธ์ เช่น WebBrain หรือ Work/WebBrain ไม่อนุญาตพาธแบบสัมบูรณ์และ “..”", "st.display.strict_secret.label": "การจัดการความลับอย่างเข้มงวด", - "st.display.strict_secret.desc": "ปฏิเสธการอ้างอิงข้อมูลรับรอง (รหัสผ่าน คีย์ API โทเค็น OTP) ในบทสรุปหรือข้อความของผู้ช่วย — แม้คุณจะขอโดยตรง มีประโยชน์หากคุณแชร์ไฟล์ trace หรือแชร์หน้าจอเป็นประจำ ปิดเป็นค่าเริ่มต้น เพื่อให้เอเจนต์สามารถแสดงค่าที่แน่นอนที่คุณร้องขอออกมาได้เมื่อคุณต้องการ เปิดใช้งาน (การตั้งค่า → ความปลอดภัย) เมื่อคุณต้องการให้บทสรุป `done` เรียบร้อยและไม่มีการอ้างอิงข้อมูลรับรองซ้ำ", + "st.display.strict_secret.desc": "ปฏิเสธการอ้างอิงข้อมูลรับรอง (รหัสผ่าน คีย์ API โทเค็น OTP) ในบทสรุปหรือข้อความของผู้ช่วย — แม้คุณจะขอโดยตรง มีประโยชน์หากคุณแชร์ไฟล์ trace หรือแชร์หน้าจอเป็นประจำ ปิดเป็นค่าเริ่มต้น เพื่อให้เอเจนต์สามารถแสดงค่าที่แน่นอนที่คุณร้องขอออกมาได้เมื่อคุณต้องการ เปิดใช้งาน เมื่อคุณต้องการให้บทสรุป `done` เรียบร้อยและไม่มีการอ้างอิงข้อมูลรับรองซ้ำ", "st.display.request_timeout.label": "เวลารอคำขอ LLM", "st.display.request_timeout.desc": "เวลารอสูงสุดสำหรับส่วนหัวของการตอบกลับและแต่ละช่วงหยุดระหว่างส่วนของคำตอบแบบสตรีม ค่าเริ่มต้น: 120 วินาที เพิ่มเวลานี้สำหรับโมเดลในเครื่องที่ทำงานช้า โดยเฉพาะเมื่อใช้ CPU หรือบริบทขนาดใหญ่", "st.providers.filter.all": "ทั้งหมด", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'ข้อความจะถูกเข้าคิวขณะที่ WebBrain ไม่ว่าง เฉพาะ /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces และ /verbose เท่านั้นที่เรียกใช้ได้ทันทีในฐานะคำสั่ง slash', 'tool.go_back': 'กำลังย้อนกลับ', 'tool.go_forward': 'กำลังไปข้างหน้า', - 'st.display.search.placeholder': 'ค้นหาการตั้งค่าทั่วไป', - 'st.display.search.empty': 'ไม่พบการตั้งค่าทั่วไปที่ตรงกัน', + 'st.display.search.placeholder': 'ค้นหาการตั้งค่า', + 'st.display.search.empty': 'ไม่พบการตั้งค่าที่ตรงกัน', 'st.display.advanced': 'ขั้นสูง', ...getApocalypseModeCopy('th'), ...getEmergencyBoxCopy('th'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "ด้านที่ยาวที่สุด (กว้างหรือสูง) เป็นพิกเซลของภาพที่ส่งไปวิชัน เพดานต่ำกว่าจะย่อภาพก่อนส่ง ลดโทเคนและต้นทุน เพดานสูงกว่าคงความคมชัด", "st.imageBudget.warning": "⚠️ การตั้งค่าเหล่านี้ใช้กับภาพสำหรับวิชัน (จับอัตโนมัติ, /screenshot, ทั้งหน้า, verify_form) รูปความละเอียดเต็มที่บันทึกด้วยตนเองไม่ได้รับผลกระทบ «Image detail» เคารพโดย endpoint แบบ OpenAI ผู้ให้บริการอื่นอาจละเว้น", - "st.redaction.heading": "การเบลอภาพหน้าจอ", "st.redaction.toggle.label": "เบลอเนื้อหาที่ละเอียดอ่อนในภาพหน้าจอ", "st.redaction.toggle.desc": "ก่อนส่งภาพหน้าจอไปยังโมเดลวิชั่น ระบบจะเบลอช่องฟอร์มและข้อความที่ดูเหมือนอีเมลหรือหมายเลขโทรศัพท์ การตรวจจับทำงานทั้งหมดบนอุปกรณ์ของคุณ — ไม่มีการส่งข้อมูลเพิ่มเติมใดๆ", "st.redaction.warning": "⚠️ ฟีเจอร์นี้เป็นแบบ best-effort และ fail-open: หากการเบลอไม่สามารถทำงานบนหน้าใดหน้าหนึ่งได้ (เช่น ทันทีหลังการนำทาง ในตัวแสดง PDF หรือบนหน้าเบราว์เซอร์ที่ถูกจำกัด) ภาพหน้าจอจะยังคงถูกส่งไปโดยไม่ถูกเบลอ การตรวจจับใช้เพียงหลักการ DOM heuristics เท่านั้น — ข้อความที่วาดบน canvas ข้อมูลส่วนบุคคลในรูปภาพ หรือสิ่งใดก็ตามที่ไม่ถูกจดจำว่าเป็นช่องฟอร์มหรือข้อความอีเมล/โทรศัพท์ อาจหลุดรอดไปได้ และข้อความในหน้าเว็บที่ส่งไปยังโมเดลก็ไม่ถูกเบลอโดยการตั้งค่านี้ นี่ไม่ใช่การรับประกันด้านความปลอดภัย หากต้องการความเป็นส่วนตัวอย่างเต็มที่ ให้ใช้โมเดลภายในเครื่อง/ออฟไลน์ (llama.cpp, Ollama) เพราะภาพหน้าจอจะไม่ออกจากเครื่องของคุณเลย และไม่จำเป็นต้องเบลออีกต่อไป", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "ส่งออกเซสชันการติดตามที่บันทึกไว้ทั้งหมดเป็น JSON รวมภาพหน้าจอ", "sp.export_traces.recording_truncated": "ส่งออกข้อมูลที่บันทึกไว้ทั้งหมดเป็น JSON แล้ว เนื้อหาที่ละเว้นระหว่างการบันทึกไม่สามารถกู้คืนด้วยการส่งออกได้", "sp.slash.export_traces": "ส่งออกลำดับการทำงานของเครื่องมือ (trace)", - "sp.export_traces.none": "ไม่มี trace สำหรับการสนทนานี้ เปิด «บันทึก trace» ในการตั้งค่า แล้วเรียกใช้อีกครั้ง", + "sp.export_traces.none": "ไม่มี trace สำหรับการสนทนานี้ เปิด «บันทึก trace» ในการตั้งค่า → ขั้นสูง แล้วเรียกใช้อีกครั้ง", "sp.export_traces.error": "ไม่สามารถส่งออก trace ได้", "sp.export_traces.done": "ส่งออกลำดับเครื่องมือแล้ว", "sp.export_traces.no_conversation": "ยังไม่มีอะไรให้ส่งออก — เริ่มการสนทนาก่อน", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "ส่งออกลำดับเครื่องมือแล้ว เทิร์นเก่าอาจหายถ้าการสนทนานี้มี trace มาก", "st.display.help_improve.label": "ช่วยปรับปรุง WebBrain", "st.display.help_improve.desc_html": "อนุญาตให้เก็บการโต้ตอบกับ WebBrain Compass บางรายการและใช้เพื่อการประเมิน การปรับปรุง การปรับละเอียด และการฝึก โดยเปิดไว้เป็นค่าเริ่มต้น ปิดตัวเลือกนี้เพื่อไม่ให้การโต้ตอบกับ Compass ในอนาคตถูกใช้เพื่อวัตถุประสงค์เหล่านี้ WebBrain จะเก็บคำขอโมเดลในเครื่องและ API ของคุณเองเฉพาะจากผู้ให้บริการที่คุณเปิด “แชร์คำค้นเพื่อการวิจัย” เท่านั้น นโยบายความเป็นส่วนตัว →", - "st.providers.webbrain_data_use.body": "WebBrain Compass มีโควตาใช้งานฟรีรายวัน ขณะที่ “ช่วยปรับปรุง WebBrain” เปิดไว้เป็นค่าเริ่มต้น การสนทนา Compass บางรายการอาจถูกเก็บและใช้เพื่อการประเมิน การปรับปรุง การปรับละเอียด และการฝึก ปิดได้ที่ ทั่วไป → ขั้นสูง เพื่อไม่ให้การโต้ตอบ Compass ในอนาคตถูกใช้ในลักษณะดังกล่าว WebBrain จะเก็บคำขอโมเดลในเครื่องและ API ของคุณเองเฉพาะเมื่อคุณเปิดตัวเลือก “แชร์คำค้นเพื่อการวิจัย” ของผู้ให้บริการรายนี้ {privacyLink} หากต้องการใช้งานเพิ่ม สมัครที่ {subscribeLink} จัดการการเรียกเก็บเงินที่ {accountLink}", + "st.providers.webbrain_data_use.body": "WebBrain Compass มีโควตาใช้งานฟรีรายวัน ขณะที่ “ช่วยปรับปรุง WebBrain” เปิดไว้เป็นค่าเริ่มต้น การสนทนา Compass บางรายการอาจถูกเก็บและใช้เพื่อการประเมิน การปรับปรุง การปรับละเอียด และการฝึก ปิดได้ที่ การตั้งค่า → ขั้นสูง เพื่อไม่ให้การโต้ตอบ Compass ในอนาคตถูกใช้ในลักษณะดังกล่าว WebBrain จะเก็บคำขอโมเดลในเครื่องและ API ของคุณเองเฉพาะเมื่อคุณเปิดตัวเลือก “แชร์คำค้นเพื่อการวิจัย” ของผู้ให้บริการรายนี้ {privacyLink} หากต้องการใช้งานเพิ่ม สมัครที่ {subscribeLink} จัดการการเรียกเก็บเงินที่ {accountLink}", 'st.providers.share_research.label': "แชร์คำค้นเพื่อการวิจัย", 'st.providers.share_research.hint': "ส่งพรอมต์และการตอบกลับจากผู้ให้บริการรายนี้ไปยัง WebBrain เพื่อประเมินและปรับปรุง รวมถึงชื่อผู้ให้บริการและโมเดลที่ใช้ รูปภาพและไฟล์แนบไบนารีจะถูกลบออกและข้อความจะถูกตัดทอนก่อนแชร์ ข้อความที่เหลือจะถูกส่งไปตามที่เป็น", 'st.providers.share_research.confirm': "แชร์คำค้นจากผู้ให้บริการรายนี้กับ WebBrain เพื่อการวิจัยหรือไม่?\n\nเมื่อเปิดใช้ พรอมต์ การตอบกลับ และการโต้ตอบเครื่องมือของคุณกับผู้ให้บริการรายนี้จะถูกส่งไปยัง WebBrain เพื่อประเมินและปรับปรุง พร้อมชื่อผู้ให้บริการและโมเดล ข้อความจะถูกส่งตามที่เป็นหลังลบรูปภาพและตัดทอนเนื้อหายาว ดังนั้นโปรดหลีกเลี่ยงการแชร์ข้อมูลส่วนบุคคลที่ละเอียดอ่อน คุณสามารถปิดได้ทุกเมื่อเพื่อหยุดการแชร์ในอนาคต", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "ต้องการให้ขัดจังหวะน้อยลงไหม? “อนุญาตเสมอ” จะจดจำเว็บไซต์นี้ คำสั่งด้านล่างจะปิดการถามสิทธิ์ของ WebBrain ในทุกเว็บไซต์", "sp.perm.insert_skip_command": "แทรก /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "แบบร่างของคุณยังไม่เปลี่ยน โปรดล้างก่อนแทรกคำสั่ง", - "ob.act.permissions_tip": "การถามสิทธิ์เปิดอยู่ตามค่าเริ่มต้น ผู้ใช้ขั้นสูงสามารถปิดทั่วโลกด้วย /dangerously-skip-permissions และเปิดอีกครั้งได้ที่ การตั้งค่า → สิทธิ์", + "ob.act.permissions_tip": "การถามสิทธิ์เปิดอยู่ตามค่าเริ่มต้น ผู้ใช้ขั้นสูงสามารถปิดทั่วโลกด้วย /dangerously-skip-permissions และเปิดอีกครั้งได้จากปุ่ม ⚠ ข้างไมโครโฟน", 'st.provider.field.cache_read_cost_per_million': "ค่าอ่านแคชโดยประมาณ ($ / 1 ล้านโทเค็น)", 'st.provider.field.cache_write_cost_per_million': "ค่าการเขียนแคช 5 นาทีโดยประมาณ ($ / 1 ล้านโทเค็น)", 'st.provider.field.cache_write_1h_cost_per_million': "ค่าการเขียนแคช 1 ชั่วโมงโดยประมาณ ($ / 1 ล้านโทเค็น)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "แทนที่สำเนาบนคลาวด์ที่เข้ารหัสด้วยการตั้งค่า WebBrain ปัจจุบันของอุปกรณ์นี้หรือไม่", "st.sync.consent.legacy": "เปิดการซิงค์ที่เข้ารหัสไหม WebBrain จะส่งสำเนาความทรงจำของคุณ การกรอกโปรไฟล์อัตโนมัติ และการตั้งค่าผู้ให้บริการคีย์ API ที่เข้ารหัสจากต้นทางถึงปลายทางไปยัง WebBrain Compass ประวัติการแชทและการลงชื่อเข้าใช้ OAuth จะไม่ซิงค์กัน", "st.sync.consent.denied": "ไม่ได้รับสิทธิ์การซิงค์ที่เข้ารหัส", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "หน้าเว็บเปลี่ยนระหว่างที่งานกำลังทำงาน ({before} → {after}) งานจะดำเนินต่อ", 'sp.activity.generating_answer': "กำลังสร้างคำตอบ…", 'sp.activity.retrying_response': "กำลังลองตอบอีกครั้ง…", diff --git a/src/firefox/src/ui/locales/tl.js b/src/firefox/src/ui/locales/tl.js index 9e07c18d65..dd5363bcb4 100644 --- a/src/firefox/src/ui/locales/tl.js +++ b/src/firefox/src/ui/locales/tl.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Bawasan ang zoom ng UI ng extension', 'sp.ui_scale.increase': 'Dagdagan ang zoom ng UI ng extension', 'sp.ui_scale.reset': 'I-reset', - 'st.display.ui_scale.label': 'Pag-zoom ng UI ng extension', - 'st.display.ui_scale.decrease': 'Bawasan ang zoom ng UI ng extension', - 'st.display.ui_scale.increase': 'Dagdagan ang zoom ng UI ng extension', - 'st.display.ui_scale.reset': 'I-reset', - 'st.display.ui_scale.desc': 'Baguhin ang laki ng side panel at hiwalay na chat window nang hindi binabago ang page zoom.', - 'st.display.ui_scale.shortcuts': 'Mga nakatalagang shortcut: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Hindi nakatalaga', - 'st.display.ui_scale.manage_shortcuts': 'I-customize ang mga shortcut', 'tool.delegate_research': 'Nagsasaliksik gamit ang ChatGPT', 'st.display.research_escalation.label': 'Pag-escalate ng pananaliksik', 'st.display.research_escalation.desc': 'Kapag pinagana, maaaring humingi ng pahintulot ang WebBrain bago magpadala ng napakakomplikadong read-only na prompt sa pananaliksik sa ChatGPT. Naka-off bilang default. Ibinabahagi lamang ang eksaktong prompt pagkatapos ng iyong tahasang pag-apruba.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Huwag ituloy", "sp.recipient.reason_unrequested": "Hindi matiyak ng WebBrain mula sa iyong kahilingan na dapat magpadala ng mensahe. Ang bukas na usapan sa {host} ay kay {recipient}.", "sp.recipient.reason_unnamed": "Hindi matiyak ng WebBrain mula sa iyong kahilingan kung sino ang dapat makatanggap ng mensaheng ito. Ang bukas na usapan sa {host} ay kay {recipient}.", - 'st.tab.permissions': "Mga pahintulot", 'st.perms.revoke': "Bawiin", 'st.perms.clear_all': "I-clear ang lahat ng pahintulot", 'st.perms.gate.label': "Magtanong bago ang mahahalagang aksyon", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Magsimula', 'ob.btn.skip': 'Laktawan muna', 'ob.btn.start': 'Magsimula', - 'ob.cloud.body': 'Ang WebBrain Compass ay handa na may libreng araw-araw na alokasyon. Ang mga napiling Compass na usapan ay maaaring manatili at gamitin upang mapahusay ang WebBrain habang ang Tulong sa Pagsasapa ng WebBrain ay naka-on sa default. Maaari mong ito sa Settings → General.', + 'ob.cloud.body': 'Ang WebBrain Compass ay handa na may libreng araw-araw na alokasyon. Ang mga napiling Compass na usapan ay maaaring manatili at gamitin upang mapahusay ang WebBrain habang ang Tulong sa Pagsasapa ng WebBrain ay naka-on sa default. Maaari mong ito sa Settings → Advanced.', 'ob.cloud.change': 'Baguhin', 'ob.cloud.using': 'Gumagamit ng WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Resulta', 'sp.api.enabled_html': '🔓 Naka-enable ang mga pagbabago sa API para sa pag-uusap na ito. Maaari nang gamitin ng ahente ang POST/PUT/PATCH/DELETE sa pamamagitan ng fetch_url at execute_js kapag sa tingin niyang mas maaasahan ang API kaysa UI para sa isang hakbang. UI-first pa rin ang default. Maaaclear ang flag na ito kapag ni-reset mo ang pag-uusap.', - 'sp.permissions.disabled_html': '⚠️ Naka-off ang mga prompt ng pahintulot. Mag-cli-click, magta-type, magna-navigate, magpapatakbo ng JavaScript, mag-aupload, mag-dadownload, magre-record, at mag-iiskedyul ng mga gawaing hinaharap ang WebBrain nang hindi nagtatanong. I-enable muli mula sa Settings → Pahintulot → Magtanong bago ang mahahalagang aksyon.', + 'sp.permissions.disabled_html': '⚠️ Naka-off ang mga prompt ng pahintulot. Mag-cli-click, magta-type, magna-navigate, magpapatakbo ng JavaScript, mag-aupload, mag-dadownload, magre-record, at mag-iiskedyul ng mga gawaing hinaharap ang WebBrain nang hindi nagtatanong. I-enable muli mula sa ⚠ button sa tabi ng mikropono.', 'sp.permissions.button': 'Mga prompt ng pahintulot: naka-on', 'sp.permissions.button_off': 'Mga prompt ng pahintulot: naka-off', 'sp.permissions.gate_desc': 'Nagtatanong ang WebBrain sa unang beses na ito ay mag-click, mag-type, mag-download o magpatakbo ng code sa isang site.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Naghihintay sa "{selector}"', 'st.title': 'Mga Setting ng WebBrain', - 'st.subtitle': 'I-configure ang iyong mga LLM provider at preference · v{version}', + 'st.subtitle': 'I-configure kung paano gumagana ang WebBrain · v{version}', 'st.tab.display': 'General', + 'st.tab.budgets': 'Mga Badyet', + 'st.tab.advanced': 'Advanced', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Pagsasalita', + 'st.tab.generative': 'Generative', + 'st.tab.decision': 'Decision', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Mga Provider ng WebBrain', + 'st.providers_page.subtitle': 'Piliin ang mga model na ginagamit ng WebBrain · v{version}', + 'st.permissions_page.title': 'Mga Pahintulot ng WebBrain', + 'st.permissions_page.subtitle': 'Mga site kung saan puwedeng kumilos ang WebBrain nang hindi muna nagtatanong', 'st.tab.providers': 'Mga Provider', 'st.tab.vision': 'Bisyon', 'st.tab.profile': 'Profile', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "I-update ang paraan ng pagbabayad", 'st.account.manage_billing': 'Pamahalaan ang pagsingil', - 'st.display.language.label': 'Wika', - 'st.display.language.desc': 'Wika ng interface para sa WebBrain plugin.', 'st.display.verbose.label': 'Verbose Mode', 'st.display.verbose.desc': 'Ipakita ang buong detalye ng mga tool call, argument, at raw JSON na resulta. Naka-off bilang default para sa mas malinis na chat experience.', 'st.display.selection_shortcut.label': 'Shortcut sa pagpili', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Auto-screenshot', "st.display.auto_screenshot.desc": "Awtomatikong kumuha ng screenshot ng viewport pagkatapos kumilos ang ahente sa pahina para makita ng napiling vision route ang pagbabago. Mas maraming token ang gagamitin nito. Kung walang vision, lalaktawan ang enrichment at magpapatuloy ang gawain na may status notice.", 'st.display.auto_screenshot.off': 'Naka-off', - 'st.display.auto_screenshot.navigation': 'Kapag nag-navigate', - 'st.display.auto_screenshot.state_change': 'Kapag nagbago ang state (default)', + 'st.display.auto_screenshot.navigation': 'Kapag nag-navigate (default)', + 'st.display.auto_screenshot.state_change': 'Kapag nagbago ang state', 'st.display.auto_screenshot.every_step': 'Bawat hakbang', 'st.display.tracing.label': 'I-record ang mga trace (para sa paghahambing ng modelo)', - 'st.display.tracing.desc_html': 'I-save ang bawat run (mga LLM request, response, tool call, screenshot) sa lokal na IndexedDB para maaari mong suriin at ihambing ang mga modelo nang magkatabi. Bumubukas sa hiwalay na Traces tab. Naka-off bilang default dahil nagdadagdag ito ng disk writes kada hakbang. Buksan ang Traces page →', - 'st.display.lossless_tracing.label': 'Itala ang buong detalye ng kahilingan (antas ng debug)', - 'st.display.lossless_tracing.desc_html': 'Iniimbak din ang buong prompt, mensahe, at schema ng tool ng bawat LLM request sa halip na buod na walang nilalaman, at nagpapanatili ng hanggang 200 KB ng bawat resulta ng tool. Nagbibigay-daan sa malalim na pag-debug at muling pagbuo ng request. Naka-off bilang default dahil isinusulat nito ang nilalaman ng iyong usapan nang lokal at gumagamit ng mas malaking disk. Nangangailangan ng naka-on na pag-record ng trace.', + 'st.display.tracing.desc_html': 'I-save ang bawat run (mga LLM request, response, tool call, screenshot) sa lokal na IndexedDB para masuri at maihambing mo ang mga modelo nang magkatabi, kasama ang buong prompt, mensahe, at schema ng tool ng bawat LLM request at hanggang 200 KB ng bawat resulta ng tool. Bumubukas sa hiwalay na Traces tab. Naka-off bilang default dahil isinusulat nito ang nilalaman ng iyong usapan nang lokal at gumagamit ng mas malaking disk. Buksan ang Traces page →', 'st.display.allow_local_network.label': 'Pahintulutan ang ahente na ma-access ang lokal na network', 'st.display.allow_local_network.desc': 'Hinahayaan ang fetch_url tool ng ahente na maabot ang loopback (127.0.0.1, localhost) at mga private/RFC1918 address (10.x, 192.168.x, 172.16–31.x). Mainam para sa mga lokal na dev server, intranet tool, o self-hosted API. Naka-off bilang default. Kapag naka-off, naka-block ang mga URL na may direktang nakasulat na private o loopback IP at mga pangalang localhost. Hindi sinusuri ang DNS resolution, kaya maaari pa ring makarating sa lokal na address ang ibang hostname. Naka-block pa rin kahit naka-on ang literal na cloud-metadata IP (169.254.169.254) at mga nakalistang metadata o *.internal/*.local hostname.', 'st.display.notify_sound.label': "Mga tunog ng abiso", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Vision mode naka-enable para sa aktibong provider.", "sp.vision.off": "Vision mode naka-disable para sa aktibong provider.", "sp.vision.error": "Nabigo ang vision toggle: {msg}", - "st.tab.multimodal": "Mga Pantulong na Modelo", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Inirerekomenda. Kapag naka-on, humihingi ng pahintulot ang WebBrain sa unang pagkakataong mag-click, mag-type, mag-navigate, magpatakbo ng JavaScript, mag-upload, mag-download, o mag-record ito sa isang site (at saka tinatandaan ang iyong pinili). I-off para sa mabilis at walang prompt na paggamit sa mga site na lubos mong pinagkakatiwalaan.", "st.perms.gate.warning": "⚠️ Naka-OFF ang mga prompt ng pahintulot. Mag-cli-click, magta-type, magna-navigate, magpapatakbo ng JavaScript, mag-aupload, mag-dadownload, at magre-record ang WebBrain sa anumang site nang HINDI nagtatanong — kasama na ang mga pahinang ang nilalaman ay maaaring kontrolado ng attacker. Itinuturing pa ring untrusted ang nilalaman ng pahina sa loob, ngunit walang pipigil sa isang injected na tagubilin na mag-trigger ng aksyon. Iwang naka-off lamang ito kung lubos mong pinagkakatiwalaan ang bawat site na ginagamitan mo ng assistant.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Default ng system", "st.display.download_directory.error": "Gumamit ng relative na folder tulad ng WebBrain o Work/WebBrain. Hindi pinapayagan ang absolute path at “..”.", "st.display.strict_secret.label": "Mahigpit na paghawak ng lihim", - "st.display.strict_secret.desc": "Tanggihang i-quote ang mga kredensyal (password, API key, token, OTPs) sa mga summary o teksto ng assistant — kahit hayagan mong hilingin ang mga ito. Mainam kung madalas kang magbahagi ng trace files o screen-share. Naka-off bilang default para maulit ng ahente ang eksaktong halaga na hihilingin mo kapag kailangan mo ito. I-on ito (Settings → Security) kapag nais mong manatiling malinis ang mga `done` na summary at hindi na maulit ang mga kredensyal.", + "st.display.strict_secret.desc": "Tanggihang i-quote ang mga kredensyal (password, API key, token, OTPs) sa mga summary o teksto ng assistant — kahit hayagan mong hilingin ang mga ito. Mainam kung madalas kang magbahagi ng trace files o screen-share. Naka-off bilang default para maulit ng ahente ang eksaktong halaga na hihilingin mo kapag kailangan mo ito. I-on ito kapag nais mong manatiling malinis ang mga `done` na summary at hindi na maulit ang mga kredensyal.", "st.display.request_timeout.label": "Timeout ng LLM request", "st.display.request_timeout.desc": "Pinakamatagal na paghihintay sa mga header ng tugon at sa bawat pagitan ng mga bahagi ng streaming na tugon. Default: 120 segundo. Dagdagan ito para sa mababagal na lokal na modelo, lalo na kung gumagamit ng CPU o malaking konteksto.", "st.providers.filter.all": "Lahat", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Nakapila ang mga mensahe habang abala ang WebBrain. Tanging /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces, at /verbose ang maaaring tumakbo agad bilang mga slash command.', 'tool.go_back': 'Bumabalik', 'tool.go_forward': 'Sumusulong', - 'st.display.search.placeholder': 'Maghanap sa General na mga setting', - 'st.display.search.empty': 'Walang tugmang General na mga setting.', + 'st.display.search.placeholder': 'Maghanap sa mga setting', + 'st.display.search.empty': 'Walang tugmang setting.', 'st.display.advanced': 'Advanced', ...getApocalypseModeCopy('tl'), ...getEmergencyBoxCopy('tl'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Pinakamahabang gilid (lapad o taas) sa pixels para sa anumang screenshot na ipinapadala sa vision. Mas mababang cap ay nagpapaliit ng imahe bago ipadala, binabawasan ang token at gastos. Mas mataas na cap ay nagpapanatili ng fidelity.", "st.imageBudget.warning": "⚠️ Naaangkop ang mga setting na ito sa screenshot para sa vision (auto-screenshot, /screenshot, buong page, verify_form). Hindi apektado ang manu-manong naka-save na full-resolution na imahe. Iginagalang ang «Image detail» ng OpenAI-style endpoints; maaaring balewalain ng ibang provider.", - "st.redaction.heading": "Pagbura sa mga screenshot", "st.redaction.toggle.label": "Burahin ang sensitibong nilalaman sa mga screenshot", "st.redaction.toggle.desc": "Bago ipadala ang isang screenshot sa isang vision model, binuburahin nito ang mga form field at tekstong mukhang email o numero ng telepono. Tumatakbo ang detection nang buo sa iyong device — walang karagdagang ipinapadala.", "st.redaction.warning": "⚠️ Best-effort at fail-open ito: kung hindi matakbo ang pagbura sa isang page (halimbawa, agad pagkatapos mag-navigate, sa mga PDF viewer, o sa mga restricted browser page), ipapadala pa rin ang screenshot nang hindi nabura. Gumagamit lang ang detection ng DOM heuristics — puwedeng makalusot ang tekstong iginuhit sa canvas, personal na impormasyon sa loob ng mga larawan, o anumang hindi nakikilalang form field o email/phone text, at hindi binubura ng setting na ito ang text ng page na ipinapadala sa model. Hindi ito garantiya ng seguridad. Para sa ganap na privacy, gumamit ng local/offline model (llama.cpp, Ollama): hindi na aalis sa iyong device ang mga screenshot at hindi na kailangan ang pagbura.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "I-export ang buong naka-save na trace session bilang JSON, kasama ang mga screenshot", "sp.export_traces.recording_truncated": "Na-export bilang JSON ang lahat ng naka-save na tala. Hindi maibabalik sa pag-export ang nilalamang hindi naisama habang nagre-record.", "sp.slash.export_traces": "I-export ang tool chain (mga trace)", - "sp.export_traces.none": "Walang trace para sa usapang ito. I-on ang Record traces sa Settings, pagkatapos ay patakbuhin muli.", + "sp.export_traces.none": "Walang trace para sa usapang ito. I-on ang Record traces sa Settings → Advanced, pagkatapos ay patakbuhin muli.", "sp.export_traces.error": "Hindi ma-export ang mga trace.", "sp.export_traces.done": "Na-export na ang tool chain.", "sp.export_traces.no_conversation": "Wala pang mae-export — magsimula muna ng usapan.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Na-export ang tool chain. Maaaring mawala ang mga lumang turn kung marami ang trace ng usapang ito.", "st.display.help_improve.label": "Tumulong na Pahusayin ang WebBrain", "st.display.help_improve.desc_html": "Payagan ang piling interaksyon sa WebBrain Compass na mapanatili at magamit para sa pagsusuri, pagpapahusay, fine-tuning, at training. Naka-on bilang default. I-off ito upang hindi magamit ang mga susunod na interaksyon sa Compass para sa mga layuning iyon. Kinokolekta lang ng WebBrain ang mga kahilingan sa lokal na modelo at sarili mong API mula sa mga provider kung saan mo binuksan ang “Ibahagi ang mga query para sa pananaliksik”. Patakaran sa privacy →", - "st.providers.webbrain_data_use.body": "Kasama ang libreng pang-araw-araw na paggamit ng WebBrain Compass. Habang naka-on bilang default ang Tumulong na Pahusayin ang WebBrain, maaaring panatilihin at gamitin ang piling pag-uusap sa Compass para sa pagsusuri, pagpapahusay, fine-tuning, at training. I-off ito sa General → Advanced upang hindi maisama ang mga susunod na interaksyon sa Compass sa mga paggamit na iyon. Kinokolekta lang ng WebBrain ang mga kahilingan sa lokal na modelo at sarili mong API kapag binuksan mo ang opsyong “Ibahagi ang mga query para sa pananaliksik” ng provider na ito. {privacyLink}. Para sa higit pang paggamit, mag-subscribe sa {subscribeLink}. Pamahalaan ang billing sa {accountLink}.", + "st.providers.webbrain_data_use.body": "Kasama ang libreng pang-araw-araw na paggamit ng WebBrain Compass. Habang naka-on bilang default ang Tumulong na Pahusayin ang WebBrain, maaaring panatilihin at gamitin ang piling pag-uusap sa Compass para sa pagsusuri, pagpapahusay, fine-tuning, at training. I-off ito sa Settings → Advanced upang hindi maisama ang mga susunod na interaksyon sa Compass sa mga paggamit na iyon. Kinokolekta lang ng WebBrain ang mga kahilingan sa lokal na modelo at sarili mong API kapag binuksan mo ang opsyong “Ibahagi ang mga query para sa pananaliksik” ng provider na ito. {privacyLink}. Para sa higit pang paggamit, mag-subscribe sa {subscribeLink}. Pamahalaan ang billing sa {accountLink}.", 'st.providers.share_research.label': "Ibahagi ang mga query para sa pananaliksik", 'st.providers.share_research.hint': "Ipinapadala ang mga prompt at tugon mula sa provider na ito sa WebBrain para sa pagsusuri at pagpapabuti, kabilang ang provider at modelong ginamit. Tinatanggal ang mga larawan at binary na attachment at pinuputol ang teksto bago ibahagi; ang natitirang teksto ay ipinapadala nang apa adanya.", 'st.providers.share_research.confirm': "Ibabahagi ba ang mga query mula sa provider na ito sa WebBrain para sa pananaliksik?\n\nKapag naka-on, ang iyong mga prompt, tugon, at interaksyon sa tool sa provider na ito ay ipapadala sa WebBrain para sa pagsusuri at pagpapabuti, kasama ang pangalan ng provider at modelo. Ipinapadala ang teksto nang apa adanya pagkatapos tanggalin ang mga larawan at putulin ang mahahabang nilalaman, kaya iwasang magbahagi ng sensitibong personal na datos. Maaari mo itong patayin anumang oras upang ihinto ang pagbabahagi.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "Gusto mo ng mas kaunting pagkaantala? Tinatandaan ng “Palaging payagan” ang site na ito. Ino-off ng command sa ibaba ang mga permission prompt ng WebBrain sa lahat ng site.", "sp.perm.insert_skip_command": "Ilagay ang /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Hindi binago ang draft mo. I-clear ito bago ilagay ang command.", - "ob.act.permissions_tip": "Naka-on bilang default ang mga permission prompt. Maaaring i-off ng advanced users ang mga ito sa lahat ng site gamit ang /dangerously-skip-permissions at i-on muli sa Settings → Permissions.", + "ob.act.permissions_tip": "Naka-on bilang default ang mga permission prompt. Maaaring i-off ng advanced users ang mga ito sa lahat ng site gamit ang /dangerously-skip-permissions at i-on muli mula sa ⚠ button sa tabi ng mikropono.", 'st.provider.field.cache_read_cost_per_million': "Tinatayang gastos sa pagbasa ng cache ($ / 1M token)", 'st.provider.field.cache_write_cost_per_million': "Tinatayang gastos sa 5 minutong pagsulat ng cache ($ / 1M token)", 'st.provider.field.cache_write_1h_cost_per_million': "Tinatayang gastos sa 1 oras na pagsulat ng cache ($ / 1M token)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "Palitan ang naka-encrypt na cloud copy ng kasalukuyang setup ng WebBrain ng device na ito?", "st.sync.consent.legacy": "I-on ang naka-encrypt na pag-sync? Magpapadala ang WebBrain ng end-to-end na naka-encrypt na kopya ng iyong mga alaala, profile autofill, at API-key na mga setting ng provider sa WebBrain Compass. Hindi naka-sync ang history ng chat at OAuth sign-in.", "st.sync.consent.denied": "Hindi ibinigay ang naka-encrypt na pahintulot sa pag-sync.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Nagbago ang pahina habang tumatakbo ang gawain ({before} → {after}). Nagpapatuloy ang gawain.", 'sp.activity.generating_answer': "Bumubuo ng sagot…", 'sp.activity.retrying_response': "Sinusubukang muli ang sagot…", diff --git a/src/firefox/src/ui/locales/tr.js b/src/firefox/src/ui/locales/tr.js index 306c3e6c40..231cbe3362 100644 --- a/src/firefox/src/ui/locales/tr.js +++ b/src/firefox/src/ui/locales/tr.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Uzantı arayüzünü uzaklaştır', 'sp.ui_scale.increase': 'Uzantı arayüzünü yakınlaştır', 'sp.ui_scale.reset': 'Sıfırla', - 'st.display.ui_scale.label': 'Uzantı arayüzü yakınlaştırması', - 'st.display.ui_scale.decrease': 'Uzantı arayüzünü uzaklaştır', - 'st.display.ui_scale.increase': 'Uzantı arayüzünü yakınlaştır', - 'st.display.ui_scale.reset': 'Sıfırla', - 'st.display.ui_scale.desc': 'Sayfa yakınlaştırmasını değiştirmeden yan paneli ve ayrı sohbet penceresini yeniden boyutlandırın.', - 'st.display.ui_scale.shortcuts': 'Özel kısayollar: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Atanmamış', - 'st.display.ui_scale.manage_shortcuts': 'Kısayolları özelleştir', 'tool.delegate_research': 'ChatGPT ile araştırılıyor', 'st.display.research_escalation.label': 'Araştırmayı devretme', 'st.display.research_escalation.desc': 'Etkinleştirildiğinde WebBrain, olağandışı derecede karmaşık salt okunur bir araştırma istemini ChatGPT’ye göndermeden önce izin isteyebilir. Varsayılan olarak kapalıdır. İstemin tam metni yalnızca açık onayınızdan sonra paylaşılır.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Devam etme", "sp.recipient.reason_unrequested": "WebBrain isteğinden bir mesaj gönderilmesi gerektiğini anlayamadı. {host} üzerinde açık olan sohbet: {recipient}.", "sp.recipient.reason_unnamed": "WebBrain isteğinden bu mesajın kime gideceğini anlayamadı. {host} üzerinde açık olan sohbet: {recipient}.", - 'st.tab.permissions': "İzinler", 'st.tab.skills': 'Skills', 'st.perms.revoke': "Kaldır", 'st.perms.clear_all': "Tüm izinleri temizle", @@ -274,7 +265,7 @@ export default { 'ob.btn.done': 'Başlayın', 'ob.btn.skip': 'Şimdilik atla', 'ob.btn.start': 'Başla', - 'ob.cloud.body': 'WebBrain Compass haftalık ücretsiz payla hazır. Seçilen Compass konuşmaları, WebBrain\'i Geliştir Yardımı varsayılan olarak açıkken WebBrain\'i geliştirmek için saklanabilir ve kullanılabilir. Bunu Ayarlar → Genel olarak kapatabilirsiniz.', + 'ob.cloud.body': "WebBrain Compass haftalık ücretsiz payla hazır. Seçilen Compass konuşmaları, WebBrain'i Geliştir Yardımı varsayılan olarak açıkken WebBrain'i geliştirmek için saklanabilir ve kullanılabilir. Bunu Ayarlar → Gelişmiş bölümünden kapatabilirsiniz.", 'ob.cloud.change': 'Değiştir', 'ob.cloud.using': 'WebBrain Compass kullanılıyor.', @@ -370,7 +361,7 @@ export default { 'sp.step.result_label': 'Sonuç', 'sp.api.enabled_html': '🔓 Bu konuşma için API mutasyonları etkin. Aracı artık bir adım için API\'nin arayüzden daha güvenilir olduğuna karar verirse fetch_url ve execute_js üzerinden POST/PUT/PATCH/DELETE kullanabilir. Varsayılan yine arayüz öncelikli kalır. Bu bayrak konuşmayı sıfırladığında temizlenir.', - 'sp.permissions.disabled_html': '⚠️ İzin istemleri KAPALI. WebBrain, izin istemeden tıklayacak, yazacak, gezinecek, JavaScript çalıştıracak, dosya yükleyecek, indirecek, kaydı başlatacak ve gelecek görevler zamanlayacaktır. Bunu Ayarlar → İzinler → Önemli işlemlerden önce sor seçeneğinden yeniden etkinleştirin.', + 'sp.permissions.disabled_html': '⚠️ İzin istemleri KAPALI. WebBrain, izin istemeden tıklayacak, yazacak, gezinecek, JavaScript çalıştıracak, dosya yükleyecek, indirecek, kaydı başlatacak ve gelecek görevler zamanlayacaktır. Bunu mikrofonun yanındaki ⚠ düğmesinden yeniden etkinleştirin.', 'sp.permissions.button': 'İzin istemleri: açık', 'sp.permissions.button_off': 'İzin istemleri: kapalı', 'sp.permissions.gate_desc': 'WebBrain bir sitede ilk kez tıklarken, yazarken, indirirken veya kod çalıştırırken izin ister.', @@ -443,8 +434,19 @@ export default { 'tool.wait_for_element.selector': '«{selector}» bekleniyor', 'st.title': 'WebBrain Ayarları', - 'st.subtitle': 'LLM sağlayıcılarını ve tercihleri yapılandır · v{version}', + 'st.subtitle': "WebBrain'in nasıl çalıştığını yapılandır · v{version}", 'st.tab.display': 'Genel', + 'st.tab.budgets': 'Bütçeler', + 'st.tab.advanced': 'Gelişmiş', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Konuşma', + 'st.tab.generative': 'Üretken', + 'st.tab.decision': 'Karar', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain Sağlayıcıları', + 'st.providers_page.subtitle': "WebBrain'in kullandığı modelleri seç · v{version}", + 'st.permissions_page.title': 'WebBrain İzinleri', + 'st.permissions_page.subtitle': "WebBrain'in önce sormadan işlem yapabileceği siteler", 'st.tab.providers': 'Sağlayıcılar', 'st.tab.vision': 'Görme', 'st.tab.profile': 'Profil', @@ -460,8 +462,6 @@ export default { 'st.account.update_payment': 'Ödeme yöntemini güncelle', 'st.account.manage_billing': 'Faturalandırmayı yönet', - 'st.display.language.label': 'Dil', - 'st.display.language.desc': 'WebBrain eklentisinin arayüz dili.', 'st.display.verbose.label': 'Ayrıntılı mod', 'st.display.verbose.desc': 'Tüm araç çağrı ayrıntılarını, argümanları ve ham JSON sonuçlarını gösterir. Daha temiz bir sohbet deneyimi için varsayılan olarak kapalıdır.', 'st.display.selection_shortcut.label': 'Seçim kısayolu', @@ -475,13 +475,11 @@ export default { 'st.display.auto_screenshot.label': 'Otomatik ekran görüntüsü', "st.display.auto_screenshot.desc": "Aracı sayfada işlem yaptıktan sonra görüntüleme alanının ekran görüntüsünü otomatik olarak alır; böylece seçilen görüntü rotası değişikliği görebilir. Daha fazla token tüketir. Görüntü işleme kullanılamıyorsa zenginleştirme atlanır ve görev bir durum bildirimiyle devam eder.", 'st.display.auto_screenshot.off': 'Kapalı', - 'st.display.auto_screenshot.navigation': 'Gezinmede', - 'st.display.auto_screenshot.state_change': 'Durum değiştiğinde (varsayılan)', + 'st.display.auto_screenshot.navigation': 'Gezinmede (varsayılan)', + 'st.display.auto_screenshot.state_change': 'Durum değiştiğinde', 'st.display.auto_screenshot.every_step': 'Her adımda', 'st.display.tracing.label': 'İzleri kaydet (model karşılaştırması için)', - 'st.display.tracing.desc_html': 'Her çalışmayı (LLM istekleri, yanıtlar, araç çağrıları, ekran görüntüleri) yerel IndexedDB\'de saklar, böylece modelleri yan yana inceleyip karşılaştırabilirsin. Ayrı bir İzler sekmesinde açılır. Her adımda diske yazdığı için varsayılan olarak kapalıdır. İzler sayfasını aç →', - 'st.display.lossless_tracing.label': 'Tüm istek ayrıntılarını kaydet (hata ayıklama katmanı)', - 'st.display.lossless_tracing.desc_html': 'Her LLM isteğinin tam prompt, mesaj ve araç şemalarını içeriksiz özetler yerine de kalıcı olarak kaydeder ve her araç sonucundan en fazla 200 KB tutar. Derin hata ayıklama ve istek yeniden yapılandırmasını sağlar. Varsayılan olarak kapalıdır çünkü konuşma içeriğinizi yerel olarak yazar ve çok daha fazla disk kullanır. İz kaydının açık olmasını gerektirir.', + 'st.display.tracing.desc_html': "Her çalışmayı (LLM istekleri, yanıtlar, araç çağrıları, ekran görüntüleri) yerel IndexedDB'de saklar, böylece modelleri yan yana inceleyip karşılaştırabilirsin; her LLM isteğinin tam prompt, mesaj ve araç şemaları ile her araç sonucundan en fazla 200 KB da kaydedilir. Ayrı bir İzler sekmesinde açılır. Konuşma içeriğini yerel olarak yazdığı ve çok daha fazla disk kullandığı için varsayılan olarak kapalıdır. İzler sayfasını aç →", 'st.display.allow_local_network.label': 'Aracının yerel ağa erişmesine izin ver', 'st.display.allow_local_network.desc': 'Aracının fetch_url aracının loopback (127.0.0.1, localhost) ve özel/RFC1918 adreslerine (10.x, 192.168.x, 172.16–31.x) ulaşmasına izin verir. Yerel geliştirme sunucuları, intranet araçları veya kendi sunucundaki API\'lar için kullanışlıdır. Varsayılan olarak kapalıdır. Kapalıyken özel veya loopback IP adresi doğrudan yazılmış URL’ler ve localhost adları engellenir. DNS çözümlemesi denetlenmez; diğer ana makine adları yerel adreslere ulaşabilir. Doğrudan yazılmış bulut meta-veri IP adresleri (169.254.169.254) ile listedeki meta-veri adları veya *.internal/*.local adları açıkken de engellenir.', 'st.display.notify_sound.label': "Bildirim sesleri", @@ -691,7 +689,6 @@ export default { "sp.vision.on": "Aktif sağlayıcı için görme kipi etkin.", "sp.vision.off": "Aktif sağlayıcı için görme kipi devre dışı.", "sp.vision.error": "Görme kipi değiştirilemedi: {msg}", - "st.tab.multimodal": "Yardımcı Modeller", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Önerilir. Açıkken WebBrain, bir sitede ilk kez tıkladığında, yazdığında, gezindiğinde, JavaScript çalıştırdığında, dosya yüklediğinde, indirdiğinde veya kayıt yaptığında izin ister (sonra seçimini hatırlar). Tamamen güvendiğin sitelerde hızlı, istemsiz kullanım için kapat.", "st.perms.gate.warning": "⚠️ İzin istemleri KAPALI. WebBrain herhangi bir sitede SORMADAN tıklayacak, yazacak, gezinecek, JavaScript çalıştıracak, dosya yükleyecek, indirecek ve kayıt yapacak — içeriği saldırgan kontrolünde olabilecek sayfalar dahil. Sayfa içeriği yine de dahili olarak güvenilmez kabul edilir, ama enjekte edilmiş bir talimatın bir işlemi tetiklemesini hiçbir şey engellemez. Bunu yalnızca asistanı kullandığın her siteye tamamen güveniyorsan kapalı bırak.", @@ -709,7 +706,7 @@ export default { "st.display.download_directory.placeholder": "Sistem varsayılanı", "st.display.download_directory.error": "WebBrain veya Work/WebBrain gibi göreli bir klasör kullanın. Mutlak yollara ve “..” kullanımına izin verilmez.", "st.display.strict_secret.label": "Katı gizli bilgi işleme", - "st.display.strict_secret.desc": "Özellikle istesen bile, özetlerde veya asistan metninde kimlik bilgilerini (parolalar, API anahtarları, jetonlar, OTP'ler) aktarmayı reddet. Düzenli olarak iz dosyaları paylaşıyorsan veya ekran paylaşımı yapıyorsan kullanışlıdır. Varsayılan olarak kapalı: böylece aracı, istediğin tam değeri ihtiyacın olduğunda yineleyebilir. `done` özetlerinin derli toplu kalmasını ve kimlik bilgilerinin asla tekrarlanmamasını istiyorsan aç (Ayarlar → Güvenlik).", + "st.display.strict_secret.desc": "Özellikle istesen bile, özetlerde veya asistan metninde kimlik bilgilerini (parolalar, API anahtarları, jetonlar, OTP'ler) aktarmayı reddet. Düzenli olarak iz dosyaları paylaşıyorsan veya ekran paylaşımı yapıyorsan kullanışlıdır. Varsayılan olarak kapalı: böylece aracı, istediğin tam değeri ihtiyacın olduğunda yineleyebilir. `done` özetlerinin derli toplu kalmasını ve kimlik bilgilerinin asla tekrarlanmamasını istiyorsan aç.", "st.display.request_timeout.label": "LLM istek zaman aşımı", "st.display.request_timeout.desc": "Yanıt başlıkları ve akıştaki yanıt parçaları arasındaki her duraklama için en uzun bekleme süresi. Varsayılan: 120 saniye. Yavaş yerel modellerde, özellikle CPU üzerinde veya büyük bağlamla çalışırken bu süreyi artırın.", "st.providers.filter.all": "Tümü", @@ -906,8 +903,8 @@ export default { 'sp.slash.busy_only_oob': 'WebBrain meşgulken mesajlar kuyruğa alınır. Yalnızca /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces ve /verbose slash komutları olarak hemen çalışabilir.', 'tool.go_back': 'Geri gidiliyor', 'tool.go_forward': 'İleri gidiliyor', - 'st.display.search.placeholder': 'Genel ayarları ara', - 'st.display.search.empty': 'Eşleşen Genel ayar yok.', + 'st.display.search.placeholder': 'Ayarlarda ara', + 'st.display.search.empty': 'Eşleşen ayar yok.', 'st.display.advanced': 'Gelişmiş', ...getApocalypseModeCopy('tr'), ...getEmergencyBoxCopy('tr'), @@ -1150,7 +1147,6 @@ export default { "st.imageBudget.maxDimension.desc": "Görüşe gönderilen herhangi bir ekran görüntüsünün en uzun kenarı (genişlik veya yükseklik) piksel cinsinden. Daha küçük üst sınır görüntüleri göndermeden önce küçültür, token ve maliyeti düşürür. Daha büyük üst sınır sadakati korur.", "st.imageBudget.warning": "⚠️ Bu ayarlar görüş için yakalanan ekran görüntülerine uygulanır (otomatik görüntü, /screenshot, tam sayfa, verify_form). Elle kaydedilen tam çözünürlüklü görüntüler etkilenmez. «Image detail» OpenAI tarzı uçlar tarafından uygulanır; diğer sağlayıcılar yok sayabilir.", - "st.redaction.heading": "Ekran görüntüsü sansürleme", "st.redaction.toggle.label": "Ekran görüntülerindeki hassas içeriği sansürle", "st.redaction.toggle.desc": "Bir ekran görüntüsü bir görüntü modeline gönderilmeden önce, form alanlarını ve e-posta ya da telefon numarasına benzeyen metni bulanıklaştırır. Algılama tamamen cihazınızda çalışır — fazladan hiçbir şey iletilmez.", "st.redaction.warning": "⚠️ En iyi çaba ilkesiyle çalışır ve fail-open'dır: sansürleme bir sayfada çalışamazsa (örneğin bir gezinmeden hemen sonra, PDF görüntüleyicilerde veya kısıtlı tarayıcı sayfalarında), ekran görüntüsü yine de sansürlenmeden gönderilir. Algılama yalnızca DOM sezgisel yöntemlerini kullanır — bir canvas üzerine çizilmiş metin, görsellerin içindeki kişisel veriler veya form alanı ya da e-posta/telefon metni olarak tanınmayan herhangi bir şey gözden kaçabilir; modele gönderilen sayfa metni de bu ayarla sansürlenmez. Bu bir güvenlik garantisi DEĞİLDİR. Tam gizlilik için yerel/çevrimdışı bir model kullanın (llama.cpp, Ollama): bu durumda ekran görüntüleri makinenizden hiç çıkmaz ve sansürleme gereksiz hale gelir.", @@ -1164,7 +1160,7 @@ export default { "sp.slash.export_traces_full": "Ekran görüntüleri dahil kaydedilmiş izleme oturumunun tamamını JSON olarak dışa aktar", "sp.export_traces.recording_truncated": "Kaydedilmiş tüm kayıtlar JSON olarak dışa aktarıldı. Kayıt sırasında atlanan içerikler dışa aktarılarak geri getirilemez.", "sp.slash.export_traces": "Araç zincirini dışa aktar (izler)", - "sp.export_traces.none": "Bu konuşma için iz yok. Ayarlar'da İzleri kaydet seçeneğini açıp yeniden çalıştırın.", + "sp.export_traces.none": "Bu konuşma için iz yok. Ayarlar → Gelişmiş bölümünde İzleri kaydet seçeneğini açıp yeniden çalıştırın.", "sp.export_traces.error": "İzler dışa aktarılamadı.", "sp.export_traces.done": "Araç zinciri dışa aktarıldı.", "sp.export_traces.no_conversation": "Henüz dışa aktarılacak bir şey yok — önce bir konuşma başlatın.", @@ -1172,7 +1168,7 @@ export default { "sp.export_traces.truncated": "Araç zinciri dışa aktarıldı. Bu konuşmanın çok izi varsa eski turlar eksik olabilir.", "st.display.help_improve.label": "WebBrain’i İyileştirmeye Yardım Et", "st.display.help_improve.desc_html": "Seçili WebBrain Compass etkileşimlerinin saklanmasına ve değerlendirme, iyileştirme, ince ayar ve eğitim için kullanılmasına izin verin. Varsayılan olarak açıktır. Gelecekteki Compass etkileşimlerinin bu amaçlarla kullanılmasını önlemek için kapatın. WebBrain, yerel model ve kendi API isteklerinizi yalnızca “Araştırma için sorguları paylaş” seçeneğini açtığınız sağlayıcılardan toplar. Gizlilik politikası →", - "st.providers.webbrain_data_use.body": "Ücretsiz günlük WebBrain Compass kullanımı dahildir. WebBrain’i İyileştirmeye Yardım Et varsayılan olarak açıkken, seçili Compass konuşmaları değerlendirme, iyileştirme, ince ayar ve eğitim için saklanabilir ve kullanılabilir. Gelecekteki Compass etkileşimlerini bu kullanımların dışında tutmak için Genel → Gelişmiş bölümünden kapatın. WebBrain, yerel model ve kendi API isteklerinizi yalnızca ilgili sağlayıcıda “Araştırma için sorguları paylaş” seçeneğini açtığınızda toplar. {privacyLink}. Daha fazla kullanım için {subscribeLink} adresinden abone olun. Faturalandırmayı {accountLink} adresinden yönetin.", + "st.providers.webbrain_data_use.body": "Ücretsiz günlük WebBrain Compass kullanımı dahildir. WebBrain’i İyileştirmeye Yardım Et varsayılan olarak açıkken, seçili Compass konuşmaları değerlendirme, iyileştirme, ince ayar ve eğitim için saklanabilir ve kullanılabilir. Gelecekteki Compass etkileşimlerini bu kullanımların dışında tutmak için Ayarlar → Gelişmiş bölümünden kapatın. WebBrain, yerel model ve kendi API isteklerinizi yalnızca ilgili sağlayıcıda “Araştırma için sorguları paylaş” seçeneğini açtığınızda toplar. {privacyLink}. Daha fazla kullanım için {subscribeLink} adresinden abone olun. Faturalandırmayı {accountLink} adresinden yönetin.", 'st.providers.share_research.label': "Araştırma için sorguları paylaş", 'st.providers.share_research.hint': "Bu sağlayıcının sınırlı istemlerini, yanıtlarını, araç etkileşimlerini ve tanılama izi metaverilerini (adımlar, araç adları, durumlar, hatalar ve süreler) değerlendirme amacıyla WebBrain’e gönderir. Görseller ve ikili ekler kaldırılır; metin kısaltılır.", 'st.providers.share_research.confirm': "Bu sağlayıcının sorguları ve tanılama izleri araştırma için WebBrain ile paylaşılsın mı?\n\nAçıkken istemleriniz, yanıtlarınız, araç etkileşimleriniz ve başarısız çalıştırmalar dâhil sınırlı tanılama izi metaverileri (araç adları, durumlar, hatalar ve süreler) sağlayıcı ve model adıyla birlikte gönderilir. Ekran görüntüleri ve ikili ekler yüklenmez. Diğer metin kısaltıldıktan sonra olduğu gibi gönderilir; hassas kişisel veri paylaşmamaya dikkat edin. Gelecekteki paylaşımları durdurmak için bunu istediğiniz zaman kapatabilirsiniz.", @@ -1218,7 +1214,7 @@ export default { "sp.perm.skip_hint": "Daha az kesinti mi istiyorsunuz? “Her zaman izin ver” bu siteyi hatırlar. Aşağıdaki komut, WebBrain izin istemlerini tüm sitelerde kapatır.", "sp.perm.insert_skip_command": "/dangerously-skip-permissions komutunu ekle", "sp.perm.skip_hint_draft": "Taslağınız değişmedi. Komutu eklemeden önce taslağı temizleyin.", - "ob.act.permissions_tip": "İzin istemleri varsayılan olarak açıktır. İleri düzey kullanıcılar /dangerously-skip-permissions ile bunları tüm sitelerde kapatabilir ve Ayarlar → İzinler bölümünden yeniden açabilir.", + "ob.act.permissions_tip": "İzin istemleri varsayılan olarak açıktır. İleri düzey kullanıcılar /dangerously-skip-permissions ile bunları tüm sitelerde kapatabilir ve mikrofonun yanındaki ⚠ düğmesinden yeniden açabilir.", 'st.provider.field.cache_read_cost_per_million': "Tahmini önbellek okuma maliyeti ($ / 1M token)", 'st.provider.field.cache_write_cost_per_million': "Tahmini 5 dakikalık önbellek yazma maliyeti ($ / 1M token)", 'st.provider.field.cache_write_1h_cost_per_million': "Tahmini 1 saatlik önbellek yazma maliyeti ($ / 1M token)", @@ -1280,5 +1276,5 @@ export default { "st.sync.confirm.reset": "Şifrelenmiş bulut kopyası bu cihazın mevcut WebBrain kurulumuyla değiştirilsin mi?", "st.sync.consent.legacy": "Şifreli senkronizasyon açılsın mı? WebBrain, anılarınızın, profil otomatik doldurmanızın ve API anahtarı sağlayıcı ayarlarınızın uçtan uca şifrelenmiş bir kopyasını WebBrain Compass'a iletecektir. Sohbet geçmişi ve OAuth oturum açma işlemleri senkronize edilmez.", "st.sync.consent.denied": "Şifrelenmiş senkronizasyon izni verilmedi.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', }; diff --git a/src/firefox/src/ui/locales/uk.js b/src/firefox/src/ui/locales/uk.js index fd7bbb4f46..19212dbef3 100644 --- a/src/firefox/src/ui/locales/uk.js +++ b/src/firefox/src/ui/locales/uk.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': 'Зменшити інтерфейс розширення', 'sp.ui_scale.increase': 'Збільшити інтерфейс розширення', 'sp.ui_scale.reset': 'Скинути', - 'st.display.ui_scale.label': 'Масштаб інтерфейсу розширення', - 'st.display.ui_scale.decrease': 'Зменшити інтерфейс розширення', - 'st.display.ui_scale.increase': 'Збільшити інтерфейс розширення', - 'st.display.ui_scale.reset': 'Скинути', - 'st.display.ui_scale.desc': 'Змінює розмір бічної панелі й окремого вікна чату, не змінюючи масштаб сторінки.', - 'st.display.ui_scale.shortcuts': 'Спеціальні комбінації клавіш: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Не призначено', - 'st.display.ui_scale.manage_shortcuts': 'Налаштувати комбінації клавіш', 'tool.delegate_research': 'Дослідження за допомогою ChatGPT', 'st.display.research_escalation.label': 'Ескалація досліджень', 'st.display.research_escalation.desc': 'Якщо функцію ввімкнено, WebBrain може попросити дозвіл перед надсиланням до ChatGPT надзвичайно складного дослідницького запиту лише для читання. За замовчуванням вимкнено. Точний запит передається лише після вашої явної згоди.', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "Не продовжувати", "sp.recipient.reason_unrequested": "WebBrain не зміг зрозуміти з вашого запиту, що потрібно надіслати повідомлення. Відкрита розмова на {host}: {recipient}.", "sp.recipient.reason_unnamed": "WebBrain не зміг зрозуміти з вашого запиту, кому надіслати це повідомлення. Відкрита розмова на {host}: {recipient}.", - 'st.tab.permissions': "Дозволи", 'st.perms.revoke': "Відкликати", 'st.perms.clear_all': "Очистити всі дозволи", 'st.perms.gate.label': "Питати перед важливими діями", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': 'Почати', 'ob.btn.skip': 'Пропустити зараз', 'ob.btn.start': 'Почати', - 'ob.cloud.body': 'WebBrain Compass готовий з безкоштовним тижневим лімітом. Вибрані розмови Compass можуть бути збережені та використані для покращення WebBrain, поки Допомога в покращенні WebBrain увімкнена за замовчуванням. Ви можете вимкнути це в Налаштування → Загальне.', + 'ob.cloud.body': 'WebBrain Compass готовий з безкоштовним тижневим лімітом. Вибрані розмови Compass можуть бути збережені та використані для покращення WebBrain, поки Допомога в покращенні WebBrain увімкнена за замовчуванням. Ви можете вимкнути це в Налаштування → Розширені.', 'ob.cloud.change': 'Змінити', 'ob.cloud.using': 'Використовується WebBrain Compass.', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': 'Результат', 'sp.api.enabled_html': '🔓 Зміни через API ввімкнено для цього діалогу. Агент тепер може використовувати POST/PUT/PATCH/DELETE через fetch_url та execute_js, якщо вважає API надійнішим за інтерфейс. За замовчуванням пріоритет — інтерфейс. Цей прапор скидається після очищення діалогу.', - 'sp.permissions.disabled_html': '⚠️ Запити дозволів ВИМКНЕНО. WebBrain натискатиме, друкуватиме, переходитиме, запускатиме JavaScript, вивантажуватиме, завантажуватиме, записуватиме та заплановуватиме майбутню роботу без попереднього запиту. Увімкніть знову в Налаштуваннях → Дозволи → Питати перед важливими діями.', + 'sp.permissions.disabled_html': '⚠️ Запити дозволів ВИМКНЕНО. WebBrain натискатиме, друкуватиме, переходитиме, запускатиме JavaScript, вивантажуватиме, завантажуватиме, записуватиме та заплановуватиме майбутню роботу без попереднього запиту. Увімкніть знову кнопкою ⚠ поруч із мікрофоном.', 'sp.permissions.button': 'Запити дозволів: увімкнено', 'sp.permissions.button_off': 'Запити дозволів: вимкнено', 'sp.permissions.gate_desc': 'WebBrain питає, коли вперше натискає, вводить текст, завантажує файли або запускає код на сайті.', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': 'Очікування «{selector}»', 'st.title': 'Налаштування WebBrain', - 'st.subtitle': 'Налаштуйте провайдерів LLM та параметри · v{version}', + 'st.subtitle': 'Налаштуйте роботу WebBrain · v{version}', 'st.tab.display': 'Загальні', + 'st.tab.budgets': 'Бюджети', + 'st.tab.advanced': 'Розширені', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Мовлення', + 'st.tab.generative': 'Генерація', + 'st.tab.decision': 'Рішення', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Провайдери WebBrain', + 'st.providers_page.subtitle': 'Виберіть моделі, які використовує WebBrain · v{version}', + 'st.permissions_page.title': 'Дозволи WebBrain', + 'st.permissions_page.subtitle': 'Сайти, де WebBrain може діяти, не питаючи спершу', 'st.tab.providers': 'Провайдери', 'st.tab.vision': 'Зір', 'st.tab.profile': 'Профіль', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "Оновити спосіб оплати", 'st.account.manage_billing': 'Керування оплатою', - 'st.display.language.label': 'Мова', - 'st.display.language.desc': 'Мова інтерфейсу плагіна WebBrain.', 'st.display.verbose.label': 'Детальний режим', 'st.display.verbose.desc': 'Показувати повні деталі викликів інструментів, аргументи та сирий JSON-результат. За замовчуванням вимкнено для чистішого чату.', 'st.display.selection_shortcut.label': 'Швидка дія для виділення', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': 'Авто-скриншот', "st.display.auto_screenshot.desc": "Автоматично робіть знімок області перегляду після дій агента, щоб вибраний маршрут обробки зображень бачив зміни. Це витрачає більше токенів. Якщо зір недоступний, збагачення пропускається, а завдання продовжується зі сповіщенням про стан.", 'st.display.auto_screenshot.off': 'Вимкнено', - 'st.display.auto_screenshot.navigation': 'Під час навігації', - 'st.display.auto_screenshot.state_change': 'При зміні стану (за замовчуванням)', + 'st.display.auto_screenshot.navigation': 'Під час навігації (за замовчуванням)', + 'st.display.auto_screenshot.state_change': 'При зміні стану', 'st.display.auto_screenshot.every_step': 'Кожен крок', 'st.display.tracing.label': 'Записувати траси (для порівняння моделей)', - 'st.display.tracing.desc_html': 'Зберігати кожен запуск (LLM-запити, відповіді, виклики інструментів, скриншоти) у локальну IndexedDB, щоб переглядати й порівнювати моделі поряд. Відкривається в окремій вкладці «Траси». За замовчуванням вимкнено, бо додає запис на диск на кожному кроці. Відкрити сторінку трас →', - 'st.display.lossless_tracing.label': 'Записувати повні деталі запитів (рівень налагодження)', - 'st.display.lossless_tracing.desc_html': 'Також зберігає повні промпти, повідомлення та схеми інструментів кожного LLM-запиту замість стислих зведень без вмісту, та тримає до 200 КБ кожного результату інструмента. Дає змогу глибокого налагодження та відтворення запитів. Вимкнено за замовчуванням, бо записує вміст вашої розмови локально та займає значно більше диска. Потребує увімкненого запису трас.', + 'st.display.tracing.desc_html': 'Зберігати кожен запуск (LLM-запити, відповіді, виклики інструментів, скриншоти) у локальну IndexedDB, щоб переглядати й порівнювати моделі поряд, включно з повними промптами, повідомленнями та схемами інструментів кожного LLM-запиту і до 200 КБ кожного результату інструмента. Відкривається в окремій вкладці «Траси». Вимкнено за замовчуванням, бо записує вміст вашої розмови локально та займає значно більше диска. Відкрити сторінку трас →', 'st.display.allow_local_network.label': 'Дозволити агенту доступ до локальної мережі', 'st.display.allow_local_network.desc': 'Дозволяє інструменту fetch_url агента звертатися до loopback (127.0.0.1, localhost) та приватних адрес RFC1918 (10.x, 192.168.x, 172.16–31.x). Корисно для локальних серверів розробки, інтранет-інструментів і self-hosted API. За замовчуванням вимкнено. У цьому стані блокуються URL із безпосередньо записаними приватними або loopback IP-адресами та імена localhost. Результат DNS не перевіряється, тому інші імена хостів можуть вести до локальних адрес. Безпосередньо записані IP-адреси метаданих хмари (169.254.169.254) і перелічені імена метаданих або *.internal/*.local залишаються заблокованими навіть після ввімкнення.', 'st.display.notify_sound.label': "Звуки сповіщень", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "Режим зору увімкнено для активного провайдера.", "sp.vision.off": "Режим зору вимкнено для активного провайдера.", "sp.vision.error": "Не вдалося перемкнути режим зору: {msg}", - "st.tab.multimodal": "Допоміжні моделі", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "Рекомендовано. Коли увімкнено, WebBrain запитує дозвіл, коли вперше натискає, друкує, переходить, запускає JavaScript, вивантажує, завантажує або записує на сайті (а потім запам'ятовує ваш вибір). Вимкніть для швидкого використання без запитів на сайтах, яким ви повністю довіряєте.", "st.perms.gate.warning": "⚠️ Запити дозволів ВИМКНЕНО. WebBrain натискатиме, друкуватиме, переходитиме, запускатиме JavaScript, вивантажуватиме, завантажуватиме й записуватиме на будь-якому сайті БЕЗ запитань — зокрема на сторінках, вміст яких може контролювати зловмисник. Вміст сторінок усе одно вважається ненадійним усередині, але ніщо не завадить впровадженій інструкції запустити дію. Залишайте це вимкненим лише якщо повністю довіряєте кожному сайту, на якому користуєтеся асистентом.", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "Системне значення", "st.display.download_directory.error": "Використовуйте відносну папку, наприклад WebBrain або Work/WebBrain. Абсолютні шляхи та «..» заборонені.", "st.display.strict_secret.label": "Суворе поводження з секретами", - "st.display.strict_secret.desc": "Відмовлятися наводити облікові дані (паролі, API-ключі, токени, OTP) у підсумках чи тексті асистента — навіть коли ви явно про них просите. Корисно, якщо ви регулярно ділитеся файлами трас або демонструєте екран. Вимкнено за замовчуванням, щоб агент міг повторити точне значення, яке ви попросите, коли воно вам потрібне. Увімкніть (Налаштування → Безпека), коли хочете, щоб підсумки `done` лишалися охайними, а облікові дані ніколи не повторювались.", + "st.display.strict_secret.desc": "Відмовлятися наводити облікові дані (паролі, API-ключі, токени, OTP) у підсумках чи тексті асистента — навіть коли ви явно про них просите. Корисно, якщо ви регулярно ділитеся файлами трас або демонструєте екран. Вимкнено за замовчуванням, щоб агент міг повторити точне значення, яке ви попросите, коли воно вам потрібне. Увімкніть, коли хочете, щоб підсумки `done` лишалися охайними, а облікові дані ніколи не повторювались.", "st.display.request_timeout.label": "Тайм-аут запиту до LLM", "st.display.request_timeout.desc": "Максимальний час очікування заголовків відповіді та кожної паузи між частинами потокової відповіді. За замовчуванням: 120 с. Збільште його для повільних локальних моделей, особливо на CPU або з великим контекстом.", "st.providers.filter.all": "Усі", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'Поки WebBrain зайнятий, повідомлення ставляться в чергу. Лише /help, /progress, /btw, /scratchpad, /memory, /schedule --list, /watch, /dangerously-skip-permissions, /screenshot, /export, /export --traces та /verbose можуть запускатися одразу як slash-команди.', 'tool.go_back': 'Назад', 'tool.go_forward': 'Вперед', - 'st.display.search.placeholder': 'Пошук у загальних налаштуваннях', - 'st.display.search.empty': 'Немає збігів у загальних налаштуваннях.', + 'st.display.search.placeholder': 'Пошук у налаштуваннях', + 'st.display.search.empty': 'Немає відповідних налаштувань.', 'st.display.advanced': 'Розширені', ...getApocalypseModeCopy('uk'), ...getEmergencyBoxCopy('uk'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "Найбільша сторона (ширина або висота) у пікселях для будь-якого знімка, надісланого у vision. Менша межа стискає зображення до надсилання, зменшуючи токени й вартість. Більша межа зберігає точність.", "st.imageBudget.warning": "⚠️ Ці налаштування застосовуються до знімків для vision (авто-знімок, /screenshot, вся сторінка, verify_form). Вручну збережені зображення в повній роздільності не зачіпаються. «Image detail» враховують endpoint’и в стилі OpenAI; інші провайдери можуть ігнорувати.", - "st.redaction.heading": "Редагування знімків екрана", "st.redaction.toggle.label": "Приховувати чутливий вміст на знімках екрана", "st.redaction.toggle.desc": "Перед надсиланням знімка екрана моделі зору розмиває поля форм і текст, схожий на email чи номер телефону. Виявлення виконується повністю на вашому пристрої — нічого зайвого не передається.", "st.redaction.warning": "⚠️ Працює за принципом «найкращих зусиль» і fail-open: якщо редагування не може виконатися на сторінці (наприклад, одразу після переходу, у переглядачах PDF або на обмежених сторінках браузера), знімок екрана все одно надсилається невідредагованим. Виявлення використовує лише евристики DOM — текст, намальований на canvas, персональні дані всередині зображень або будь-що, не розпізнане як поле форми чи текст email/телефону, може залишитися непоміченим, а текст сторінки, що надсилається моделі, цим налаштуванням не редагується. Це НЕ гарантія безпеки. Для повної приватності використовуйте локальну/офлайн-модель (llama.cpp, Ollama): тоді знімки екрана взагалі не покидають ваш пристрій і редагування стає непотрібним.", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "Експортувати весь збережений сеанс трасування у JSON, включно зі знімками екрана", "sp.export_traces.recording_truncated": "Усі збережені записи експортовано у JSON. Вміст, пропущений під час запису, неможливо відновити експортом.", "sp.slash.export_traces": "Експортувати ланцюг інструментів (трасування)", - "sp.export_traces.none": "Немає трасувань для цієї розмови. Увімкніть «Записувати трасування» в налаштуваннях і запустіть знову.", + "sp.export_traces.none": "Немає трасувань для цієї розмови. Увімкніть «Записувати трасування» у розділі Налаштування → Розширені і запустіть знову.", "sp.export_traces.error": "Не вдалося експортувати трасування.", "sp.export_traces.done": "Ланцюг інструментів експортовано.", "sp.export_traces.no_conversation": "Поки немає що експортувати — спочатку почніть розмову.", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "Ланцюг інструментів експортовано. Старі ходи можуть бути відсутні, якщо в розмові багато трасувань.", "st.display.help_improve.label": "Допомагати вдосконалювати WebBrain", "st.display.help_improve.desc_html": "Дозволити зберігати вибрані взаємодії з WebBrain Compass і використовувати їх для оцінювання, вдосконалення, тонкого налаштування та навчання. Увімкнено за замовчуванням. Вимкніть, щоб майбутні взаємодії з Compass не використовувалися для цих цілей. WebBrain збирає запити до локальних моделей і ваших власних API лише від провайдерів, у яких ви ввімкнули «Ділитися запитами для досліджень». Політика конфіденційності →", - "st.providers.webbrain_data_use.body": "Безкоштовне щоденне використання WebBrain Compass включено. Поки параметр «Допомагати вдосконалювати WebBrain» увімкнено за замовчуванням, вибрані розмови Compass можуть зберігатися й використовуватися для оцінювання, вдосконалення, тонкого налаштування та навчання. Вимкніть його в розділі «Загальні → Розширені», щоб виключити майбутні взаємодії з Compass із такого використання. WebBrain збирає запити до локальних моделей і ваших власних API, лише коли ви вмикаєте опцію «Ділитися запитами для досліджень» для цього провайдера. {privacyLink}. Для більшого обсягу оформіть підписку на {subscribeLink}. Керуйте оплатою на {accountLink}.", + "st.providers.webbrain_data_use.body": "Безкоштовне щоденне використання WebBrain Compass включено. Поки параметр «Допомагати вдосконалювати WebBrain» увімкнено за замовчуванням, вибрані розмови Compass можуть зберігатися й використовуватися для оцінювання, вдосконалення, тонкого налаштування та навчання. Вимкніть його в розділі «Налаштування → Розширені», щоб виключити майбутні взаємодії з Compass із такого використання. WebBrain збирає запити до локальних моделей і ваших власних API, лише коли ви вмикаєте опцію «Ділитися запитами для досліджень» для цього провайдера. {privacyLink}. Для більшого обсягу оформіть підписку на {subscribeLink}. Керуйте оплатою на {accountLink}.", 'st.providers.share_research.label': "Ділитися запитами для досліджень", 'st.providers.share_research.hint': "Надсилає запити й відповіді цього провайдера до WebBrain для оцінювання та вдосконалення, включно з відомостями про провайдера та модель. Зображення й бінарні вкладення вилучаються, а текст скорочується перед надсиланням; решта тексту надсилається без змін.", 'st.providers.share_research.confirm': "Ділитися запитами цього провайдера з WebBrain для досліджень?\n\nЯкщо ввімкнено, ваші запити, відповіді та взаємодії з інструментами цього провайдера надсилатимуться до WebBrain для оцінювання та вдосконалення разом із назвою провайдера й моделі. Текст надсилається без змін після вилучення зображень і скорочення довгого вмісту, тому не передавайте чутливі персональні дані. Ви можете вимкнути це будь-коли, щоб припинити надсилання.", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "Хочете менше переривань? «Завжди дозволяти» запам’ятовує цей сайт. Команда нижче вимикає запити дозволів WebBrain на всіх сайтах.", "sp.perm.insert_skip_command": "Вставити /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "Чернетку не змінено. Очистьте її перед вставленням команди.", - "ob.act.permissions_tip": "Запити дозволів увімкнено за замовчуванням. Досвідчені користувачі можуть вимкнути їх глобально командою /dangerously-skip-permissions і знову ввімкнути в Налаштування → Дозволи.", + "ob.act.permissions_tip": "Запити дозволів увімкнено за замовчуванням. Досвідчені користувачі можуть вимкнути їх глобально командою /dangerously-skip-permissions і знову ввімкнути кнопкою ⚠ поруч із мікрофоном.", 'st.provider.field.cache_read_cost_per_million': "Орієнтовна вартість читання з кешу ($ / 1 млн токенів)", 'st.provider.field.cache_write_cost_per_million': "Орієнтовна вартість запису в кеш на 5 хвилин ($ / 1 млн токенів)", 'st.provider.field.cache_write_1h_cost_per_million': "Орієнтовна вартість запису в кеш на 1 годину ($ / 1 млн токенів)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "Замінити зашифровану хмарну копію на поточні налаштування WebBrain цього пристрою?", "st.sync.consent.legacy": "Увімкнути зашифровану синхронізацію? WebBrain передасть наскрізну зашифровану копію ваших спогадів, автозаповнення профілю та налаштувань постачальника ключа API до WebBrain Compass. Історія чату та вхід OAuth не синхронізуються.", "st.sync.consent.denied": "Дозвіл на зашифровану синхронізацію не надано.", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "Сторінка змінилася під час виконання завдання ({before} → {after}). Завдання продовжується.", 'sp.activity.generating_answer': "Формування відповіді…", 'sp.activity.retrying_response': "Повторна спроба відповіді…", diff --git a/src/firefox/src/ui/locales/vi.js b/src/firefox/src/ui/locales/vi.js index 88e8de5f95..28008f5a3a 100644 --- a/src/firefox/src/ui/locales/vi.js +++ b/src/firefox/src/ui/locales/vi.js @@ -14,14 +14,6 @@ export default { 'sp.ui_scale.decrease': 'Thu nhỏ giao diện tiện ích', 'sp.ui_scale.increase': 'Phóng to giao diện tiện ích', 'sp.ui_scale.reset': 'Đặt lại', - 'st.display.ui_scale.label': 'Thu phóng giao diện tiện ích', - 'st.display.ui_scale.decrease': 'Thu nhỏ giao diện tiện ích', - 'st.display.ui_scale.increase': 'Phóng to giao diện tiện ích', - 'st.display.ui_scale.reset': 'Đặt lại', - 'st.display.ui_scale.desc': 'Thay đổi kích thước thanh bên và cửa sổ trò chuyện riêng mà không thay đổi mức thu phóng trang.', - 'st.display.ui_scale.shortcuts': 'Phím tắt riêng: {shortcuts}', - 'st.display.ui_scale.shortcuts_none': 'Chưa gán', - 'st.display.ui_scale.manage_shortcuts': 'Tùy chỉnh phím tắt', 'tool.delegate_research': 'Đang nghiên cứu với ChatGPT', 'st.display.research_escalation.label': 'Leo thang nghiên cứu', 'st.display.research_escalation.desc': 'Khi được bật, WebBrain có thể xin phép trước khi gửi một lời nhắc nghiên cứu chỉ đọc phức tạp bất thường đến ChatGPT. Tắt theo mặc định. Lời nhắc chính xác chỉ được chia sẻ sau khi bạn chấp thuận rõ ràng.', @@ -497,7 +489,7 @@ export default { 'sp.step.result_label': "kết quả", 'sp.api.enabled_html': "🔓 Đã bật đột biến API cho cuộc trò chuyện này. Hiện tại, tác nhân có thể sử dụng POST/PUT/PATCH/DELETE thông qua get_url và exec_js khi đánh giá API đáng tin cậy hơn giao diện người dùng cho một bước. UI-first vẫn là mặc định. Cờ này sẽ xóa khi bạn đặt lại cuộc trò chuyện.", - 'sp.permissions.disabled_html': "⚠️ Lời nhắc về quyền đang TẮT. WebBrain sẽ nhấp, nhập, điều hướng, chạy JavaScript, tải lên, tải xuống, ghi lại và lên lịch công việc trong tương lai mà không cần hỏi trước. Kích hoạt lại tính năng này từ Cài đặt → Quyền → Hỏi trước các hành động tiếp theo.", + 'sp.permissions.disabled_html': "⚠️ Lời nhắc về quyền đang TẮT. WebBrain sẽ nhấp, nhập, điều hướng, chạy JavaScript, tải lên, tải xuống, ghi lại và lên lịch công việc trong tương lai mà không cần hỏi trước. Bật lại tính năng này từ nút ⚠ bên cạnh micrô.", 'sp.permissions.button': 'Lời nhắc về quyền: bật', 'sp.permissions.button_off': 'Lời nhắc về quyền: tắt', 'sp.permissions.gate_desc': 'WebBrain sẽ hỏi lần đầu tiên nó nhấp, nhập, tải xuống hoặc chạy mã trên một trang web.', @@ -655,7 +647,7 @@ export default { 'ob.act.warn1': "WebBrain có thể chụp ảnh màn hình để lập kế hoạch. Tránh sử dụng chế độ đại lý trên các trang nhạy cảm, chẳng hạn như cổng thông tin sức khỏe, tài chính, hẹn hò hoặc tài khoản cá nhân, trừ khi bạn chấp nhận rủi ro đó.", 'ob.act.warn2': "Nội dung web có thể chứa các nội dung nhắc nhở độc hại được thiết kế để thao túng hành vi của AI.", 'ob.act.warn3': "Luôn xem xét các hành động được đề xuất và dừng các hoạt động có vẻ ngoài dự kiến.", - 'ob.act.permissions_tip': "Lời nhắc về quyền được bật theo mặc định. Người dùng nâng cao có thể vô hiệu hóa chúng trên toàn cầu bằng /dangerously-skip-permissions và bật lại chúng trong Cài đặt → Quyền.", + 'ob.act.permissions_tip': "Lời nhắc về quyền được bật theo mặc định. Người dùng nâng cao có thể vô hiệu hóa chúng trên toàn cầu bằng /dangerously-skip-permissions và bật lại chúng từ nút ⚠ bên cạnh micrô.", 'ob.tokens.title': "Chọn một mô hình", 'ob.tokens.body': "WebBrain cần một mô hình ngôn ngữ để hoạt động. Trước tiên, chúng tôi sẽ kiểm tra các mô hình địa phương. Nếu không có sẵn, hãy mở Cài đặt và thêm nhà cung cấp:", 'ob.tokens.scanning': "Đang kiểm tra các mô hình địa phương...", @@ -681,23 +673,32 @@ export default { 'ob.btn.done': "Bắt đầu", 'ob.btn.skip': "Bỏ qua bây giờ", 'ob.btn.start': 'Bắt đầu', - 'ob.cloud.body': 'WebBrain Compass đã sẵn sàng với hạn ngạch hằng tuần miễn phí. Các cuộc trò chuyện Compass được chọn có thể được giữ lại và sử dụng để cải thiện WebBrain trong khi Trợ giúp Cải thiện WebBrain được bật theo mặc định. Bạn có thể tắt nó trong Cài đặt → Chung.', + 'ob.cloud.body': 'WebBrain Compass đã sẵn sàng với hạn ngạch hằng tuần miễn phí. Các cuộc trò chuyện Compass được chọn có thể được giữ lại và sử dụng để cải thiện WebBrain trong khi Trợ giúp Cải thiện WebBrain được bật theo mặc định. Bạn có thể tắt nó trong Cài đặt → Nâng cao.', 'ob.cloud.change': 'Thay đổi', 'ob.cloud.using': 'Đang sử dụng WebBrain Compass.', // --- Settings ---------------------------------------------------------- 'st.title': "Cài đặt WebBrain", - 'st.subtitle': "Định cấu hình các nhà cung cấp và tùy chọn LLM của bạn · v{version}", + 'st.subtitle': "Định cấu hình cách WebBrain hoạt động · v{version}", 'st.tab.display': "chung", + 'st.tab.budgets': 'Ngân sách', + 'st.tab.advanced': 'Nâng cao', + 'st.tab.llm': 'LLM', + 'st.tab.speech': 'Giọng nói', + 'st.tab.generative': 'Tạo sinh', + 'st.tab.decision': 'Quyết định', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'Nhà cung cấp WebBrain', + 'st.providers_page.subtitle': 'Chọn các mô hình WebBrain sử dụng · v{version}', + 'st.permissions_page.title': 'Quyền của WebBrain', + 'st.permissions_page.subtitle': 'Các trang mà WebBrain có thể thao tác mà không cần hỏi trước', 'st.tab.providers': "Nhà cung cấp", 'st.tab.skills': "Kỹ năng", 'st.tab.vision': "Tầm nhìn", - 'st.tab.multimodal': "Mô hình hỗ trợ", 'st.tab.memory': "Bộ nhớ", 'st.tab.profile': "Hồ sơ", 'st.tab.account': "Tài khoản", 'st.tab.captcha': "CAPTCHA", - 'st.tab.permissions': "Quyền", 'st.perms.gate.label': "Hỏi trước các hành động mang tính hậu quả", 'st.perms.gate.desc': "Khuyến nghị. Khi bật, WebBrain sẽ yêu cầu quyền trong lần đầu tiên nhấp chuột, nhập, điều hướng, chạy JavaScript, tải lên, tải xuống, ghi lại hoặc lên lịch công việc trong tương lai trên một trang web (sau đó ghi nhớ lựa chọn của bạn). Tắt để sử dụng nhanh chóng, không cần nhắc nhở trên các trang web mà bạn hoàn toàn tin tưởng.", @@ -719,8 +720,6 @@ export default { "st.account.update_payment": "Cập nhật phương thức thanh toán", 'st.account.manage_billing': "Quản lý thanh toán", - 'st.display.language.label': "Ngôn ngữ", - 'st.display.language.desc': "Ngôn ngữ giao diện cho plugin WebBrain.", 'st.display.theme.label': "Ngoại hình", 'st.display.theme.desc': "Sáng, tối hoặc tuân theo cài đặt hệ điều hành của bạn.", 'st.display.theme.system': "Hệ thống", @@ -730,8 +729,8 @@ export default { 'st.display.download_directory.desc': "Thư mục con tùy chọn bên trong thư mục Tải xuống của trình duyệt hoặc hệ thống của bạn. Để trống để sử dụng mặc định của hệ thống.", 'st.display.download_directory.placeholder': "Mặc định hệ thống", 'st.display.download_directory.error': "Sử dụng thư mục tương đối như WebBrain hoặc Work/WebBrain. Đường dẫn tuyệt đối và “..” không được phép.", - 'st.display.search.placeholder': "Tìm kiếm Cài đặt chung", - 'st.display.search.empty': "Không có cài đặt chung nào khớp.", + 'st.display.search.placeholder': "Tìm kiếm cài đặt", + 'st.display.search.empty': "Không có cài đặt nào khớp.", 'st.display.advanced': "Nâng cao", ...getApocalypseModeCopy('vi'), ...getEmergencyBoxCopy('vi'), @@ -787,20 +786,18 @@ export default { 'st.display.auto_screenshot.label': "Ảnh chụp màn hình tự động", "st.display.auto_screenshot.desc": "Tự động chụp ảnh màn hình khung nhìn sau khi tác nhân thao tác trên trang để tuyến thị giác đã chọn thấy được thay đổi. Việc này tốn nhiều token hơn. Nếu thị giác không khả dụng, phần làm giàu sẽ bị bỏ qua và tác vụ tiếp tục với thông báo trạng thái.", 'st.display.auto_screenshot.off': "Tắt", - 'st.display.auto_screenshot.navigation': "Trên điều hướng", - 'st.display.auto_screenshot.state_change': "Khi thay đổi trạng thái (mặc định)", + 'st.display.auto_screenshot.navigation': "Trên điều hướng (mặc định)", + 'st.display.auto_screenshot.state_change': "Khi thay đổi trạng thái", 'st.display.auto_screenshot.every_step': "Mỗi bước", 'st.display.tracing.label': "Ghi lại dấu vết (để so sánh mô hình)", - 'st.display.tracing.desc_html': "Duy trì mọi lần chạy (yêu cầu LLM, phản hồi, lệnh gọi công cụ, ảnh chụp màn hình) vào IndexedDB cục bộ để bạn có thể kiểm tra và so sánh các mô hình song song. Mở trong tab Dấu vết riêng biệt. Tắt theo mặc định vì nó thêm ghi vào đĩa mỗi bước. Mở trang Dấu vết →", - 'st.display.lossless_tracing.label': 'Ghi lại chi tiết đầy đủ của yêu cầu (lớp gỡ lỗi)', - 'st.display.lossless_tracing.desc_html': 'Cũng lưu trữ đầy đủ prompt, tin nhắn và cấu trúc công cụ của mỗi yêu cầu LLM thay vì bản tóm tắt không nội dung, đồng thời giữ tối đa 200 KB mỗi kết quả công cụ. Cho phép gỡ lỗi sâu và dựng lại yêu cầu. Tắt theo mặc định vì ghi nội dung hội thoại cục bộ và tốn nhiều dung lượng hơn. Yêu cầu bật tính năng ghi trace.', + 'st.display.tracing.desc_html': "Lưu mọi lần chạy (yêu cầu LLM, phản hồi, lệnh gọi công cụ, ảnh chụp màn hình) vào IndexedDB cục bộ để bạn có thể kiểm tra và so sánh các mô hình song song, bao gồm đầy đủ prompt, tin nhắn và cấu trúc công cụ của mỗi yêu cầu LLM cùng tối đa 200 KB mỗi kết quả công cụ. Mở trong tab Dấu vết riêng biệt. Tắt theo mặc định vì ghi nội dung hội thoại cục bộ và tốn nhiều dung lượng hơn. Mở trang Dấu vết →", 'st.display.cost_session_limit.label': "Phụ cấp phiên chi phí đám mây", 'st.display.cost_session_limit.desc': "Dừng đám mây và OpenRouter chạy trước một lệnh gọi mô hình trả phí khác sau khi phiên này đạt đến mức chi phí được báo cáo hoặc ước tính. Mặc định là 10$.", 'st.display.cost_total_limit.label': "Tổng phụ cấp chi phí đám mây", 'st.display.cost_total_limit.desc': "Theo dõi chi tiêu được báo cáo hoặc ước tính trên đám mây/mô hình OpenRouter trên tiện ích mở rộng và dừng các cuộc gọi trả phí tiếp theo ở mức cho phép. Các nhà cung cấp địa phương không được tính.", 'st.display.cost_reset': "Đặt lại chi tiêu", 'st.display.strict_secret.label': "Xử lý bí mật nghiêm ngặt", - 'st.display.strict_secret.desc': "Từ chối trích dẫn thông tin xác thực (mật khẩu, khóa API, mã thông báo, OTP) trong bản tóm tắt hoặc văn bản trợ lý — ngay cả khi bạn yêu cầu chúng một cách rõ ràng. Hữu ích nếu bạn thường xuyên chia sẻ tệp theo dõi hoặc chia sẻ màn hình. Tắt theo mặc định để tác nhân có thể nhắc lại đúng giá trị bạn yêu cầu khi bạn cần. Bật nó (Cài đặt → Bảo mật) khi bạn muốn bản tóm tắt `done` gọn gàng và thông tin xác thực không bao giờ bị lặp lại.", + 'st.display.strict_secret.desc': "Từ chối trích dẫn thông tin xác thực (mật khẩu, khóa API, mã thông báo, OTP) trong bản tóm tắt hoặc văn bản trợ lý — ngay cả khi bạn yêu cầu chúng một cách rõ ràng. Hữu ích nếu bạn thường xuyên chia sẻ tệp theo dõi hoặc chia sẻ màn hình. Tắt theo mặc định để tác nhân có thể nhắc lại đúng giá trị bạn yêu cầu khi bạn cần. Bật nó khi bạn muốn bản tóm tắt `done` gọn gàng và thông tin xác thực không bao giờ bị lặp lại.", 'st.display.allow_local_network.label': "Cho phép đại lý truy cập mạng cục bộ", 'st.display.allow_local_network.desc': "Cho phép công cụ tìm nạp_url của tác nhân tiếp cận vòng lặp ngược (127.0.0.1, localhost) và các địa chỉ riêng tư/RFC1918 (10.x, 192.168.x, 172.16–31.x). Hữu ích cho các máy chủ phát triển cục bộ, công cụ mạng nội bộ hoặc API tự lưu trữ. Tắt theo mặc định. Khi tắt, URL ghi trực tiếp IP riêng hoặc loopback và tên localhost sẽ bị chặn. Không kiểm tra phân giải DNS, nên các tên máy chủ khác vẫn có thể dẫn tới địa chỉ cục bộ. IP trực tiếp của siêu dữ liệu đám mây (169.254.169.254) và tên siêu dữ liệu trong danh sách hoặc *.internal/*.local vẫn bị chặn ngay cả khi bật.", 'st.display.scheduled_tasks.label': "Nhiệm vụ theo lịch trình", @@ -890,7 +887,7 @@ export default { 'st.providers.compat.value.max': "Tối đa", 'st.providers.compat.value.system': "Hệ thống", 'st.providers.compat.value.developer': "Nhà phát triển", - 'st.providers.webbrain_data_use.body': "Đã bao gồm việc sử dụng WebBrain Compass miễn phí hàng ngày. Mặc dù Trợ giúp cải thiện WebBrain được bật theo mặc định, nhưng các cuộc hội thoại Compass đã chọn có thể được giữ lại và sử dụng để đánh giá, cải tiến, tinh chỉnh và đào tạo. Hãy tắt tính năng này trong Chung → Nâng cao để loại trừ các tương tác Compass trong tương lai khỏi những mục đích sử dụng đó. WebBrain chỉ thu thập yêu cầu mô hình cục bộ và API riêng của bạn khi bạn bật tùy chọn “Chia sẻ truy vấn để nghiên cứu” của nhà cung cấp này. {privacyLink}. Để sử dụng nhiều hơn, hãy đăng ký tại {subscribeLink}. Quản lý thanh toán tại {accountLink}.", + 'st.providers.webbrain_data_use.body': "Đã bao gồm việc sử dụng WebBrain Compass miễn phí hàng ngày. Mặc dù Trợ giúp cải thiện WebBrain được bật theo mặc định, nhưng các cuộc hội thoại Compass đã chọn có thể được giữ lại và sử dụng để đánh giá, cải tiến, tinh chỉnh và đào tạo. Hãy tắt tính năng này trong Cài đặt → Nâng cao để loại trừ các tương tác Compass trong tương lai khỏi những mục đích sử dụng đó. WebBrain chỉ thu thập yêu cầu mô hình cục bộ và API riêng của bạn khi bạn bật tùy chọn “Chia sẻ truy vấn để nghiên cứu” của nhà cung cấp này. {privacyLink}. Để sử dụng nhiều hơn, hãy đăng ký tại {subscribeLink}. Quản lý thanh toán tại {accountLink}.", 'st.providers.share_research.label': "Chia sẻ truy vấn để nghiên cứu", 'st.providers.share_research.hint': "Gửi prompt và phản hồi của nhà cung cấp này tới WebBrain để đánh giá và cải thiện, bao gồm nhà cung cấp và mô hình đã dùng. Hình ảnh và tệp đính kèm nhị phân bị loại bỏ và văn bản bị cắt ngắn trước khi chia sẻ; phần văn bản còn lại được gửi nguyên văn.", 'st.providers.share_research.confirm': "Chia sẻ truy vấn của nhà cung cấp này với WebBrain để nghiên cứu?\n\nKhi bật, prompt, phản hồi và tương tác công cụ của bạn với nhà cung cấp này sẽ được gửi tới WebBrain để đánh giá và cải thiện, cùng tên nhà cung cấp và mô hình. Văn bản được gửi nguyên văn sau khi loại ảnh và cắt ngắn nội dung dài, vì vậy hãy tránh chia sẻ dữ liệu cá nhân nhạy cảm. Bạn có thể tắt bất cứ lúc nào để dừng chia sẻ.", @@ -1035,7 +1032,6 @@ export default { // Screenshot redaction (issue #312): local, best-effort PII blurring that // runs in-browser before any screenshot reaches a vision model. - 'st.redaction.heading': "Chỉnh sửa ảnh chụp màn hình", 'st.redaction.toggle.label': "Biên tập lại nội dung nhạy cảm từ ảnh chụp màn hình", 'st.redaction.toggle.desc': "Trước khi ảnh chụp màn hình được gửi tới mô hình trực quan, hãy làm mờ các trường biểu mẫu và văn bản trông giống như email hoặc số điện thoại. Quá trình phát hiện chạy hoàn toàn trên thiết bị của bạn — không có gì được truyền đi thêm.", 'st.redaction.warning': "⚠️ Nỗ lực tối đa và không mở được: nếu quá trình biên tập không thể chạy trên một trang (ví dụ: ngay sau khi điều hướng, trên trình xem PDF hoặc trên các trang trình duyệt bị hạn chế), ảnh chụp màn hình vẫn được gửi ở trạng thái chưa được biên tập. Tính năng phát hiện chỉ sử dụng phương pháp phỏng đoán DOM — văn bản được vẽ bằng canvas, PII bên trong hình ảnh hoặc bất kỳ nội dung nào không được nhận dạng dưới dạng trường biểu mẫu hoặc văn bản email/điện thoại có thể lọt qua và văn bản trang được gửi tới mô hình không bị loại bỏ bởi cài đặt này. Nó KHÔNG phải là một đảm bảo an ninh. Để có được sự riêng tư hoàn toàn, hãy sử dụng mô hình cục bộ/ngoại tuyến (llama.cpp, Ollama): ảnh chụp màn hình sau đó không bao giờ rời khỏi máy của bạn và việc chỉnh sửa là không cần thiết.", @@ -1223,7 +1219,7 @@ export default { "sp.slash.export_traces_full": "Xuất toàn bộ phiên theo dõi đã lưu dưới dạng JSON, gồm cả ảnh chụp màn hình", "sp.export_traces.recording_truncated": "Đã xuất mọi bản ghi đã lưu dưới dạng JSON. Nội dung bị bỏ qua trong lúc ghi không thể khôi phục bằng cách xuất.", "sp.slash.export_traces": "Xuất chuỗi công cụ (dấu vết)", - "sp.export_traces.none": "Không có dấu vết cho cuộc trò chuyện này. Bật Ghi dấu vết trong Cài đặt rồi chạy lại.", + "sp.export_traces.none": "Không có dấu vết cho cuộc trò chuyện này. Bật Ghi dấu vết trong Cài đặt → Nâng cao rồi chạy lại.", "sp.export_traces.error": "Không thể xuất dấu vết.", "sp.export_traces.done": "Chuỗi công cụ đã xuất khẩu.", "sp.export_traces.no_conversation": "Chưa có gì để xuất - trước tiên hãy bắt đầu cuộc trò chuyện.", @@ -1297,7 +1293,7 @@ export default { "st.sync.confirm.reset": "Thay thế bản sao đám mây được mã hóa bằng thiết lập WebBrain hiện tại của thiết bị này?", "st.sync.consent.legacy": "Bật đồng bộ hóa được mã hóa? WebBrain sẽ truyền bản sao được mã hóa nối đầu các ký ức của bạn, tự động điền hồ sơ và cài đặt nhà cung cấp khóa API tới WebBrain Compass. Lịch sử trò chuyện và thông tin đăng nhập OAuth không được đồng bộ hóa.", "st.sync.consent.denied": "Quyền đồng bộ hóa được mã hóa không được cấp.", - 'st.providers.webgpu_note.body': '{modelLink} chạy hoàn toàn trong Chrome mà không cần điểm cuối API. Tải mô hình trong Settings > Providers > WebGPU hoặc Chế độ Apocalypse, rồi dùng nút nuclear trong standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} chạy hoàn toàn trong Chrome mà không cần điểm cuối API. Tải mô hình trong Providers > WebGPU hoặc Chế độ Apocalypse, rồi dùng nút nuclear trong standalone chat.', 'sp.monitor.navigation': "Trang đã thay đổi khi tác vụ đang chạy ({before} → {after}). Tiếp tục tác vụ.", 'sp.activity.generating_answer': "Đang tạo câu trả lời…", 'sp.activity.retrying_response': "Đang thử lại câu trả lời…", diff --git a/src/firefox/src/ui/locales/zh.js b/src/firefox/src/ui/locales/zh.js index 21b23ec077..81c7df16d2 100644 --- a/src/firefox/src/ui/locales/zh.js +++ b/src/firefox/src/ui/locales/zh.js @@ -16,14 +16,6 @@ export default { 'sp.ui_scale.decrease': '缩小插件界面', 'sp.ui_scale.increase': '放大插件界面', 'sp.ui_scale.reset': '重置', - 'st.display.ui_scale.label': '插件界面缩放', - 'st.display.ui_scale.decrease': '缩小插件界面', - 'st.display.ui_scale.increase': '放大插件界面', - 'st.display.ui_scale.reset': '重置', - 'st.display.ui_scale.desc': '调整侧栏和独立聊天窗口的大小,不影响网页缩放。', - 'st.display.ui_scale.shortcuts': '专用快捷键:{shortcuts}', - 'st.display.ui_scale.shortcuts_none': '未设置', - 'st.display.ui_scale.manage_shortcuts': '自定义快捷键', 'tool.delegate_research': '正在使用 ChatGPT 进行研究', 'st.display.research_escalation.label': '研究升级', 'st.display.research_escalation.desc': '启用后,WebBrain 可能会在向 ChatGPT 发送异常复杂的只读研究提示词前征求许可。默认关闭。只有在您明确批准后,才会共享提示词原文。', @@ -117,7 +109,6 @@ export default { "sp.unverified.dont": "不继续", "sp.recipient.reason_unrequested": "WebBrain 无法从你的请求中确定需要发送消息。{host} 上打开的对话对象是 {recipient}。", "sp.recipient.reason_unnamed": "WebBrain 无法从你的请求中确定这条消息要发给谁。{host} 上打开的对话对象是 {recipient}。", - 'st.tab.permissions': "权限", 'st.perms.revoke': "撤销", 'st.perms.clear_all': "清除所有权限", 'st.perms.gate.label': "执行重要操作前询问", @@ -238,7 +229,7 @@ export default { 'ob.btn.done': '开始使用', 'ob.btn.skip': '暂时跳过', 'ob.btn.start': '开始', - 'ob.cloud.body': 'WebBrain Compass 已准备好每周免费配额。选定的 Compass 对话可能会被保留并用于改进 WebBrain,而帮助改进 WebBrain 默认情况下处于开启状态。您可以在设置 → 常规中将其关闭。', + 'ob.cloud.body': 'WebBrain Compass 已准备好每周免费配额。选定的 Compass 对话可能会被保留并用于改进 WebBrain,而帮助改进 WebBrain 默认情况下处于开启状态。您可以在设置 → 高级中将其关闭。', 'ob.cloud.change': '更改', 'ob.cloud.using': '正在使用 WebBrain Compass。', @@ -329,7 +320,7 @@ export default { 'sp.step.result_label': '结果', 'sp.api.enabled_html': '🔓 本次会话已启用 API 变更。当代理判断 API 比界面更可靠时,可以通过 fetch_url 和 execute_js 使用 POST/PUT/PATCH/DELETE。默认仍优先使用界面。重置会话后此标志会清除。', - 'sp.permissions.disabled_html': '⚠️ 权限提示已关闭。WebBrain 将在不询问的情况下点击、输入、导航、运行 JavaScript、上传、下载、录制以及安排后续任务。请在设置 → 权限 → 执行重要操作前询问中重新启用。', + 'sp.permissions.disabled_html': '⚠️ 权限提示已关闭。WebBrain 将在不询问的情况下点击、输入、导航、运行 JavaScript、上传、下载、录制以及安排后续任务。请通过麦克风旁的 ⚠ 按钮重新启用。', 'sp.permissions.button': '权限提示:开启', 'sp.permissions.button_off': '权限提示:关闭', 'sp.permissions.gate_desc': 'WebBrain 首次在某个网站上点击、输入、下载或运行代码前会先询问。', @@ -402,8 +393,19 @@ export default { 'tool.wait_for_element.selector': '等待「{selector}」', 'st.title': 'WebBrain 设置', - 'st.subtitle': '配置你的 LLM 提供商和偏好 · v{version}', + 'st.subtitle': '配置 WebBrain 的工作方式 · v{version}', 'st.tab.display': '通用', + 'st.tab.budgets': '预算', + 'st.tab.advanced': '高级', + 'st.tab.llm': 'LLM', + 'st.tab.speech': '语音', + 'st.tab.generative': '生成', + 'st.tab.decision': '决策', + 'st.tab.safesocial': 'SafeSocial', + 'st.providers_page.title': 'WebBrain 提供商', + 'st.providers_page.subtitle': '选择 WebBrain 使用的模型 · v{version}', + 'st.permissions_page.title': 'WebBrain 权限', + 'st.permissions_page.subtitle': 'WebBrain 无需先询问即可操作的网站', 'st.tab.providers': '提供商', 'st.tab.vision': '视觉', 'st.tab.profile': '个人资料', @@ -419,8 +421,6 @@ export default { "st.account.update_payment": "更新付款方式", 'st.account.manage_billing': '管理账单', - 'st.display.language.label': '语言', - 'st.display.language.desc': 'WebBrain 插件的界面语言。', 'st.display.verbose.label': '详细模式', 'st.display.verbose.desc': '显示完整的工具调用详情、参数和原始 JSON 结果。默认关闭,以获得更清爽的聊天体验。', 'st.display.selection_shortcut.label': '划词快捷操作', @@ -434,13 +434,11 @@ export default { 'st.display.auto_screenshot.label': '自动截图', "st.display.auto_screenshot.desc": "代理对页面操作后自动截取视口截图,让所选视觉路由看到变化。会消耗更多 token。如果视觉不可用,将跳过视觉增强,并显示状态通知后继续任务。", 'st.display.auto_screenshot.off': '关闭', - 'st.display.auto_screenshot.navigation': '导航时', - 'st.display.auto_screenshot.state_change': '状态变化时(默认)', + 'st.display.auto_screenshot.navigation': '导航时(默认)', + 'st.display.auto_screenshot.state_change': '状态变化时', 'st.display.auto_screenshot.every_step': '每一步', 'st.display.tracing.label': '记录轨迹(用于模型对比)', - 'st.display.tracing.desc_html': '将每次运行(LLM 请求、响应、工具调用、截图)持久化到本地 IndexedDB,以便并排查看和对比模型。在独立的轨迹页打开。因为每步都会写盘,默认关闭。打开轨迹页 →', - 'st.display.lossless_tracing.label': '记录完整请求详情(调试档)', - 'st.display.lossless_tracing.desc_html': '同时持久化每次 LLM 请求的完整提示词、消息与工具结构(而非无内容摘要),并保留每个工具结果最多 200 KB。支持深度调试与请求重建。默认关闭,因为会在本地写入对话内容并占用更多磁盘。需要先开启记录轨迹。', + 'st.display.tracing.desc_html': '将每次运行(LLM 请求、响应、工具调用、截图)持久化到本地 IndexedDB,以便并排查看和对比模型,包括每次 LLM 请求的完整提示词、消息与工具结构,以及每个工具结果最多 200 KB。在独立的轨迹页打开。默认关闭,因为会在本地写入对话内容并占用更多磁盘。打开轨迹页 →', 'st.display.allow_local_network.label': '允许代理访问本地网络', 'st.display.allow_local_network.desc': '允许代理的 fetch_url 工具访问回环(127.0.0.1、localhost)和私有/RFC1918 地址(10.x、192.168.x、172.16–31.x)。用于本地开发服务器、内网工具或自托管 API。默认关闭。关闭时会阻止直接写有私有或回环 IP 地址的 URL 以及 localhost 主机名。不检查 DNS 解析,因此其他主机名仍可能连接到本地地址。即使开启,云元数据的 IP 字面量(169.254.169.254)以及列表中的元数据主机名或 *.internal/*.local 主机名仍会被阻止。', 'st.display.notify_sound.label': "通知提示音", @@ -647,7 +645,6 @@ export default { "sp.vision.on": "已为当前提供商启用视觉模式。", "sp.vision.off": "已为当前提供商禁用视觉模式。", "sp.vision.error": "视觉模式切换失败:{msg}", - "st.tab.multimodal": "辅助模型", "st.tab.captcha": "CAPTCHA", "st.perms.gate.desc": "推荐开启。开启后,WebBrain 首次在某站点点击、输入、导航、运行 JavaScript、上传、下载或录制时会请求权限(随后记住你的选择)。在你完全信任的站点上可关闭,以便快速、免提示地使用。", "st.perms.gate.warning": "⚠️ 权限提示已关闭。WebBrain 将在任何站点上点击、输入、导航、运行 JavaScript、上传、下载和录制而无需询问 —— 包括内容可能被攻击者控制的页面。页面内容在内部仍被视为不可信,但没有任何机制能阻止被注入的指令触发操作。只有当你完全信任使用本助手的每一个站点时,才将其保持关闭。", @@ -665,7 +662,7 @@ export default { "st.display.download_directory.placeholder": "系统默认值", "st.display.download_directory.error": "请使用 WebBrain 或 Work/WebBrain 这样的相对文件夹。不允许使用绝对路径或“..”。", "st.display.strict_secret.label": "严格的机密处理", - "st.display.strict_secret.desc": "拒绝在总结或助手文本中引用凭据(密码、API 密钥、令牌、OTP)—— 即使你明确要求也是如此。如果你经常分享轨迹文件或共享屏幕,这会很有用。默认关闭,这样当你需要时,代理可以复述你要求的确切值。当你希望 `done` 总结保持整洁且凭据不被重复显示时,请开启它(设置 → 安全)。", + "st.display.strict_secret.desc": "拒绝在总结或助手文本中引用凭据(密码、API 密钥、令牌、OTP)—— 即使你明确要求也是如此。如果你经常分享轨迹文件或共享屏幕,这会很有用。默认关闭,这样当你需要时,代理可以复述你要求的确切值。当你希望 `done` 总结保持整洁且凭据不被重复显示时,请开启它。", "st.display.request_timeout.label": "LLM 请求超时", "st.display.request_timeout.desc": "等待响应头以及流式响应中每次数据块间隔的最长时间。默认:120秒。本地模型较慢时,尤其在CPU上运行或上下文较大时,请延长此时间。", "st.providers.filter.all": "全部", @@ -897,8 +894,8 @@ export default { 'sp.slash.busy_only_oob': 'WebBrain 忙碌时,消息会排队。只有 /help、/progress、/btw、/scratchpad、/memory、/schedule --list、/watch、/dangerously-skip-permissions、/screenshot、/export、/export --traces 和 /verbose 可以作为斜杠命令立即运行。', 'tool.go_back': '返回', 'tool.go_forward': '前进', - 'st.display.search.placeholder': '搜索通用设置', - 'st.display.search.empty': '没有匹配的通用设置。', + 'st.display.search.placeholder': '搜索设置', + 'st.display.search.empty': '没有匹配的设置。', 'st.display.advanced': '高级', ...getApocalypseModeCopy('zh'), ...getEmergencyBoxCopy('zh'), @@ -1146,7 +1143,6 @@ export default { "st.imageBudget.maxDimension.desc": "发送给视觉的任何截图的最长边(宽或高),单位为像素。更小的上限会在发送前缩小图像,降低 token 与成本;更大的上限保留保真度。", "st.imageBudget.warning": "⚠️ 这些设置适用于为视觉捕获的截图(自动截图、/screenshot、整页、verify_form)。手动保存的全分辨率图像不受影响。「Image detail」由 OpenAI 风格端点遵循;其他提供商可能忽略。", - "st.redaction.heading": "截图打码", "st.redaction.toggle.label": "对截图中的敏感内容进行打码", "st.redaction.toggle.desc": "在截图发送给视觉模型之前,对表单字段以及看起来像邮箱或电话号码的文本进行打码模糊处理。检测完全在你的设备上运行——不会额外传输任何内容。", "st.redaction.warning": "⚠️ 这是尽力而为且失败开放(fail-open)的处理:如果打码功能在某个页面上无法运行(例如刚导航完成之后、在 PDF 查看器中,或在受限的浏览器页面上),截图仍会以未打码的原样发送。检测仅使用 DOM 启发式方法——canvas 上绘制的文字、图片中的个人信息,或任何未被识别为表单字段或邮箱/电话文本的内容都可能被遗漏,发送给模型的页面文本也不会被此设置打码。这不是安全保证。若需要完全的隐私保护,请使用本地/离线模型(llama.cpp、Ollama):这样截图将永远不会离开你的设备,也就不再需要打码。", @@ -1160,7 +1156,7 @@ export default { "sp.slash.export_traces_full": "将完整的已保存跟踪会话导出为 JSON,包括截图", "sp.export_traces.recording_truncated": "已将所有保存的记录导出为 JSON。录制时省略的内容无法通过导出恢复。", "sp.slash.export_traces": "导出工具链(跟踪)", - "sp.export_traces.none": "此对话没有跟踪记录。请在设置中开启「记录跟踪」,然后重新运行。", + "sp.export_traces.none": "此对话没有跟踪记录。请在设置 → 高级中开启「记录跟踪」,然后重新运行。", "sp.export_traces.error": "无法导出跟踪。", "sp.export_traces.done": "工具链已导出。", "sp.export_traces.no_conversation": "暂无可导出内容 — 请先开始对话。", @@ -1168,7 +1164,7 @@ export default { "sp.export_traces.truncated": "工具链已导出。如果此对话有很多跟踪记录,较早的回合可能缺失。", "st.display.help_improve.label": "帮助改进 WebBrain", "st.display.help_improve.desc_html": "允许保留选定的 WebBrain Compass 交互,并将其用于评估、改进、微调和训练。此选项默认开启。关闭后,未来的 Compass 交互将不会用于这些用途。WebBrain 仅会收集您开启了“共享查询以用于研究”的服务商的本地模型和自备 API 请求。隐私政策 →", - "st.providers.webbrain_data_use.body": "WebBrain Compass 包含每日免费用量。帮助改进 WebBrain 默认开启时,选定的 Compass 对话可能会被保留,并用于评估、改进、微调和训练。可在“常规 → 高级”中关闭,以排除未来的 Compass 交互。仅当您开启此服务商的“共享查询以用于研究”选项时,WebBrain 才会收集本地模型和自备 API 请求。{privacyLink}。如需更多用量,请在 {subscribeLink} 订阅。在 {accountLink} 管理账单。", + "st.providers.webbrain_data_use.body": "WebBrain Compass 包含每日免费用量。帮助改进 WebBrain 默认开启时,选定的 Compass 对话可能会被保留,并用于评估、改进、微调和训练。可在“设置 → 高级”中关闭,以排除未来的 Compass 交互。仅当您开启此服务商的“共享查询以用于研究”选项时,WebBrain 才会收集本地模型和自备 API 请求。{privacyLink}。如需更多用量,请在 {subscribeLink} 订阅。在 {accountLink} 管理账单。", 'st.providers.share_research.label': "共享查询以用于研究", 'st.providers.share_research.hint': "将此服务商的提示词和回复连同所用的服务商及模型发送给 WebBrain,用于评估与改进。共享前会去除图片和二进制附件并截断文本;其余文本将按原样发送。", 'st.providers.share_research.confirm': "要与 WebBrain 共享此服务商的查询以用于研究吗?\n\n开启后,您与此服务商的提示词、回复和工具交互将连同服务商及模型名称发送给 WebBrain,用于评估与改进。文本在去除图片并截断过长内容后按原样发送,因此请避免共享敏感个人信息。您可以随时关闭以停止今后的共享。", @@ -1214,7 +1210,7 @@ export default { "sp.perm.skip_hint": "想减少打断?“始终允许”会记住此网站。下面的命令会在所有网站上关闭 WebBrain 权限提示。", "sp.perm.insert_skip_command": "插入 /dangerously-skip-permissions", "sp.perm.skip_hint_draft": "草稿未更改。请先清空草稿再插入命令。", - "ob.act.permissions_tip": "权限提示默认开启。高级用户可使用 /dangerously-skip-permissions 在所有网站上关闭提示,并在设置 → 权限中重新开启。", + "ob.act.permissions_tip": "权限提示默认开启。高级用户可使用 /dangerously-skip-permissions 在所有网站上关闭提示,并通过麦克风旁的 ⚠ 按钮重新开启。", 'st.provider.field.cache_read_cost_per_million': "估算缓存读取费用($ / 100 万 token)", 'st.provider.field.cache_write_cost_per_million': "估算 5 分钟缓存写入费用($ / 100 万 token)", 'st.provider.field.cache_write_1h_cost_per_million': "估算 1 小时缓存写入费用($ / 100 万 token)", @@ -1276,7 +1272,7 @@ export default { "st.sync.confirm.reset": "使用该设备当前的 WebBrain 设置替换加密的云副本?", "st.sync.consent.legacy": "开启加密同步? WebBrain 会将您的记忆、个人资料自动填充和 API 密钥提供商设置的端到端加密副本传输到 WebBrain Compass。聊天历史记录和 OAuth 登录不同步。", "st.sync.consent.denied": "未授予加密同步权限。", - 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Settings > Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', + 'st.providers.webgpu_note.body': '{modelLink} runs entirely in Chrome with no API endpoint. Download it in Providers > WebGPU or Apocalypse Mode, then use the nuclear control in standalone chat.', 'sp.monitor.navigation': "任务运行期间页面发生了变化({before} → {after})。正在继续任务。", 'sp.activity.generating_answer': "正在生成回答…", 'sp.activity.retrying_response': "正在重试回答…", diff --git a/src/firefox/src/ui/permissions.html b/src/firefox/src/ui/permissions.html new file mode 100644 index 0000000000..2f7300b7e5 --- /dev/null +++ b/src/firefox/src/ui/permissions.html @@ -0,0 +1,55 @@ + + + + + + WebBrain Permissions + + + + + +
+
+

+

+
+ +
+ +
+
+
+
+
+
+
+ +
+ + +
+
+ +
+
+ + + + diff --git a/src/firefox/src/ui/providers.html b/src/firefox/src/ui/providers.html new file mode 100644 index 0000000000..471a4b49ad --- /dev/null +++ b/src/firefox/src/ui/providers.html @@ -0,0 +1,335 @@ + + + + + + WebBrain Providers + + + + + + +
+
+

+

+
+ +
+ + + +
+
+ +
+
+ +
+

+ + +

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+ +
+

+ + +

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+ +
+

+ + +

+
+
+
+ + +
+
+ + +
+
+ + +
+ + + +
+ + +
+
+ + + +
+
+
+
+ +
+

+ + +

+
+

+ +
+ +
+ + + +
+
+

+ + + +

+ + + + +
+ + + +
+
+ +
+
+
+ +
+

+
+
+
+
+
+
+ +
+

+

+
+ + +
+
+ +
+ + 95% +
+
+
+
+ +
+
+

+
+
+ + +
+
+
+ + + + + + + + diff --git a/src/firefox/src/ui/settings-tabs.js b/src/firefox/src/ui/settings-tabs.js index be33030a88..e8cdf9ec53 100644 --- a/src/firefox/src/ui/settings-tabs.js +++ b/src/firefox/src/ui/settings-tabs.js @@ -1,12 +1,35 @@ -// Tab switcher for settings.html. Kept out of an inline - + @@ -1410,9 +16,13 @@

-

+

+ + + + @@ -1425,29 +35,24 @@

- - - + -
-
- - -
-
-
-
-
- -
+ + + +
+

+
@@ -1459,20 +64,6 @@

-
-
-
-
-
- -
-
- - 100% - - -
-
@@ -1531,22 +122,6 @@

-
-
-
50
-
-
- -
-
-
-
120s
-
-
- -
@@ -1559,6 +134,22 @@

+
+
+
+
+
+ +
+
+
+ +
+

+
@@ -1590,784 +181,81 @@

-
-
+
60s
+
- +

- -
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
Notification sounds
-
Play a distinct sound for plans awaiting review and a short chime for completion or clarification. No sound when you cancel a run.
-
- -
-
-
-
-
-
- -
-
-
-
Flash tabs for alerts
-
Blink a background tab’s title and icon when a plan is ready for review or a task finishes. Plans use a ⚠️ icon.
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
60s
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
- -
-

Firefox trusted automation (experimental)

-

Use a local companion for browser dialogs, trusted clicks and typing, and file uploads. Requires Node.js 22+ and Firefox started with remote automation enabled.

-

Install the companion using node firefox-companion/install.mjs from the WebBrain checkout. Restart Firefox with --remote-debugging-port 9222. Keep the connection on this computer.

- -
- -

-
-
-

-

- -
-
-

CapSolver

- -
-

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
- -
-
-

2Captcha

- -
-

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
- -
- -

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
- -
-
-

SolveCaptcha

- -
-

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
- -
-
-

Anti-Captcha

- -
-

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
-
-
-

NopeCHA

- -
-

-

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
-
-
-

NoneCap

- -
-

-

-

-
- - -
-
- - - -
-
-
- -
- - -
-
-
-
-
- - +
+
+
+
-
-
-
- -
-
- -
-
- -
-

- - -

-
-
-
- - -
-
- - -
-
- - -
-
- - - -
-
-
- -

-
-
- -
- - -
-
- -
- - -
-
- -
- - + + -
- -
-
- -

-
-
+
-
-
+
50
+
- -
-
-
- -

- - -

-
-
-
- - -
-
- - -
-
- - -
-
- - - -
-
-
- -

- - -

-
-
-
- - -
-
- - -
-
- - -
- - - -
- - -
-
- - - +
-
-
- -

- - -

-
-

- -
- -
- - - -
-
-

- - - -

- - -
@@ -2572,24 +460,195 @@

-
-
-
-
-
-
-
- -
- +
+

+
+
+

+

+ +
+
+

CapSolver

+ +
+

+

+
+ + +
+
+ + + +
+
+
+ +
+ + +
+
+
+ +
+
+

2Captcha

+ +
+

+

+
+ + +
+
+ + + +
+
+
+ +
+ + +
+
+
+ +
+ +

+

+
+ + +
+
+ + + +
+
+
+ +
+ + +
+
+
+ +
+
+

SolveCaptcha

+ +
+

+

+
+ + +
+
+ + + +
+
+
+ +
+ + +
+
+
-
-
-
@@ -2642,6 +701,236 @@

+
+

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
Notification sounds
+
Play a distinct sound for plans awaiting review and a short chime for completion or clarification. No sound when you cancel a run.
+
+ +
+
+
+
+
+
+ +
+
+
+
Flash tabs for alerts
+
Blink a background tab’s title and icon when a plan is ready for review or a task finishes. Plans use a ⚠️ icon.
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+ +
+

Firefox trusted automation (experimental)

+

Use a local companion for browser dialogs, trusted clicks and typing, and file uploads. Requires Node.js 22+ and Firefox started with remote automation enabled.

+

Install the companion using node firefox-companion/install.mjs from the WebBrain checkout. Restart Firefox with --remote-debugging-port 9222. Keep the connection on this computer.

+ +
+ +

+
+
+
+ @@ -2649,6 +938,5 @@

- diff --git a/src/firefox/src/ui/settings.js b/src/firefox/src/ui/settings.js index 6c899ad5d7..532d142da8 100644 --- a/src/firefox/src/ui/settings.js +++ b/src/firefox/src/ui/settings.js @@ -3,22 +3,19 @@ import { normalizeLeanModeSetting } from '../agent/lean-mode.js'; import { D1_MODEL_ID } from '../providers/d1-config.js'; import { initD1Settings } from './d1-settings.js'; /** - * WebBrain Settings Page — provider configuration + display settings. + * WebBrain Settings pages — settings.html (preferences, budgets, memory, + * skills, CAPTCHA, Bridge, advanced), providers.html (the chat provider and + * the assistive models) and permissions.html (site permissions). + * + * One controller serves all three pages: each section below wires itself up + * only when its markup is on the current page. */ -import { t, getLocale, setLocale, LANGUAGES } from './i18n.js'; +import { t } from './i18n.js'; import { escapeHtml } from './utils.js'; import { MEDIA_PROVIDERS, mediaProvider, validateMediaConfig } from '../agent/media-config.js'; import { RESEARCH_DATA_COLLECTION } from '../trace/research-consent.js'; import { THEME_MODES, applyMode, loadMode, watch } from './theme.js'; -import { - UI_SCALE_LEVELS, - UI_SCALE_STORAGE_KEY, - loadUiScale, - nextUiScale, - normalizeUiScale, - saveUiScale, -} from './ui-scale.js'; import { renderSkillMarkdown } from './skill-markdown.js'; import { CAPABILITY_LABEL } from '../agent/permission-gate.js'; import { @@ -88,10 +85,8 @@ const SUBSCRIPTION_GUIDE_PRODUCTS = Object.freeze({ const EXT_VERSION = '42.0.6'; const providersContainer = document.getElementById('providers'); -const displaySettings = document.getElementById('display-settings'); const generalSearchInput = document.getElementById('input-general-search'); const generalSearchEmpty = document.getElementById('general-search-empty'); -const advancedSettings = document.querySelector('.advanced-settings'); const apocalypseModeLink = document.getElementById('apocalypse-mode-link'); const apocalypseModeStatus = document.getElementById('apocalypse-mode-status'); const verboseToggle = document.getElementById('toggle-verbose'); @@ -131,7 +126,6 @@ const completionConfettiToggle = document.getElementById('toggle-completion-conf const completionFlashTabToggle = document.getElementById('toggle-completion-flash-tab'); const tracingToggle = document.getElementById('toggle-tracing'); const feedbackDiagnosticsToggle = document.getElementById('toggle-feedback-diagnostics'); -const losslessTracingToggle = document.getElementById('toggle-lossless-tracing'); const strictSecretToggle = document.getElementById('toggle-strict-secret'); const strictGuardsToggle = document.getElementById('toggle-strict-guards'); const leanModeSelect = document.getElementById('select-lean-mode'); @@ -244,7 +238,18 @@ function activeProviderIsCompass() { const config = providersData?.[activeProviderId]; return !!activeProviderId && (providerDefinitionId(activeProviderId) === 'webbrain_cloud' || config?.providerName === 'webbrain-cloud'); } +// The Strict Secret Mode switch is on settings.html and the decision card on +// providers.html, so the card follows the stored setting, not the switch. +let strictSecretModeOn = false; +if (globalThis.browser?.storage?.onChanged) { + browser.storage.onChanged.addListener((changes, area) => { + if (area !== 'local' || !changes.strictSecretMode) return; + strictSecretModeOn = changes.strictSecretMode.newValue === true; + syncDecisionStatus(); + }); +} function syncDecisionStatus() { + if (!decisionModeInputs.length) return; const mode = selectedDecisionMode(); for (const description of document.querySelectorAll('[data-decision-mode-desc]')) description.hidden = description.dataset.decisionModeDesc !== mode; const configured = document.getElementById('decision-configured'); @@ -257,7 +262,7 @@ function syncDecisionStatus() { status.hidden = mode !== 'auto'; if (mode !== 'auto') return; // Strict Secret Mode keeps page content away from every decision model, so Auto has nothing to use. - const strict = strictSecretToggle?.checked === true; + const strict = strictSecretModeOn; const compass = !strict && activeProviderIsCompass(); const key = strict ? 'st.decision.status.strict' : compass ? 'st.decision.status.compass' : 'st.decision.status.none_firefox'; status.dataset.i18n = key; @@ -291,14 +296,7 @@ const systemOneBrowserToggle = document.getElementById('toggle-system-one-browse const btnTestSystemOne = document.getElementById('btn-test-system-one'); const btnClearSystemOne = document.getElementById('btn-clear-system-one'); const systemOneTestResult = document.getElementById('test-system-one'); -const languageSelect = document.getElementById('select-language'); const themeSelect = document.getElementById('select-theme'); -const settingsUiScaleDecrease = document.getElementById('settings-ui-scale-decrease'); -const settingsUiScaleValue = document.getElementById('settings-ui-scale-value'); -const settingsUiScaleIncrease = document.getElementById('settings-ui-scale-increase'); -const settingsUiScaleReset = document.getElementById('settings-ui-scale-reset'); -const settingsUiScaleShortcuts = document.getElementById('settings-ui-scale-shortcuts'); -const settingsUiScaleManageShortcuts = document.getElementById('settings-ui-scale-manage-shortcuts'); const downloadDirectoryInput = document.getElementById('input-download-directory'); const subtitleEl = document.getElementById('subtitle'); @@ -306,99 +304,36 @@ const subtitleEl = document.getElementById('subtitle'); // Loaded from browser.storage.local (canonical) with a localStorage mirror // kept in sync by theme.js — so the FOUC bootstrap in always has the // latest mode on next page open. watch() keeps every open extension page -// (this settings tab + the side panel) in sync if any one of them flips it. +// (the settings pages + the side panel) in sync if any one of them flips it. +// Only settings.html has the picker; the other pages still follow changes. let currentThemeMode = 'system'; -if (themeSelect) { - loadMode().then((mode) => { - currentThemeMode = mode; - themeSelect.value = mode; - applyMode(mode, { syncStorage: false }); // already loaded, just paint - }); - themeSelect.addEventListener('change', async () => { - const mode = THEME_MODES.includes(themeSelect.value) ? themeSelect.value : 'system'; - currentThemeMode = mode; - await applyMode(mode); - }); - watch(() => currentThemeMode); - // If another Settings tab or the side panel flips the theme, watch() - // already re-paints this page — but the closure variable and the select - // value won't update on their own. Without this, the picker drifts out - // of sync and a later OS-theme flip can re-apply the stale 'system'. - if (globalThis.browser?.storage?.onChanged) { - browser.storage.onChanged.addListener((changes, area) => { - if (area !== 'local' || !changes.themeMode) return; - const next = changes.themeMode.newValue; - if (!THEME_MODES.includes(next)) return; - currentThemeMode = next; - if (themeSelect.value !== next) themeSelect.value = next; - }); - } -} - -let currentSettingsUiScale = 100; -let settingsUiScaleReady = false; - -function renderSettingsUiScale(value) { - currentSettingsUiScale = normalizeUiScale(value); - settingsUiScaleReady = true; - if (settingsUiScaleValue) settingsUiScaleValue.textContent = `${currentSettingsUiScale}%`; - if (settingsUiScaleDecrease) settingsUiScaleDecrease.disabled = currentSettingsUiScale === UI_SCALE_LEVELS[0]; - if (settingsUiScaleIncrease) settingsUiScaleIncrease.disabled = currentSettingsUiScale === UI_SCALE_LEVELS[UI_SCALE_LEVELS.length - 1]; -} - -// Serialized so each step reads the scale rendered by the step before it: -// holding Enter on a focused +/- button repeats faster than the storage write -// resolves, and an unqueued step would keep re-reading the same stale scale. -let settingsUiScaleWriteQueue = Promise.resolve(); - -function changeSettingsUiScale(action) { - if (!settingsUiScaleReady) return Promise.resolve(); - const write = settingsUiScaleWriteQueue.then(async () => { - const next = nextUiScale(currentSettingsUiScale, action); - await saveUiScale(browser.storage.local, next); - renderSettingsUiScale(next); - }); - // Keep the chain alive after a rejected write while still handing the - // failure to this caller. - settingsUiScaleWriteQueue = write.catch(() => {}); - return write; -} - -loadUiScale(browser.storage.local).then(renderSettingsUiScale); -if (settingsUiScaleDecrease) settingsUiScaleDecrease.disabled = true; -if (settingsUiScaleIncrease) settingsUiScaleIncrease.disabled = true; -settingsUiScaleDecrease?.addEventListener('click', () => changeSettingsUiScale('decrease').catch(() => {})); -settingsUiScaleIncrease?.addEventListener('click', () => changeSettingsUiScale('increase').catch(() => {})); -settingsUiScaleReset?.addEventListener('click', () => changeSettingsUiScale('reset').catch(() => {})); -browser.storage.onChanged.addListener((changes, area) => { - if (area === 'local' && changes[UI_SCALE_STORAGE_KEY]) { - renderSettingsUiScale(changes[UI_SCALE_STORAGE_KEY].newValue); - } +loadMode().then((mode) => { + currentThemeMode = mode; + if (themeSelect) themeSelect.value = mode; + applyMode(mode, { syncStorage: false }); // already loaded, just paint }); - -const UI_SCALE_COMMAND_NAMES = ['decrease-ui-scale', 'increase-ui-scale', 'reset-ui-scale']; - -async function refreshUiScaleShortcuts() { - if (!settingsUiScaleShortcuts) return; - const commands = await browser.commands.getAll(); - const shortcuts = UI_SCALE_COMMAND_NAMES.map((name) => commands.find((command) => command.name === name)?.shortcut) - .filter(Boolean); - const summary = shortcuts.length ? shortcuts.join(' · ') : t('st.display.ui_scale.shortcuts_none'); - settingsUiScaleShortcuts.textContent = t('st.display.ui_scale.shortcuts', { shortcuts: summary }); -} - -refreshUiScaleShortcuts().catch(() => {}); -window.addEventListener('focus', () => refreshUiScaleShortcuts().catch(() => {})); -settingsUiScaleManageShortcuts?.addEventListener('click', async () => { - if (browser.commands.openShortcutSettings) { - await browser.commands.openShortcutSettings(); - } else { - await browser.tabs.create({ url: 'about:addons' }); - } +themeSelect?.addEventListener('change', async () => { + const mode = THEME_MODES.includes(themeSelect.value) ? themeSelect.value : 'system'; + currentThemeMode = mode; + await applyMode(mode); }); +watch(() => currentThemeMode); +// If another Settings tab or the side panel flips the theme, watch() +// already re-paints this page — but the closure variable and the select +// value won't update on their own. Without this, the picker drifts out +// of sync and a later OS-theme flip can re-apply the stale 'system'. +if (globalThis.browser?.storage?.onChanged) { + browser.storage.onChanged.addListener((changes, area) => { + if (area !== 'local' || !changes.themeMode) return; + const next = changes.themeMode.newValue; + if (!THEME_MODES.includes(next)) return; + currentThemeMode = next; + if (themeSelect && themeSelect.value !== next) themeSelect.value = next; + }); +} function renderSubtitle() { - if (subtitleEl) subtitleEl.textContent = t('st.subtitle', { version: EXT_VERSION }); + if (subtitleEl) subtitleEl.textContent = t(subtitleEl.dataset.subtitleKey || 'st.subtitle', { version: EXT_VERSION }); } renderSubtitle(); @@ -433,64 +368,45 @@ function setGeneralSearchHidden(item, hidden) { item.classList.toggle('general-search-hidden', hidden); } +// The search box covers the tabs marked data-search (General, Budgets, +// CAPTCHA and Advanced). With a query, those tabs show together and keep only +// their matching rows; settings-tabs.js clears the query when a tab is picked. +const searchPanels = Array.from(document.querySelectorAll('.tab-panel[data-search]')); + function filterGeneralSettings() { - if (!displaySettings || !generalSearchInput) return; + if (!generalSearchInput || !searchPanels.length) return; const query = normalizeGeneralSearchText(generalSearchInput.value); - const visibleItems = Array.from(displaySettings.children) - .filter((el) => el.classList?.contains('setting-row')); - const advancedBody = advancedSettings?.querySelector('.advanced-settings-body'); - const advancedItems = advancedBody - ? Array.from(advancedBody.children).filter((el) => el.classList?.contains('setting-row') || el.classList?.contains('provider-card')) - : []; - - let visibleMatches = 0; - let advancedMatches = 0; - visibleItems.forEach((item) => { - const matches = !query || searchTextForGeneralItem(item).includes(query); - setGeneralSearchHidden(item, !!query && !matches); - if (matches) visibleMatches += 1; - }); - advancedItems.forEach((item) => { - const matches = !query || searchTextForGeneralItem(item).includes(query); - setGeneralSearchHidden(item, !!query && !matches); - if (matches) advancedMatches += 1; - }); - - if (advancedSettings) { - setGeneralSearchHidden(advancedSettings, !!query && advancedMatches === 0); - if (query && advancedMatches > 0) advancedSettings.open = true; + document.body.classList.toggle('settings-searching', !!query); + let totalMatches = 0; + for (const panel of searchPanels) { + const scope = panel.querySelector('[data-search-scope]') || panel; + let panelMatches = 0; + for (const item of Array.from(scope.children)) { + const matches = !query || searchTextForGeneralItem(item).includes(query); + setGeneralSearchHidden(item, !!query && !matches); + if (matches) panelMatches += 1; + } + setGeneralSearchHidden(panel, !!query && panelMatches === 0); + totalMatches += panelMatches; } if (generalSearchEmpty) { - generalSearchEmpty.hidden = !query || (visibleMatches + advancedMatches) > 0; + generalSearchEmpty.hidden = !query || totalMatches > 0; } } -if (generalSearchInput) { - generalSearchInput.addEventListener('input', filterGeneralSettings); -} +generalSearchInput?.addEventListener('input', filterGeneralSettings); -if (languageSelect) { - languageSelect.innerHTML = LANGUAGES.map((l) => ``).join(''); - languageSelect.value = getLocale(); - languageSelect.addEventListener('change', async () => { - await setLocale(languageSelect.value); - renderSubtitle(); - refreshUiScaleShortcuts().catch(() => {}); - filterGeneralSettings(); - renderProviders(); - }); - document.addEventListener('wb-locale-changed', () => { - languageSelect.value = getLocale(); - renderSubtitle(); - refreshUiScaleShortcuts().catch(() => {}); - filterGeneralSettings(); - if (providersContainer) renderProviders(); - renderSkills(); - renderPermissions(); - refreshProfileSyncState(); - refreshApocalypseModeStatus(); - }); -} +// The language is chosen in the side panel; i18n.js re-translates the static +// markup, and this re-renders what the script writes itself. +document.addEventListener('wb-locale-changed', () => { + renderSubtitle(); + filterGeneralSettings(); + renderProviders(); + renderSkills(); + renderPermissions(); + if (profileSyncStatus) refreshProfileSyncState(); + refreshApocalypseModeStatus(); +}); globalThis.addEventListener('focus', () => refreshApocalypseModeStatus()); let providersData = {}; @@ -657,24 +573,27 @@ async function init() { browser.storage.local.remove(['authToken', 'authEmail', 'authDefaultModel']).catch(() => {}); // Load display settings - const stored = await browser.storage.local.get([...DECISION_SETTINGS_KEYS, 'verboseMode', 'composerDeliveryMode', 'selectionShortcutEnabled', AUTO_GROUP_TABS_KEY, 'helpImproveWebBrain', 'screenshotFallback', 'maxAgentSteps', 'autoScreenshot', 'useSiteAdapters', 'researchEscalationEnabled', 'researchEscalationEngine', 'voiceInputEnabled', 'alwaysAllowApiMutations', 'apiMutationObserverEnabled', 'openaiAskStreamingEnabled', 'planBeforeActMode', 'planBeforeAct', 'planReviewMode', 'planReviewConfidenceThreshold', DOWNLOAD_DIRECTORY_STORAGE_KEY, 'notifySound', 'completionConfetti', 'completionFlashTab', 'tracingEnabled', 'feedbackDiagnosticsEnabled', 'losslessTrace', 'strictSecretMode', 'strictGuards', 'leanMode', 'agentAllowLocalNetwork', 'scheduledTasksEnabled', 'scheduledRequireConsequentialConfirmation', 'systemOneEnabled', 'systemOneWatchEnabled', 'systemOneCompletionEnabled', 'systemOneFastClassifications', 'systemOneFastBrowser', 'systemOneWatchThreshold', 'systemOneCompletionThreshold', 'typesafeApiKey', 'providerFilter', 'requestTimeoutMs', 'clarifyTimeoutSec', 'clarifyTimeoutSemanticsV2', 'clarifyTimeoutPolicy', 'costAllowanceSessionUsd', 'costAllowanceTotalUsd', 'meteredProviderCostSpentUsd', 'screenshotRedaction', 'imageDetail', 'maxScreenshotsPerTurn', 'maxImageDimension']); + const stored = await browser.storage.local.get([...DECISION_SETTINGS_KEYS, 'verboseMode', 'composerDeliveryMode', 'selectionShortcutEnabled', AUTO_GROUP_TABS_KEY, 'helpImproveWebBrain', 'screenshotFallback', 'maxAgentSteps', 'autoScreenshot', 'useSiteAdapters', 'researchEscalationEnabled', 'researchEscalationEngine', 'voiceInputEnabled', 'alwaysAllowApiMutations', 'apiMutationObserverEnabled', 'openaiAskStreamingEnabled', 'planBeforeActMode', 'planBeforeAct', 'planReviewMode', 'planReviewConfidenceThreshold', DOWNLOAD_DIRECTORY_STORAGE_KEY, 'notifySound', 'completionConfetti', 'completionFlashTab', 'tracingEnabled', 'feedbackDiagnosticsEnabled', 'strictSecretMode', 'strictGuards', 'leanMode', 'agentAllowLocalNetwork', 'scheduledTasksEnabled', 'scheduledRequireConsequentialConfirmation', 'systemOneEnabled', 'systemOneWatchEnabled', 'systemOneCompletionEnabled', 'systemOneFastClassifications', 'systemOneFastBrowser', 'systemOneWatchThreshold', 'systemOneCompletionThreshold', 'typesafeApiKey', 'providerFilter', 'requestTimeoutMs', 'clarifyTimeoutSec', 'clarifyTimeoutSemanticsV2', 'clarifyTimeoutPolicy', 'costAllowanceSessionUsd', 'costAllowanceTotalUsd', 'meteredProviderCostSpentUsd', 'screenshotRedaction', 'imageDetail', 'maxScreenshotsPerTurn', 'maxImageDimension']); if (typeof stored.providerFilter === 'string' && ['all','active','local','cloud','router'].includes(stored.providerFilter)) { providerFilter = stored.providerFilter; } - verboseToggle.checked = stored.verboseMode || false; + strictSecretModeOn = stored.strictSecretMode === true; + if (verboseToggle) verboseToggle.checked = stored.verboseMode || false; if (composerDeliveryModeSelect) { composerDeliveryModeSelect.value = stored.composerDeliveryMode === 'steer' ? 'steer' : 'queue'; } if (selectionShortcutToggle) selectionShortcutToggle.checked = stored.selectionShortcutEnabled !== false; if (autoGroupTabsToggle) autoGroupTabsToggle.checked = stored[AUTO_GROUP_TABS_KEY] !== false; if (helpImproveToggle) helpImproveToggle.checked = stored.helpImproveWebBrain !== false; // on by default - screenshotToggle.checked = stored.screenshotFallback ?? true; // on by default - if (isUnlimitedMaxAgentSteps(stored.maxAgentSteps)) { - maxStepsRange.value = MAX_AGENT_STEPS_UNLIMITED_SENTINEL; - stepsValueLabel.textContent = '∞'; - } else { - maxStepsRange.value = boundedMaxAgentSteps(stored.maxAgentSteps); - stepsValueLabel.textContent = maxStepsRange.value; + if (screenshotToggle) screenshotToggle.checked = stored.screenshotFallback ?? true; // on by default + if (maxStepsRange && stepsValueLabel) { + if (isUnlimitedMaxAgentSteps(stored.maxAgentSteps)) { + maxStepsRange.value = MAX_AGENT_STEPS_UNLIMITED_SENTINEL; + stepsValueLabel.textContent = '∞'; + } else { + maxStepsRange.value = boundedMaxAgentSteps(stored.maxAgentSteps); + stepsValueLabel.textContent = maxStepsRange.value; + } } // requestTimeoutMs is stored in milliseconds, displayed as seconds. if (requestTimeoutRange && requestTimeoutValueLabel) { @@ -708,7 +627,9 @@ async function init() { if (clarifyTimeoutPolicySelect) { clarifyTimeoutPolicySelect.value = stored.clarifyTimeoutPolicy === 'safe' ? 'safe' : 'finish'; } - if (autoScreenshotSelect) autoScreenshotSelect.value = stored.autoScreenshot || 'state_change'; + // On navigation (default) captures after the agent opens a page, not after + // every click or keystroke. + if (autoScreenshotSelect) autoScreenshotSelect.value = stored.autoScreenshot || 'navigation'; if (imageDetailSelect) imageDetailSelect.value = stored.imageDetail || 'auto'; if (maxScreenshotsSelect) maxScreenshotsSelect.value = String(stored.maxScreenshotsPerTurn != null ? stored.maxScreenshotsPerTurn : 0); if (maxImageDimensionSelect) maxImageDimensionSelect.value = String(stored.maxImageDimension || 1568); @@ -730,14 +651,9 @@ async function init() { if (notifySoundToggle) notifySoundToggle.checked = stored.notifySound ?? true; if (completionConfettiToggle) completionConfettiToggle.checked = stored.completionConfetti ?? true; if (completionFlashTabToggle) completionFlashTabToggle.checked = stored.completionFlashTab ?? true; + // One switch records traces with full request details, or neither. if (tracingToggle) tracingToggle.checked = stored.tracingEnabled === true; if (feedbackDiagnosticsToggle) feedbackDiagnosticsToggle.checked = stored.feedbackDiagnosticsEnabled !== false; - if (losslessTracingToggle) { - losslessTracingToggle.checked = stored.losslessTrace === true; - // Lossless recording only means something when tracing is on; mirror the - // disabled state so the disclosure reads honestly. - losslessTracingToggle.disabled = tracingToggle?.checked !== true; - } const sessionLimit = normalizeCostAmount(stored.costAllowanceSessionUsd); const totalLimit = normalizeCostAmount(stored.costAllowanceTotalUsd); const totalSpent = normalizeCostAmount(stored.meteredProviderCostSpentUsd, 0); @@ -752,37 +668,41 @@ async function init() { if (scheduledConfirmToggle) scheduledConfirmToggle.checked = stored.scheduledRequireConsequentialConfirmation !== false; // The On fields show the configuration On uses: a profile in On as it is // stored, any other with On's defaults. - const storedDecisionMode = resolveDecisionMode(stored); - setDecisionMode(storedDecisionMode); - const decisionConfig = resolveDecisionConfig(storedDecisionMode === 'on' ? stored : { ...stored, [DECISION_MODE_KEY]: 'on' }); - decisionProviderInput.value = previousDecisionProvider = decisionConfig.provider; - decisionModelInput.value = decisionConfig.model; - decisionEndpointInput.value = stored.decisionBaseUrl || 'http://127.0.0.1:8009'; - decisionVisionInput.value = stored.decisionVisionMode || 'auto'; - decisionVisionSupported = stored.decisionVisionSupported === true; - decisionThresholdInput.value = String(decisionConfig.threshold * 100); - await refreshD1Settings(); - decisionKeyDrafts.set('typesafe', stored.typesafeApiKey || ''); - decisionKeyDrafts.set('openrouter', stored.decisionApiKey || ''); - decisionKeyDrafts.set('local', stored.decisionLocalApiKey || ''); - document.getElementById('decision-endpoint-field').hidden = decisionConfig.provider !== 'local'; - decisionDoneToggle.checked = decisionConfig.features.done; - if (systemOneWatchToggle) systemOneWatchToggle.checked = decisionConfig.features.watch; - if (systemOneClassificationsToggle) systemOneClassificationsToggle.checked = decisionConfig.features.classifications; - if (systemOneBrowserToggle) systemOneBrowserToggle.checked = decisionConfig.features.browser; - if (systemOneCompletionToggle) systemOneCompletionToggle.checked = decisionConfig.features.completion; - if (systemOneApiKeyInput) systemOneApiKeyInput.value = decisionConfig.apiKey; - if (systemOneWatchThresholdRange) systemOneWatchThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneWatchThreshold) * 100); - if (systemOneCompletionThresholdRange) systemOneCompletionThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneCompletionThreshold) * 100); - syncDecisionStatus(); - updateSystemOneThresholdLabels(); + if (decisionProviderInput) { + const storedDecisionMode = resolveDecisionMode(stored); + setDecisionMode(storedDecisionMode); + const decisionConfig = resolveDecisionConfig(storedDecisionMode === 'on' ? stored : { ...stored, [DECISION_MODE_KEY]: 'on' }); + decisionProviderInput.value = previousDecisionProvider = decisionConfig.provider; + decisionModelInput.value = decisionConfig.model; + decisionEndpointInput.value = stored.decisionBaseUrl || 'http://127.0.0.1:8009'; + decisionVisionInput.value = stored.decisionVisionMode || 'auto'; + decisionVisionSupported = stored.decisionVisionSupported === true; + decisionThresholdInput.value = String(decisionConfig.threshold * 100); + await refreshD1Settings(); + decisionKeyDrafts.set('typesafe', stored.typesafeApiKey || ''); + decisionKeyDrafts.set('openrouter', stored.decisionApiKey || ''); + decisionKeyDrafts.set('local', stored.decisionLocalApiKey || ''); + document.getElementById('decision-endpoint-field').hidden = decisionConfig.provider !== 'local'; + decisionDoneToggle.checked = decisionConfig.features.done; + if (systemOneWatchToggle) systemOneWatchToggle.checked = decisionConfig.features.watch; + if (systemOneClassificationsToggle) systemOneClassificationsToggle.checked = decisionConfig.features.classifications; + if (systemOneBrowserToggle) systemOneBrowserToggle.checked = decisionConfig.features.browser; + if (systemOneCompletionToggle) systemOneCompletionToggle.checked = decisionConfig.features.completion; + if (systemOneApiKeyInput) systemOneApiKeyInput.value = decisionConfig.apiKey; + if (systemOneWatchThresholdRange) systemOneWatchThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneWatchThreshold) * 100); + if (systemOneCompletionThresholdRange) systemOneCompletionThresholdRange.value = String(normalizeSystemOneThreshold(stored.systemOneCompletionThreshold) * 100); + syncDecisionStatus(); + updateSystemOneThresholdLabels(); + } // Load vision model config - const visionStored = await browser.storage.local.get(['visionModel']); - const vision = visionStored.visionModel || {}; - visionBaseUrlInput.value = vision.baseUrl || ''; - visionApiKeyInput.value = vision.apiKey || ''; - visionModelInput.value = vision.model || ''; + if (visionBaseUrlInput) { + const visionStored = await browser.storage.local.get(['visionModel']); + const vision = visionStored.visionModel || {}; + visionBaseUrlInput.value = vision.baseUrl || ''; + visionApiKeyInput.value = vision.apiKey || ''; + visionModelInput.value = vision.model || ''; + } // Load transcription service config. Same shape as visionModel; used by // recorder/host.js → transcribe.js when transcribing recorded audio. @@ -816,11 +736,16 @@ async function init() { await initScreenshotRedactionToggle(); await refreshApocalypseModeStatus(); - // Load providers - const res = await sendToBackground('get_providers'); - providersData = res.providers; - activeProviderId = res.active; - renderProviders(); + // Load providers. The decision card's Auto status reads the active one too. + if (providersContainer || decisionModeInputs.length) { + const res = await sendToBackground('get_providers'); + providersData = res.providers; + activeProviderId = res.active; + renderProviders(); + syncDecisionStatus(); + } + // Tooling (UI tests, docs screenshots) waits for this before reading the page. + document.documentElement.dataset.settingsReady = 'true'; } // --- Site permissions (capability × origin grants) --- @@ -1338,7 +1263,7 @@ downloadDirectoryInput?.addEventListener('change', async () => { await browser.storage.local.set({ [DOWNLOAD_DIRECTORY_STORAGE_KEY]: directory }).catch(() => {}); }); -verboseToggle.addEventListener('change', async () => { +verboseToggle?.addEventListener('change', async () => { await browser.storage.local.set({ verboseMode: verboseToggle.checked }).catch(() => {}); }); @@ -1354,15 +1279,15 @@ helpImproveToggle?.addEventListener('change', async () => { await browser.storage.local.set({ helpImproveWebBrain: helpImproveToggle.checked }).catch(() => {}); }); -screenshotToggle.addEventListener('change', async () => { +screenshotToggle?.addEventListener('change', async () => { await browser.storage.local.set({ screenshotFallback: screenshotToggle.checked }).catch(() => {}); }); -maxStepsRange.addEventListener('input', () => { +maxStepsRange?.addEventListener('input', () => { stepsValueLabel.textContent = Number(maxStepsRange.value) === MAX_AGENT_STEPS_UNLIMITED_SENTINEL ? '∞' : maxStepsRange.value; }); -maxStepsRange.addEventListener('change', async () => { +maxStepsRange?.addEventListener('change', async () => { await browser.storage.local.set({ maxAgentSteps: Number(maxStepsRange.value) === MAX_AGENT_STEPS_UNLIMITED_SENTINEL ? 0 @@ -1503,19 +1428,11 @@ completionFlashTabToggle?.addEventListener('change', async () => { await browser.storage.local.set({ completionFlashTab: completionFlashTabToggle.checked }).catch(() => {}); }); +// Record traces is one switch for both trace tiers: on records every run with +// its full request details (losslessTrace), off records neither. tracingToggle?.addEventListener('change', async () => { - await browser.storage.local.set({ tracingEnabled: tracingToggle.checked }).catch(() => {}); - if (losslessTracingToggle) { - losslessTracingToggle.disabled = tracingToggle.checked !== true; - if (!tracingToggle.checked) { - losslessTracingToggle.checked = false; - await browser.storage.local.set({ losslessTrace: false }).catch(() => {}); - } - } -}); - -losslessTracingToggle?.addEventListener('change', async () => { - await browser.storage.local.set({ losslessTrace: losslessTracingToggle.checked }).catch(() => {}); + const enabled = tracingToggle.checked; + await browser.storage.local.set({ tracingEnabled: enabled, losslessTrace: enabled }).catch(() => {}); }); feedbackDiagnosticsToggle?.addEventListener('change', async () => { @@ -1740,7 +1657,7 @@ function flashVisionResult(className, text) { setTimeout(() => resultEl.classList.remove('show'), 2000); } -btnSaveVision.addEventListener('click', async () => { +btnSaveVision?.addEventListener('click', async () => { const baseUrl = normalizeOpenAICompatibleBaseUrl(visionBaseUrlInput.value); const apiKey = visionApiKeyInput.value.trim(); const model = visionModelInput.value.trim(); @@ -1758,7 +1675,7 @@ btnSaveVision.addEventListener('click', async () => { flashVisionResult('ok', t('st.vision.saved')); }); -btnTestVision.addEventListener('click', async () => { +btnTestVision?.addEventListener('click', async () => { const baseUrl = normalizeOpenAICompatibleBaseUrl(visionBaseUrlInput.value); const apiKey = visionApiKeyInput.value.trim(); const model = visionModelInput.value.trim(); @@ -1788,7 +1705,7 @@ btnTestVision.addEventListener('click', async () => { } }); -btnClearVision.addEventListener('click', async () => { +btnClearVision?.addEventListener('click', async () => { visionBaseUrlInput.value = ''; visionApiKeyInput.value = ''; visionModelInput.value = ''; @@ -2010,7 +1927,7 @@ function renderProfileSyncState(state) { if (profileSyncStatus) profileSyncStatus.textContent = describeProfileSyncState(state || {}); } async function refreshProfileSyncState() { const state = await sendToBackground('profile_sync_state').catch(e => ({ status: 'error', error: e.message })); renderProfileSyncState(state); return state; } -async function reloadProfileSyncData() { const stored = await browser.storage.local.get(['profileEnabled', 'profileText', 'visionModel', 'transcriptionModel', 'imageGenModel']); if (profileEnabledToggle) profileEnabledToggle.checked = !!stored.profileEnabled; if (profileTextArea) profileTextArea.value = stored.profileText || ''; const vision = stored.visionModel || {}; visionBaseUrlInput.value = vision.baseUrl || ''; visionApiKeyInput.value = vision.apiKey || ''; visionModelInput.value = vision.model || ''; const transcription = stored.transcriptionModel || {}; if (transcriptionBaseUrlInput) transcriptionBaseUrlInput.value = transcription.baseUrl || ''; if (transcriptionApiKeyInput) transcriptionApiKeyInput.value = transcription.apiKey || ''; if (transcriptionModelInput) transcriptionModelInput.value = transcription.model || ''; const imageGen = stored.imageGenModel || {}; if (imageGenApiKeyInput) imageGenApiKeyInput.value = imageGen.apiKey || ''; if (imageGenModelInput) imageGenModelInput.value = imageGen.model || ''; updateMultimodalDetectedProvider('vision'); updateMultimodalDetectedProvider('transcription'); await loadUserMemorySettings(); const res = await sendToBackground('get_providers'); providersData = res.providers; activeProviderId = res.active; renderProviders(); } +async function reloadProfileSyncData() { const stored = await browser.storage.local.get(['profileEnabled', 'profileText', 'visionModel', 'transcriptionModel', 'imageGenModel']); if (profileEnabledToggle) profileEnabledToggle.checked = !!stored.profileEnabled; if (profileTextArea) profileTextArea.value = stored.profileText || ''; const vision = stored.visionModel || {}; if (visionBaseUrlInput) { visionBaseUrlInput.value = vision.baseUrl || ''; visionApiKeyInput.value = vision.apiKey || ''; visionModelInput.value = vision.model || ''; } const transcription = stored.transcriptionModel || {}; if (transcriptionBaseUrlInput) transcriptionBaseUrlInput.value = transcription.baseUrl || ''; if (transcriptionApiKeyInput) transcriptionApiKeyInput.value = transcription.apiKey || ''; if (transcriptionModelInput) transcriptionModelInput.value = transcription.model || ''; const imageGen = stored.imageGenModel || {}; if (imageGenApiKeyInput) imageGenApiKeyInput.value = imageGen.apiKey || ''; if (imageGenModelInput) imageGenModelInput.value = imageGen.model || ''; updateMultimodalDetectedProvider('vision'); updateMultimodalDetectedProvider('transcription'); await loadUserMemorySettings(); if (!providersContainer) return; const res = await sendToBackground('get_providers'); providersData = res.providers; activeProviderId = res.active; renderProviders(); } async function requestProfileSyncDataConsent() { const permissions = await browser.permissions.getAll(); if (!Object.hasOwn(permissions, 'data_collection')) return window.confirm(t('st.sync.consent.legacy')); return browser.permissions.request({ data_collection: ['personallyIdentifyingInfo', 'authenticationInfo', 'personalCommunications', 'websiteContent', 'technicalAndInteraction'] }); } function profileSyncButtonRestore(button, pendingLabel) { if (!button) return () => {}; @@ -2046,7 +1963,7 @@ btnProfileSyncLock?.addEventListener('click', () => profileSyncAction('profile_s btnProfileSyncChange?.addEventListener('click', async () => { const oldPassword = window.prompt(t('st.sync.prompt.current_password')); if (!oldPassword) return; let newPassword; try { newPassword = promptConfirmedSyncPassword(); } catch (e) { showProfileSyncResult(false, e.message); return; } if (newPassword) await profileSyncAction('profile_sync_change_password', { oldPassword, newPassword }).catch(() => {}); }); btnProfileSyncDisable?.addEventListener('click', () => { if (window.confirm(t('st.sync.confirm.disable'))) profileSyncAction('profile_sync_disable').catch(() => {}); }); btnProfileSyncReset?.addEventListener('click', async () => { if (!window.confirm(t('st.sync.confirm.reset'))) return; let password; try { password = promptConfirmedSyncPassword(t('st.sync.prompt.replacement_password')); } catch (e) { showProfileSyncResult(false, e.message); return; } if (password) await profileSyncAction('profile_sync_reset', { password }).catch(() => {}); }); -refreshProfileSyncState(); +if (profileSyncStatus) refreshProfileSyncState(); // Persisted to browser.storage.local in plaintext; the agent picks the // changes up via the storage.onChanged listener in background.js and @@ -2191,6 +2108,7 @@ function renderUserMemoryRecords(records = []) { } async function loadUserMemorySettings() { + if (!userMemoryList) return; const res = await sendToBackground('get_user_memory').catch((error) => ({ ok: false, error: error.message })); if (!res?.ok) { renderUserMemoryRecords([]); @@ -2841,6 +2759,7 @@ async function refreshWebbrainPaymentNotice() { } function renderProviders() { + if (!providersContainer) return; providersContainer.innerHTML = ''; syncDecisionStatus(); diff --git a/src/firefox/src/ui/sidepanel.js b/src/firefox/src/ui/sidepanel.js index 258efabf62..b3f9cdab55 100644 --- a/src/firefox/src/ui/sidepanel.js +++ b/src/firefox/src/ui/sidepanel.js @@ -217,7 +217,7 @@ if (globalThis.browser?.storage?.onChanged) { function openProviderSettings() { try { - browser.tabs.create({ url: browser.runtime.getURL('src/ui/settings.html#providers') }); + browser.tabs.create({ url: browser.runtime.getURL('src/ui/providers.html#llm') }); } catch { browser.runtime.openOptionsPage(); } @@ -346,7 +346,7 @@ if (globalThis.browser?.storage?.onChanged) { if (!providerStatus) return; providerStatus.textContent = ''; const changeLink = document.createElement('a'); - changeLink.href = browser.runtime.getURL('src/ui/settings.html#providers'); + changeLink.href = browser.runtime.getURL('src/ui/providers.html#llm'); changeLink.target = '_blank'; changeLink.rel = 'noopener noreferrer'; changeLink.textContent = t('ob.cloud.change'); @@ -1981,7 +1981,7 @@ browser.storage.onChanged.addListener((changes) => { }); -// Composer switch for the same storage-backed gate as Settings → Permissions and +// Composer switch for the same storage-backed gate as the permissions page and // /dangerously-skip-permissions. Turning prompts off posts the command's // persistent notice. A permission card already waiting is left for the user to // answer: a display switch must never approve a pending action on its own. @@ -2215,7 +2215,7 @@ function closePermissionGatePopover() { } async function openPermissionsSettingsPage() { - const url = browser.runtime.getURL('src/ui/settings.html#permissions'); + const url = browser.runtime.getURL('src/ui/permissions.html'); try { await browser.tabs.create({ url }); } catch { @@ -8414,7 +8414,7 @@ async function loadProviders() { } async function openProvidersSettingsPage() { - const url = browser.runtime.getURL('src/ui/settings.html#providers'); + const url = browser.runtime.getURL('src/ui/providers.html#llm'); try { await browser.tabs.create({ url }); } catch { @@ -12678,7 +12678,7 @@ function parseCostAllowanceError(content) { return { scope: match[1].toLowerCase() === 'this session' ? 'session' : 'total', limitUsd, - message: content.replace(/\s*Increase or reset the allowance in Settings\.\s*$/i, '').trim(), + message: content.replace(/\s*Increase or reset the allowance in Settings(?: → Budgets)?\.\s*$/i, '').trim(), }; } diff --git a/test/captcha-settings-ui.mjs b/test/captcha-settings-ui.mjs index 62171df7f0..b6cd6995ee 100644 --- a/test/captcha-settings-ui.mjs +++ b/test/captcha-settings-ui.mjs @@ -48,10 +48,11 @@ try { }, { build, lang }); const openSettings = async () => { - await page.goto(`${origin}/src/${build}/src/ui/settings.html#display`); + // The solvers have their own tab in Settings. + await page.goto(`${origin}/src/${build}/src/ui/settings.html#captcha`); await page.reload(); - await page.waitForFunction(() => testRequests.some(r => r.action === 'get_providers')); - await page.locator('details.advanced-settings').first().locator(':scope > summary').click(); + await page.waitForFunction(() => document.documentElement.dataset.settingsReady === 'true'); + assert.equal(await page.locator('.tab-btn.active').getAttribute('data-tab'), 'captcha'); }; await openSettings(); const card = page.locator('#captcha-card'); diff --git a/test/clarify-timeout-policy.mjs b/test/clarify-timeout-policy.mjs index 7c300dda96..bee92ff780 100644 --- a/test/clarify-timeout-policy.mjs +++ b/test/clarify-timeout-policy.mjs @@ -1,4 +1,4 @@ -// Settings → General → "When a question times out": 'finish' (default) keeps +// Settings → Budgets → "When a question times out": 'finish' (default) keeps // an unattended run moving, 'safe' takes the safe first option. Questions // about the short list of consequential actions always take the safe answer, // and so does a question the model did not classify as consequence 'none'. @@ -298,7 +298,7 @@ for (const { build, Agent, policy, Capability } of builds) { const api = build === 'chrome' ? 'chrome' : 'browser'; assert.match(settingsHtml, /', settingsHtml.indexOf('id="webgpu-vision-choice"'))); + const providersHtml = fs.readFileSync(path.join(ROOT, 'src/chrome/src/ui/providers.html'), 'utf8'); + assert.ok(settingsPanelHtml(providersHtml, 'vision').includes('id="webgpu-vision-choice"'), 'the in-browser vision choice sits on the Vision tab'); + const choice = providersHtml.slice(providersHtml.indexOf('id="webgpu-vision-choice"'), providersHtml.indexOf('', providersHtml.indexOf('id="webgpu-vision-choice"'))); assert.deepEqual([...choice.matchAll(/