diff --git a/package.json b/package.json
index cba55e270..07e09f51c 100644
--- a/package.json
+++ b/package.json
@@ -107,7 +107,7 @@
"test:upload-owner": "node --test test/page-monitor-upload-owner.mjs test/page-monitor-upload-release.mjs",
"test:shard:quick": "npm run test:cms && npm run test:markdown && npm run test:generative-media && npm run test:systemone && npm run test:systemone:fast && node --test test/guard-policy.mjs test/browser-dialogs.mjs test/capsolver-cloud-broker.mjs test/captcha-providers.mjs test/captcha-weighted-fallback.mjs test/captcha-hcaptcha-providers.mjs test/captcha-native-providers.mjs test/captcha-runtime-policy.mjs test/captcha-callback-bridge.mjs test/captcha-bridge-registration.mjs test/cookie-banner-host.mjs test/captcha-aws-recovery.mjs test/captcha-documented-contracts.mjs test/huggingface-signup-recovery.mjs test/trace-full-export.mjs test/slash-command-tab-ownership.mjs test/feedback-traces.mjs && npm run test:firefox-bidi && npm run test:billing-notice && npm run test:compass-quota && npm run test:provider-limits && npm run test:provider-catalog && npm run test:provider-instances:ui && npm run test:settings-pages:ui && npm run test:openrouter-capabilities && npm run test:anthropic && npm run test:browser-batch && npm run test:accessibility-tree-benchmark && npm run test:toolbar-guard && npm run test:cloud-bridge-approval && npm run test:discord && npm run test:pdf-read && npm run test:pdf-selection && npm run test:social-contract && npm run test:safesocial && npm run test:build-unpacked && npm run test:attachment-drop && npm run test:workflow-editor && node --test test/profile-sync-stats.mjs && node --test test/memcode-recall.mjs",
"test:shard:runtime-unit": "node --test test/skill-download-wait.mjs && node --test test/agent-lifecycle.mjs test/runtime-startup.mjs test/run-ui-scheduled-lifecycle.mjs test/transport-deadlines.mjs test/cdp-worker-restart.mjs test/bot-memory.mjs test/bot-memory-click-guard.mjs test/bot-memory-registries.mjs test/bot-memory-cloud-controller.mjs test/cdp-clear-receipt.mjs test/cdp-field-submit-recovery.mjs test/conversation-persistence.mjs test/context-live-tool-group.mjs test/integration-races.mjs test/watch-completion-checkpoint.mjs test/runtime-model-identity.mjs test/provider-message-privacy.mjs test/runtime-task-authority.mjs test/planner-repair-authority.mjs test/runtime-progress-continuation.mjs test/chat-resume-chain.mjs test/chat-resume-completion.mjs test/native-chat-execution-ledger.mjs test/chat-send-dispatch-result.mjs test/chat-pre-enter-veto.mjs test/chat-reply-dedup-race.mjs test/memcode-lifecycle.mjs test/runtime-peer-review.mjs test/read-continuation-schema.mjs test/completion-submit-acknowledgement.mjs test/completion-live-status.mjs test/completion-iframe-submit.mjs test/form-validation-alert-readings.mjs test/control-effect-readings.mjs test/guard-reading-carry-over.mjs test/trusted-retry-readings.mjs test/completion-semantic-commit.mjs test/completion-diagnostics.mjs test/mastodon-publication.mjs test/calculator.mjs test/chat-recovery-protocol.mjs test/chat-pending-reconciliation.mjs test/semantic-page-retry.mjs test/pdf-detection.mjs test/runtime-lifecycle.mjs test/collection-read-progress.mjs test/document-read-progress.mjs test/network-lifecycle.mjs test/text-write-cancellation.mjs test/guard-advisory-writes.mjs test/trusted-field-preparation.mjs test/draftjs-text.mjs test/codemirror-text.mjs test/rich-text-frameworks.mjs test/cdp-managed-text-selection.mjs test/firefox-rich-text-readback.mjs test/contenteditable-beforeinput.mjs test/trusted-field-preparation-ownership.mjs test/typing-preparation-geometry.mjs test/chat-steering.mjs test/resource-mutation-guards.mjs test/action-guard-user-override.mjs test/guard-direct-override.mjs test/guard-override-persistence.mjs test/publication-user-override.mjs test/resource-mutation-clarification.mjs test/publication-override-target.mjs test/completion-steering-receipt-authority.mjs test/steering-revision-recovery.mjs test/pending-clarification-hydration.mjs test/run-ui-hidden-panel.mjs test/clarify-timeout-policy.mjs test/guard-ask-cards.mjs test/permission-steering-wakeup.mjs test/pure-calculation-reply.mjs test/pure-calculation-tools.mjs test/page-feedback.mjs test/page-feedback-progress.mjs test/page-feedback-unbindable-target.mjs test/guard-advisory-actions.mjs test/rich-text-preflight-page-change.mjs test/keyboard-receiver-frame.mjs test/input-receiving-frame.mjs test/ask-response-scope.mjs test/auto-mode.mjs test/plan-when-needed.mjs test/planner-prompt-trim.mjs test/model-picker-icon.mjs test/ask-completion-churn.mjs test/page-feedback-policy.mjs test/research-escalation-page-feedback.mjs test/page-feedback-transport-races.mjs test/page-feedback-recovery.mjs test/telegram-read-preparation-agent.mjs test/media-download-agent-handler.mjs test/code-scanning-url-recipient.mjs test/apocalypse-comm-parsing.mjs test/apocalypse-scalar-decoding.mjs test/bitgpu-chat-security.mjs test/social-media-url-upgrades.mjs test/downloaded-file-saved-bytes.mjs test/download-conversation-scope.mjs test/downloaded-file-local-probe.mjs test/formless-verification-recovery.mjs test/file-upload-accept.mjs test/file-upload-accept-agent.mjs test/workflow-route-generic-completion.mjs test/release-publication-completion.mjs test/workflow-implicit-metadata.mjs test/workflow-field-readings.mjs test/workflow-field-anchors.mjs test/user-turn-kind.mjs test/follow-up-task-context.mjs test/completion-current-execution-evidence.mjs test/video-upload-attachment.mjs test/feedback-automatic-churn.mjs test/feedback-navigation-idle.mjs test/feedback-run-boundaries.mjs test/feedback-ask-viewing.mjs test/lifecycle-terminal-done.mjs test/incomplete-completion-recovery.mjs test/guard-advisory-completion.mjs test/lean-mode.mjs test/prompt-unverified-pages.mjs test/prompt-missing-values.mjs test/lifecycle-planner-digest.mjs test/planner-clarify-loop.mjs test/lifecycle-steering-latency.mjs test/lifecycle-steering-restart.mjs test/lifecycle-vision-fallback.mjs test/delivery-click-locks.mjs test/guards-steering-receipts.mjs test/terminal-user-messages.mjs test/improver-providers.mjs test/improver-providers-agent.mjs test/improver-guards-ledger.mjs test/improver-guards-tools.mjs test/improver-clarify.mjs test/improver-clarify-scheduler.mjs test/improver-misc.mjs test/improver-forms.mjs test/improver-forms-strict-secrets.mjs test/improver-content-press-keys-hint.mjs && npm run test:plan-notifications",
- "test:shard:browser-a": "node --test test/captcha-draft-content.mjs test/captcha-challenge-surfaces.mjs && node test/bot-memory-dom.mjs && node test/bot-memory-click-dom.mjs && node test/ui-content-lifecycle.mjs && node --test test/native-telegram-chat.mjs test/native-telegram-recipient.mjs test/telegram-native-baseline.mjs test/telegram-native-latest.mjs test/native-chat-pre-enter-draft.mjs test/chat-draft-dispatch-ownership.mjs test/native-telegram-alias-preparation.mjs test/telegram-read-preparation-content.mjs test/queued-composer-ownership.mjs test/queued-composer-landing.mjs test/onboarding-provider-ready.mjs test/sidepanel-permission-gate-ui.mjs test/permission-skip-dialog-ui.mjs test/permission-skip-session.mjs test/model-picker-status-ui.mjs test/workflow-native-targets.mjs test/native-whatsapp-chat.mjs test/native-chat-context-identity.mjs test/native-whatsapp-contact.mjs test/whatsapp-chat-selection.mjs test/whatsapp-native-bootstrap.mjs test/whatsapp-drawer-identity.mjs test/whatsapp-read-latest.mjs test/whatsapp-read-preparation.mjs test/whatsapp-chat-completion.mjs test/whatsapp-chat-restart.mjs test/chat-goal-lifecycle.mjs test/chat-completion.mjs test/chat-generic-dispatch.mjs test/completion-live-status-browser.mjs test/native-confirmation-visibility.mjs test/native-button-preparation.mjs test/read-continuation-browser.mjs test/iframe-preparation-focus.mjs test/contenteditable-literal.mjs test/native-chat-empty-editor.mjs test/native-chat-trusted-clear.mjs test/chat-steering-ui.mjs test/activity-brain-ui.mjs test/recipient-confirmation-ui.mjs test/assistant-message-visibility-ui.mjs test/slash-command-timeline-ui.mjs test/page-monitor-ui.mjs test/x-compose-trusted-typing.mjs test/page-monitor-dialog.mjs test/page-monitor-dialog-native.mjs test/page-monitor-inline-post.mjs test/bluesky-composer-context.mjs test/page-monitor-anchored.mjs test/page-monitor-upload-owner.mjs test/page-monitor-upload-release.mjs test/page-monitor-native-controls.mjs test/page-monitor-native-preparation.mjs test/native-preparation-cold.mjs test/page-monitor-navigation.mjs test/page-monitor-main-owner.mjs test/page-monitor-capture-cost.mjs test/page-monitor-collateral-controls.mjs test/accessibility-tree-scoped-budget.mjs test/ax-reference-origin.mjs test/page-monitor-decorative-hit.mjs test/social-ui-navigation.mjs test/native-resource-deletion-binding.mjs test/native-mastodon-confirmation.mjs test/dropdown-menu-inventory.mjs test/page-monitor-passive-progress.mjs test/page-monitor-feed-items.mjs test/media-download-binding.mjs test/media-download-capture-integration.mjs test/social-media-downloader-reinjection.mjs test/upload-file-local-state-guidance.mjs test/upload-file-source-approval.mjs test/monitor-intervention-contract.mjs test/monitor-owned-geometry.mjs test/monitor-viewport-remainder.mjs test/monitor-scroll-churn.mjs test/monitor-local-attribution.mjs test/monitor-lifecycle-leaks.mjs test/lifecycle-run-ui.mjs test/lifecycle-menu-prompts-held.mjs test/delivery-cdp-input.mjs test/delivery-click-ax-response-loss.mjs test/delivery-native-button-geometry.mjs test/delivery-hover-transition.mjs test/delivery-native-button-route.mjs test/delivery-dispatch-boundary.mjs test/delivery-stop-compound.mjs test/guards-control-classification.mjs test/guards-unbound-deletion.mjs test/submit-probe-readings.mjs test/declined-submission-identity.mjs test/improver-content-account-chrome.mjs test/improver-content-recipient.mjs test/improver-content-truncated-replacement.mjs test/improver-forms-probe.mjs test/improver-misc-trace-browser.mjs test/page-feedback-held-time.mjs test/page-monitor-held-observation.mjs",
+ "test:shard:browser-a": "node --test test/captcha-draft-content.mjs test/captcha-challenge-surfaces.mjs && node test/bot-memory-dom.mjs && node test/bot-memory-click-dom.mjs && node test/ui-content-lifecycle.mjs && node --test test/native-telegram-chat.mjs test/native-telegram-recipient.mjs test/telegram-native-baseline.mjs test/telegram-native-latest.mjs test/native-chat-pre-enter-draft.mjs test/chat-draft-dispatch-ownership.mjs test/native-telegram-alias-preparation.mjs test/telegram-read-preparation-content.mjs test/queued-composer-ownership.mjs test/queued-composer-landing.mjs test/onboarding-provider-ready.mjs test/sidepanel-permission-gate-ui.mjs test/permission-skip-dialog-ui.mjs test/permission-skip-session.mjs test/model-picker-status-ui.mjs test/workflow-native-targets.mjs test/native-whatsapp-chat.mjs test/native-chat-context-identity.mjs test/native-whatsapp-contact.mjs test/whatsapp-chat-selection.mjs test/whatsapp-native-bootstrap.mjs test/whatsapp-drawer-identity.mjs test/whatsapp-read-latest.mjs test/whatsapp-read-preparation.mjs test/whatsapp-chat-completion.mjs test/whatsapp-chat-restart.mjs test/chat-goal-lifecycle.mjs test/chat-completion.mjs test/chat-generic-dispatch.mjs test/completion-live-status-browser.mjs test/native-confirmation-visibility.mjs test/native-button-preparation.mjs test/read-continuation-browser.mjs test/iframe-preparation-focus.mjs test/contenteditable-literal.mjs test/native-chat-empty-editor.mjs test/native-chat-trusted-clear.mjs test/chat-steering-ui.mjs test/activity-brain-ui.mjs test/recipient-confirmation-ui.mjs test/clarify-option-shortcuts.mjs test/assistant-message-visibility-ui.mjs test/slash-command-timeline-ui.mjs test/page-monitor-ui.mjs test/x-compose-trusted-typing.mjs test/page-monitor-dialog.mjs test/page-monitor-dialog-native.mjs test/page-monitor-inline-post.mjs test/bluesky-composer-context.mjs test/page-monitor-anchored.mjs test/page-monitor-upload-owner.mjs test/page-monitor-upload-release.mjs test/page-monitor-native-controls.mjs test/page-monitor-native-preparation.mjs test/native-preparation-cold.mjs test/page-monitor-navigation.mjs test/page-monitor-main-owner.mjs test/page-monitor-capture-cost.mjs test/page-monitor-collateral-controls.mjs test/accessibility-tree-scoped-budget.mjs test/ax-reference-origin.mjs test/page-monitor-decorative-hit.mjs test/social-ui-navigation.mjs test/native-resource-deletion-binding.mjs test/native-mastodon-confirmation.mjs test/dropdown-menu-inventory.mjs test/page-monitor-passive-progress.mjs test/page-monitor-feed-items.mjs test/media-download-binding.mjs test/media-download-capture-integration.mjs test/social-media-downloader-reinjection.mjs test/upload-file-local-state-guidance.mjs test/upload-file-source-approval.mjs test/monitor-intervention-contract.mjs test/monitor-owned-geometry.mjs test/monitor-viewport-remainder.mjs test/monitor-scroll-churn.mjs test/monitor-local-attribution.mjs test/monitor-lifecycle-leaks.mjs test/lifecycle-run-ui.mjs test/lifecycle-menu-prompts-held.mjs test/delivery-cdp-input.mjs test/delivery-click-ax-response-loss.mjs test/delivery-native-button-geometry.mjs test/delivery-hover-transition.mjs test/delivery-native-button-route.mjs test/delivery-dispatch-boundary.mjs test/delivery-stop-compound.mjs test/guards-control-classification.mjs test/guards-unbound-deletion.mjs test/submit-probe-readings.mjs test/declined-submission-identity.mjs test/improver-content-account-chrome.mjs test/improver-content-recipient.mjs test/improver-content-truncated-replacement.mjs test/improver-forms-probe.mjs test/improver-misc-trace-browser.mjs test/page-feedback-held-time.mjs test/page-monitor-held-observation.mjs",
"test:shard:browser-b1": "node test/message-recipient-upload.mjs && node test/message-recipient-clarify-binding.mjs && node --test test/message-recipient-whatsapp.mjs test/message-control-readings.mjs && node test/quality/integration-mv3.mjs --full-form && node test/quality/integration-mv3.mjs --batch && node test/quality/literal-calculate-midrun-mv3.mjs && node test/quality/ask-completion-churn-mv3.mjs && node test/quality/ask-person-activity-mv3.mjs && node test/quality/telegram-cold-preparation-mv3.mjs && node test/quality/native-chat-mv3.mjs && node test/quality/native-chat-presubmit-mv3.mjs && node test/quality/cloud-bot-memory-mv3.mjs",
"test:shard:browser-b2": "node test/quality/whatsapp-contact-matrix.mjs && node test/quality/pdf-detection-mv3.mjs && node test/quality/download-upload-mv3.mjs && node test/quality/upload-release-binding-mv3.mjs && node test/quality/upload-release-binding-mv3.mjs --selector-recovery && node test/quality/upload-release-binding-mv3.mjs --sequential-assets && node test/quality/release-review-world-mv3.mjs && node test/quality/downloaded-file-saved-bytes-mv3.mjs && npm run test:quality:resolved-address && node test/quality/file-upload-accept-mv3.mjs && node test/quality/bulk-resume-mv3.mjs && node test/quality/shared-action-guards-mv3.mjs && node test/quality/video-upload-attachment-mv3.mjs && node --test test/iframe-probe-match-index.mjs",
"test:shard:browser-c": "node test/quality/literal-frame-mv3.mjs && node test/quality/mastodon-publication-mv3.mjs && node test/quality/mastodon-reply-route-mv3.mjs && node test/quality/mastodon-deletion-mv3.mjs && node test/quality/mastodon-delete-confirmation-mv3.mjs && node test/quality/mastodon-delete-confirmation-mv3.mjs --menu-read && node test/quality/mastodon-delete-confirmation-mv3.mjs --vague && node test/quality/mastodon-delete-after-correction-mv3.mjs && node test/quality/unbound-deletion-mv3.mjs && node test/quality/recipient-clarify-mv3.mjs && node test/quality/open-chat-recipients-mv3.mjs && node test/quality/correction-cross-site-mv3.mjs && node test/quality/anchored-action-mv3.mjs && node test/quality/inline-social-composer-mv3.mjs && node test/quality/x-compose-dialog-mv3.mjs && node test/quality/bluesky-composer-mv3.mjs && node test/quality/dropdown-menu-matrix.mjs && node test/quality/mastodon-deletion-navigation-mv3.mjs && node test/quality/semantic-navigation-matrix.mjs && node test/quality/workflow-replay-mv3.mjs && node test/quality/generative-media-mv3.mjs && node test/quality/cdp-worker-restart-mv3.mjs && node test/quality/steering-worker-restart-mv3.mjs && node --test test/viewport-capture-browser.mjs && npm run test:vision-mode",
diff --git a/src/chrome/src/ui/locales/ar.js b/src/chrome/src/ui/locales/ar.js
index 956152265..2a2ac6cd1 100644
--- a/src/chrome/src/ui/locales/ar.js
+++ b/src/chrome/src/ui/locales/ar.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "يُنزّل ملفات من",
"sp.perm.verb.upload": "يرفع ملفًا إلى",
"sp.perm.verb.record": "يُسجّل علامة التبويب (والميكروفون) على",
- "sp.help.shortcuts_html": "اختصارات لوحة المفاتيحCtrl/Cmd+/ — التركيز على حقل الإدخالCtrl/Cmd+Shift+A — التبديل إلى وضع السؤالCtrl/Cmd+Shift+X — التبديل إلى وضع التنفيذCtrl/Cmd+Shift+D — التبديل إلى وضع التطويرCtrl/Cmd+M — تبديل الإدخال الصوتي",
+ "sp.help.shortcuts_html": "اختصارات لوحة المفاتيحCtrl/Cmd+/ — التركيز على حقل الإدخالCtrl/Cmd+Shift+A — التبديل إلى وضع السؤالCtrl/Cmd+Shift+X — التبديل إلى وضع التنفيذCtrl/Cmd+Shift+D — التبديل إلى وضع التطويرEscape — إيقاف التشغيل النشطEscape مرتين — إيقاف تسجيل نشط1–9 — اختيار الإجابة التي تحمل هذا الرقم",
"sp.slash.record_transcribe": "التسجيل وحفظ نص Whisper بعد الإيقاف",
"sp.slash.unknown_command": "أمر شرطة مائلة غير معروف {command}. استخدم /help لعرض الأوامر المتاحة.",
"sp.slash.invalid_usage": "بنية أمر الشرطة المائلة غير صالحة. الاستخدام: {usage}",
diff --git a/src/chrome/src/ui/locales/bn.js b/src/chrome/src/ui/locales/bn.js
index d446abf60..ae2bf9a26 100644
--- a/src/chrome/src/ui/locales/bn.js
+++ b/src/chrome/src/ui/locales/bn.js
@@ -527,7 +527,7 @@ export default {
'sp.permissions.gate_off': 'বন্ধ: WebBrain জিজ্ঞাসা না করেই প্রতিটি সাইটে কাজ করে।',
'sp.permissions.manage': 'সাইটের অনুমতি পরিচালনা করুন',
'sp.permissions.enabled': 'অনুমতি প্রম্পট আবার চালু হয়েছে।',
- "sp.help.shortcuts_html": "কীবোর্ড শর্টকাটCtrl/Cmd+/ - ইনপুট ফোকাস করুনCtrl/Cmd+Shift+A — আস্ক মোডে স্যুইচ করুনCtrl/Cmd+Shift+X — অ্যাক্ট মোডে স্যুইচ করুনCtrl/Cmd+Shift+D — ডেভ মোডে স্যুইচ করুনEscape - সক্রিয় রান বন্ধ করুনEscape দুবার - একটি সক্রিয় রেকর্ডিং বন্ধ করুন",
+ "sp.help.shortcuts_html": "কীবোর্ড শর্টকাটCtrl/Cmd+/ - ইনপুট ফোকাস করুনCtrl/Cmd+Shift+A — আস্ক মোডে স্যুইচ করুনCtrl/Cmd+Shift+X — অ্যাক্ট মোডে স্যুইচ করুনCtrl/Cmd+Shift+D — ডেভ মোডে স্যুইচ করুনEscape - সক্রিয় রান বন্ধ করুনEscape দুবার - একটি সক্রিয় রেকর্ডিং বন্ধ করুন1–9 — সেই নম্বরের উত্তরটি বেছে নিন",
"sp.slash.record_transcribe": "থামার পরে একটি হুইস্পার প্রতিলিপি রেকর্ড করুন এবং সংরক্ষণ করুন",
"sp.slash.unknown_command": "অজানা স্ল্যাশ কমান্ড {command}। উপলব্ধ কমান্ড দেখতে /help ব্যবহার করুন।",
"sp.slash.invalid_usage": "অবৈধ স্ল্যাশ কমান্ড সিনট্যাক্স। ব্যবহার: {usage}",
diff --git a/src/chrome/src/ui/locales/de.js b/src/chrome/src/ui/locales/de.js
index d28d3f541..c99b8291c 100644
--- a/src/chrome/src/ui/locales/de.js
+++ b/src/chrome/src/ui/locales/de.js
@@ -532,7 +532,7 @@ export default {
'sp.perm.verb.record': 'Tab (und Mikrofon) aufnehmen auf',
'sp.perm.verb.schedule': 'zukünftige Aufgaben planen für',
'sp.perm.verb.window': 'die Größe des Browserfensters ändern auf',
- 'sp.help.shortcuts_html': 'TastenkürzelCtrl/Cmd+/ — Eingabefeld fokussierenCtrl/Cmd+Shift+A — Zum Fragen-Modus wechselnCtrl/Cmd+Shift+X — Zum Handeln-Modus wechselnCtrl/Cmd+Shift+D — Zum Dev-Modus wechselnEscape — Aktiven Durchlauf stoppenEscape zweimal — Aktive Aufnahme stoppen',
+ 'sp.help.shortcuts_html': 'TastenkürzelCtrl/Cmd+/ — Eingabefeld fokussierenCtrl/Cmd+Shift+A — Zum Fragen-Modus wechselnCtrl/Cmd+Shift+X — Zum Handeln-Modus wechselnCtrl/Cmd+Shift+D — Zum Dev-Modus wechselnEscape — Aktiven Durchlauf stoppenEscape zweimal — Aktive Aufnahme stoppen1–9 — Antwort mit dieser Nummer wählen',
'sp.compact.nothing_to_compact': 'Noch nichts zu kompaktieren — es gibt nicht genügend älteren Kontext.',
'sp.compact.busy': 'Kompaktierung nicht möglich, während ein Durchlauf läuft — warten Sie auf dessen Abschluss.',
'sp.compact.failed': 'Kontext-Kompaktierung fehlgeschlagen: {error}',
diff --git a/src/chrome/src/ui/locales/en.js b/src/chrome/src/ui/locales/en.js
index 9699d582f..e65abbb36 100644
--- a/src/chrome/src/ui/locales/en.js
+++ b/src/chrome/src/ui/locales/en.js
@@ -541,7 +541,7 @@ export default {
'sp.permissions.gate_off': 'Off: WebBrain acts on every site without asking.',
'sp.permissions.manage': 'Manage site permissions',
'sp.permissions.enabled': 'Permission prompts are on again.',
- "sp.help.shortcuts_html": "Keyboard ShortcutsCtrl/Cmd+/ — Focus the inputCtrl/Cmd+Shift+A — Switch to Ask modeCtrl/Cmd+Shift+X — Switch to Act modeCtrl/Cmd+Shift+D — Switch to Dev modeEscape — Stop the active runEscape twice — Stop an active recording",
+ "sp.help.shortcuts_html": "Keyboard ShortcutsCtrl/Cmd+/ — Focus the inputCtrl/Cmd+Shift+A — Switch to Ask modeCtrl/Cmd+Shift+X — Switch to Act modeCtrl/Cmd+Shift+D — Switch to Dev modeEscape — Stop the active runEscape twice — Stop an active recording1–9 — Pick that answer when WebBrain asks",
"sp.slash.record_transcribe": "Record and save a Whisper transcript after stop",
"sp.slash.unknown_command": "Unknown slash command {command}. Use /help to see available commands.",
"sp.slash.invalid_usage": "Invalid slash command syntax. Usage: {usage}",
diff --git a/src/chrome/src/ui/locales/es.js b/src/chrome/src/ui/locales/es.js
index 2c4b33d2c..5fff8c5c6 100644
--- a/src/chrome/src/ui/locales/es.js
+++ b/src/chrome/src/ui/locales/es.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "descargar archivos de",
"sp.perm.verb.upload": "subir un archivo a",
"sp.perm.verb.record": "grabar la pestaña (y el micrófono) en",
- "sp.help.shortcuts_html": "Atajos de tecladoCtrl/Cmd+/ — Enfocar la entradaCtrl/Cmd+Shift+A — Cambiar al modo PreguntarCtrl/Cmd+Shift+X — Cambiar al modo ActuarCtrl/Cmd+Shift+D — Cambiar al modo DesarrolloCtrl/Cmd+M — Alternar entrada de voz",
+ "sp.help.shortcuts_html": "Atajos de tecladoCtrl/Cmd+/ — Enfocar la entradaCtrl/Cmd+Shift+A — Cambiar al modo PreguntarCtrl/Cmd+Shift+X — Cambiar al modo ActuarCtrl/Cmd+Shift+D — Cambiar al modo DesarrolloEscape — Detener la ejecución activaEscape dos veces — Detener una grabación activa1–9 — Elegir la respuesta con ese número",
"sp.slash.record_transcribe": "Grabar y guardar una transcripción de Whisper al detener",
"sp.slash.unknown_command": "Comando de barra desconocido {command}. Usa /help para ver los comandos disponibles.",
"sp.slash.invalid_usage": "Sintaxis de comando de barra no válida. Uso: {usage}",
diff --git a/src/chrome/src/ui/locales/fa.js b/src/chrome/src/ui/locales/fa.js
index 2548fc563..8744760de 100644
--- a/src/chrome/src/ui/locales/fa.js
+++ b/src/chrome/src/ui/locales/fa.js
@@ -527,7 +527,7 @@ export default {
'sp.permissions.gate_off': 'خاموش: WebBrain بدون پرسیدن در همهٔ سایتها اقدام میکند.',
'sp.permissions.manage': 'مدیریت مجوزهای سایت',
'sp.permissions.enabled': 'درخواستهای مجوز دوباره روشن شدند.',
- "sp.help.shortcuts_html": "میانبرهای صفحه کلیدCtrl/Cmd+/ - روی ورودی تمرکز کنیدCtrl/Cmd+Shift+A - به حالت سؤال برویدCtrl/Cmd+Shift+X - به حالت Act تغییر دهیدCtrl/Cmd+Shift+D - به حالت Dev برویدEscape - اجرای فعال را متوقف کنیدEscape دو بار — یک ضبط فعال را متوقف کنید",
+ "sp.help.shortcuts_html": "میانبرهای صفحه کلیدCtrl/Cmd+/ - روی ورودی تمرکز کنیدCtrl/Cmd+Shift+A - به حالت سؤال برویدCtrl/Cmd+Shift+X - به حالت Act تغییر دهیدCtrl/Cmd+Shift+D - به حالت Dev برویدEscape - اجرای فعال را متوقف کنیدEscape دو بار — یک ضبط فعال را متوقف کنید1–9 - انتخاب پاسخی که آن شماره را دارد",
"sp.slash.record_transcribe": "پس از توقف، رونوشت Whisper را ضبط و ذخیره کنید",
"sp.slash.unknown_command": "دستور اسلش نامشخص {command}. از /help برای دیدن دستورات موجود استفاده کنید.",
"sp.slash.invalid_usage": "دستور دستور اسلش نامعتبر است. استفاده: {usage}",
diff --git a/src/chrome/src/ui/locales/fr.js b/src/chrome/src/ui/locales/fr.js
index 558c189bd..98cd8afa1 100644
--- a/src/chrome/src/ui/locales/fr.js
+++ b/src/chrome/src/ui/locales/fr.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "télécharger des fichiers depuis",
"sp.perm.verb.upload": "téléverser un fichier vers",
"sp.perm.verb.record": "enregistrer l'onglet (et le microphone) sur",
- "sp.help.shortcuts_html": "Raccourcis clavierCtrl/Cmd+/ — Focus sur la zone de saisieCtrl/Cmd+Shift+A — Passer en mode DemanderCtrl/Cmd+Shift+X — Passer en mode AgirCtrl/Cmd+Shift+D — Passer en mode DéveloppementCtrl/Cmd+M — Basculer la saisie vocale",
+ "sp.help.shortcuts_html": "Raccourcis clavierCtrl/Cmd+/ — Focus sur la zone de saisieCtrl/Cmd+Shift+A — Passer en mode DemanderCtrl/Cmd+Shift+X — Passer en mode AgirCtrl/Cmd+Shift+D — Passer en mode DéveloppementEscape — Arrêter l’exécution en coursEscape deux fois — Arrêter un enregistrement en cours1–9 — Choisir la réponse portant ce numéro",
"sp.slash.record_transcribe": "Enregistrer et sauvegarder une transcription Whisper à l'arrêt",
"sp.slash.unknown_command": "Commande slash inconnue {command}. Utilisez /help pour voir les commandes disponibles.",
"sp.slash.invalid_usage": "Syntaxe de commande slash invalide. Utilisation : {usage}",
diff --git a/src/chrome/src/ui/locales/he.js b/src/chrome/src/ui/locales/he.js
index 98cc3789a..e1223386b 100644
--- a/src/chrome/src/ui/locales/he.js
+++ b/src/chrome/src/ui/locales/he.js
@@ -512,7 +512,7 @@ export default {
"sp.permissions.gate_off": "כבוי: WebBrain פועל בכל אתר בלי לשאול.",
"sp.permissions.manage": "ניהול הרשאות אתרים",
"sp.permissions.enabled": "בקשות ההרשאה הופעלו שוב.",
- "sp.help.shortcuts_html": "קיצורי מקלדתCtrl/Cmd+/ — מקד את שדה הקלטCtrl/Cmd+Shift+A — עבור למצב שאלCtrl/Cmd+Shift+X — עבור למצב פעולהCtrl/Cmd+Shift+D — עבור למצב DevCtrl/Cmd+M — הפעל או השבת קלט קולי",
+ "sp.help.shortcuts_html": "קיצורי מקלדתCtrl/Cmd+/ — מקד את שדה הקלטCtrl/Cmd+Shift+A — עבור למצב שאלCtrl/Cmd+Shift+X — עבור למצב פעולהCtrl/Cmd+Shift+D — עבור למצב DevEscape — עצירת ההרצה הפעילהEscape פעמיים — עצירת הקלטה פעילה1–9 — בחירת התשובה שמספרה זה",
"sp.slash.record_transcribe": "הקלט ושמור תמלול Whisper לאחר העצירה",
"sp.slash.unknown_command": "פקודת לוכסן לא מוכרת {command}. השתמשו ב-/help כדי לראות את הפקודות הזמינות.",
"sp.slash.invalid_usage": "תחביר פקודת לוכסן לא תקין. שימוש: {usage}",
diff --git a/src/chrome/src/ui/locales/hi.js b/src/chrome/src/ui/locales/hi.js
index 37fa9184f..0bb64e487 100644
--- a/src/chrome/src/ui/locales/hi.js
+++ b/src/chrome/src/ui/locales/hi.js
@@ -527,7 +527,7 @@ export default {
'sp.permissions.gate_off': 'बंद: WebBrain बिना पूछे हर साइट पर कार्रवाई करता है।',
'sp.permissions.manage': 'साइट अनुमतियां प्रबंधित करें',
'sp.permissions.enabled': 'अनुमति संकेत फिर से चालू हैं।',
- "sp.help.shortcuts_html": "कीबोर्ड शॉर्टकटCtrl/Cmd+/ - इनपुट पर फोकस करेंCtrl/Cmd+Shift+A - आस्क मोड पर स्विच करेंCtrl/Cmd+Shift+X - एक्ट मोड पर स्विच करेंCtrl/Cmd+Shift+D - डेव मोड पर स्विच करेंEscape - सक्रिय रन बंद करेंEscape दो बार - सक्रिय रिकॉर्डिंग बंद करें",
+ "sp.help.shortcuts_html": "कीबोर्ड शॉर्टकटCtrl/Cmd+/ - इनपुट पर फोकस करेंCtrl/Cmd+Shift+A - आस्क मोड पर स्विच करेंCtrl/Cmd+Shift+X - एक्ट मोड पर स्विच करेंCtrl/Cmd+Shift+D - डेव मोड पर स्विच करेंEscape - सक्रिय रन बंद करेंEscape दो बार - सक्रिय रिकॉर्डिंग बंद करें1–9 - उस नंबर वाला उत्तर चुनें",
"sp.slash.record_transcribe": "रुकने के बाद व्हिस्पर प्रतिलेख को रिकॉर्ड करें और सहेजें",
"sp.slash.unknown_command": "अज्ञात स्लैश कमांड {command}। उपलब्ध कमांड देखने के लिए /help का उपयोग करें।",
"sp.slash.invalid_usage": "अमान्य स्लैश कमांड सिंटैक्स. उपयोग: {usage}",
diff --git a/src/chrome/src/ui/locales/id.js b/src/chrome/src/ui/locales/id.js
index 7db0f2b51..655df6f0d 100644
--- a/src/chrome/src/ui/locales/id.js
+++ b/src/chrome/src/ui/locales/id.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "mengunduh berkas dari",
"sp.perm.verb.upload": "mengunggah berkas ke",
"sp.perm.verb.record": "merekam tab (dan mikrofon) pada",
- "sp.help.shortcuts_html": "Pintasan KeyboardCtrl/Cmd+/ — Fokus ke inputCtrl/Cmd+Shift+A — Beralih ke mode TanyaCtrl/Cmd+Shift+X — Beralih ke mode AksiCtrl/Cmd+Shift+D — Beralih ke mode DevCtrl/Cmd+M — Alihkan input suara",
+ "sp.help.shortcuts_html": "Pintasan KeyboardCtrl/Cmd+/ — Fokus ke inputCtrl/Cmd+Shift+A — Beralih ke mode TanyaCtrl/Cmd+Shift+X — Beralih ke mode AksiCtrl/Cmd+Shift+D — Beralih ke mode DevEscape — Hentikan proses yang berjalanEscape dua kali — Hentikan perekaman yang berjalan1–9 — Pilih jawaban bernomor itu",
"sp.slash.record_transcribe": "Rekam dan simpan transkrip Whisper setelah berhenti",
"sp.slash.unknown_command": "Perintah garis miring tidak dikenal {command}. Gunakan /help untuk melihat perintah yang tersedia.",
"sp.slash.invalid_usage": "Sintaks perintah garis miring tidak valid. Penggunaan: {usage}",
diff --git a/src/chrome/src/ui/locales/ja.js b/src/chrome/src/ui/locales/ja.js
index 8b4497e15..99a40fb2e 100644
--- a/src/chrome/src/ui/locales/ja.js
+++ b/src/chrome/src/ui/locales/ja.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "からのファイルのダウンロードを",
"sp.perm.verb.upload": "へのファイルのアップロードを",
"sp.perm.verb.record": "でのタブ(およびマイク)の録画を",
- "sp.help.shortcuts_html": "キーボードショートカットCtrl/Cmd+/ — 入力にフォーカスCtrl/Cmd+Shift+A — 質問モードに切り替えCtrl/Cmd+Shift+X — 操作モードに切り替えCtrl/Cmd+Shift+D — 開発モードに切り替えCtrl/Cmd+M — 音声入力を切り替え",
+ "sp.help.shortcuts_html": "キーボードショートカットCtrl/Cmd+/ — 入力にフォーカスCtrl/Cmd+Shift+A — 質問モードに切り替えCtrl/Cmd+Shift+X — 操作モードに切り替えCtrl/Cmd+Shift+D — 開発モードに切り替えEscape — 実行中のタスクを停止Escape 2回 — 録音を停止1–9 — その番号の回答を選択",
"sp.slash.record_transcribe": "録画停止後に Whisper の文字起こしを保存",
"sp.slash.unknown_command": "不明なスラッシュコマンドです: {command}。利用可能なコマンドは /help で確認できます。",
"sp.slash.invalid_usage": "スラッシュコマンドの構文が正しくありません。使用法: {usage}",
diff --git a/src/chrome/src/ui/locales/ko.js b/src/chrome/src/ui/locales/ko.js
index 6889873f3..2acf5f9b5 100644
--- a/src/chrome/src/ui/locales/ko.js
+++ b/src/chrome/src/ui/locales/ko.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "파일 다운로드",
"sp.perm.verb.upload": "파일 업로드",
"sp.perm.verb.record": "탭(및 마이크) 녹화",
- "sp.help.shortcuts_html": "키보드 단축키Ctrl/Cmd+/ — 입력에 포커스Ctrl/Cmd+Shift+A — 질문 모드로 전환Ctrl/Cmd+Shift+X — 실행 모드로 전환Ctrl/Cmd+Shift+D — 개발 모드로 전환Ctrl/Cmd+M — 음성 입력 전환",
+ "sp.help.shortcuts_html": "키보드 단축키Ctrl/Cmd+/ — 입력에 포커스Ctrl/Cmd+Shift+A — 질문 모드로 전환Ctrl/Cmd+Shift+X — 실행 모드로 전환Ctrl/Cmd+Shift+D — 개발 모드로 전환Escape — 실행 중인 작업 중지Escape 두 번 — 진행 중인 녹음 중지1–9 — 해당 번호의 답변 선택",
"sp.slash.record_transcribe": "녹화 후 Whisper 전사본 저장",
"sp.slash.unknown_command": "알 수 없는 슬래시 명령어입니다: {command}. 사용 가능한 명령어는 /help에서 확인하세요.",
"sp.slash.invalid_usage": "슬래시 명령어 구문이 올바르지 않습니다. 사용법: {usage}",
diff --git a/src/chrome/src/ui/locales/ms.js b/src/chrome/src/ui/locales/ms.js
index d2d11ff0f..72d7e6e05 100644
--- a/src/chrome/src/ui/locales/ms.js
+++ b/src/chrome/src/ui/locales/ms.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "memuat turun fail dari",
"sp.perm.verb.upload": "memuat naik fail ke",
"sp.perm.verb.record": "merakam tab (dan mikrofon) pada",
- "sp.help.shortcuts_html": "Pintasan Papan KekunciCtrl/Cmd+/ — Fokus pada medan inputCtrl/Cmd+Shift+A — Beralih ke mod TanyaCtrl/Cmd+Shift+X — Beralih ke mod LakukanCtrl/Cmd+Shift+D — Beralih ke mod DevCtrl/Cmd+M — Togol input suara",
+ "sp.help.shortcuts_html": "Pintasan Papan KekunciCtrl/Cmd+/ — Fokus pada medan inputCtrl/Cmd+Shift+A — Beralih ke mod TanyaCtrl/Cmd+Shift+X — Beralih ke mod LakukanCtrl/Cmd+Shift+D — Beralih ke mod DevEscape — Hentikan larian aktifEscape dua kali — Hentikan rakaman aktif1–9 — Pilih jawapan bernombor itu",
"sp.slash.record_transcribe": "Rakam dan simpan transkrip Whisper selepas berhenti",
"sp.slash.unknown_command": "Arahan slash tidak diketahui {command}. Gunakan /help untuk melihat arahan yang tersedia.",
"sp.slash.invalid_usage": "Sintaks arahan slash tidak sah. Penggunaan: {usage}",
diff --git a/src/chrome/src/ui/locales/nl.js b/src/chrome/src/ui/locales/nl.js
index 1dfd1923c..017af8675 100644
--- a/src/chrome/src/ui/locales/nl.js
+++ b/src/chrome/src/ui/locales/nl.js
@@ -513,7 +513,7 @@ export default {
'sp.permissions.gate_off': 'Uit: WebBrain handelt op elke site zonder te vragen.',
'sp.permissions.manage': 'Sitemachtigingen beheren',
'sp.permissions.enabled': 'Machtigingsvragen staan weer aan.',
- "sp.help.shortcuts_html": "Sneltoetsen
...",
+ "sp.help.shortcuts_html": "SneltoetsenCtrl/Cmd+/ — Het invoerveld focussenCtrl/Cmd+Shift+A — Naar de modus Vragen schakelenCtrl/Cmd+Shift+X — Naar de modus Handelen schakelenCtrl/Cmd+Shift+D — Naar de modus Dev schakelenEscape — De actieve run stoppenEscape tweemaal — Een actieve opname stoppen1–9 — Het antwoord met dat nummer kiezen",
"sp.slash.record_transcribe": "Opnemen en Whisper-transcriptie opslaan na stop",
"sp.slash.unknown_command": "Onbekend slashcommando {command}. Gebruik /help om beschikbare commando's te zien.",
"sp.slash.invalid_usage": "Ongeldige slashcommandosyntaxis. Gebruik: {usage}",
diff --git a/src/chrome/src/ui/locales/pl.js b/src/chrome/src/ui/locales/pl.js
index 9514848cc..5ddf674ff 100644
--- a/src/chrome/src/ui/locales/pl.js
+++ b/src/chrome/src/ui/locales/pl.js
@@ -411,7 +411,7 @@ export default {
'sp.permissions.gate_off': 'Wyłączone: WebBrain działa na każdej stronie bez pytania.',
'sp.permissions.manage': 'Zarządzaj uprawnieniami stron',
'sp.permissions.enabled': 'Pytania o uprawnienia są ponownie włączone.',
- "sp.help.shortcuts_html": "Skróty klawiszoweCtrl/Cmd+/ — Ustaw fokus na polu wprowadzaniaCtrl/Cmd+Shift+A — Przełącz na tryb PytajCtrl/Cmd+Shift+X — Przełącz na tryb DziałajCtrl/Cmd+Shift+D — Przełącz na tryb DevCtrl/Cmd+M — Togol wprowadzanie głosowe",
+ "sp.help.shortcuts_html": "Skróty klawiszoweCtrl/Cmd+/ — Ustaw fokus na polu wprowadzaniaCtrl/Cmd+Shift+A — Przełącz na tryb PytajCtrl/Cmd+Shift+X — Przełącz na tryb DziałajCtrl/Cmd+Shift+D — Przełącz na tryb DevEscape — Zatrzymaj aktywne uruchomienieEscape dwukrotnie — Zatrzymaj aktywne nagrywanie1–9 — Wybierz odpowiedź z tym numerem",
"sp.slash.record_transcribe": "Nagraj i zapisz transkrypcję Whisper po zatrzymaniu",
"sp.slash.unknown_command": "Nieznane polecenie ukośnikowe {command}. Użyj /help, aby zobaczyć dostępne polecenia.",
"sp.slash.invalid_usage": "Nieprawidłowa składnia polecenia ukośnikowego. Użycie: {usage}",
diff --git a/src/chrome/src/ui/locales/pt.js b/src/chrome/src/ui/locales/pt.js
index bc62673af..a4d297066 100644
--- a/src/chrome/src/ui/locales/pt.js
+++ b/src/chrome/src/ui/locales/pt.js
@@ -527,7 +527,7 @@ export default {
'sp.permissions.gate_off': 'Desativado: o WebBrain age em qualquer site sem perguntar.',
'sp.permissions.manage': 'Gerenciar permissões de sites',
'sp.permissions.enabled': 'Os prompts de permissão estão ativados novamente.',
- "sp.help.shortcuts_html": "Atalhos de tecladoCtrl/Cmd+/ - Concentre a entradaCtrl/Cmd+Shift+A — Mudar para o modo PerguntarCtrl/Cmd+Shift+X — Mudar para o modo AgirCtrl/Cmd+Shift+D — Mudar para o modo DevEscape — Pare a execução ativaEscape duas vezes — Interrompa uma gravação ativa",
+ "sp.help.shortcuts_html": "Atalhos de tecladoCtrl/Cmd+/ - Concentre a entradaCtrl/Cmd+Shift+A — Mudar para o modo PerguntarCtrl/Cmd+Shift+X — Mudar para o modo AgirCtrl/Cmd+Shift+D — Mudar para o modo DevEscape — Pare a execução ativaEscape duas vezes — Interrompa uma gravação ativa1–9 — Escolher a resposta com esse número",
"sp.slash.record_transcribe": "Grave e salve uma transcrição do Whisper após parar",
"sp.slash.unknown_command": "Comando de barra desconhecido {command}. Use /help para ver os comandos disponíveis.",
"sp.slash.invalid_usage": "Sintaxe de comando de barra inválida. Uso: {usage}",
diff --git a/src/chrome/src/ui/locales/ru.js b/src/chrome/src/ui/locales/ru.js
index 7e7008693..5bccb91b3 100644
--- a/src/chrome/src/ui/locales/ru.js
+++ b/src/chrome/src/ui/locales/ru.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "скачивать файлы с",
"sp.perm.verb.upload": "загрузить файл на",
"sp.perm.verb.record": "записывать вкладку (и микрофон) на",
- "sp.help.shortcuts_html": "Горячие клавишиCtrl/Cmd+/ — Переключить фокус на вводCtrl/Cmd+Shift+A — Переключиться в режим «Вопрос»Ctrl/Cmd+Shift+X — Переключиться в режим «Действие»Ctrl/Cmd+Shift+D — Переключиться в режим «Разработка»Ctrl/Cmd+M — Переключить голосовой ввод",
+ "sp.help.shortcuts_html": "Горячие клавишиCtrl/Cmd+/ — Переключить фокус на вводCtrl/Cmd+Shift+A — Переключиться в режим «Вопрос»Ctrl/Cmd+Shift+X — Переключиться в режим «Действие»Ctrl/Cmd+Shift+D — Переключиться в режим «Разработка»Escape — Остановить активный запускEscape дважды — Остановить активную запись1–9 — Выбрать ответ с этим номером",
"sp.slash.record_transcribe": "Записать и сохранить расшифровку Whisper после остановки",
"sp.slash.unknown_command": "Неизвестная slash-команда {command}. Используйте /help, чтобы увидеть доступные команды.",
"sp.slash.invalid_usage": "Неверный синтаксис slash-команды. Использование: {usage}",
diff --git a/src/chrome/src/ui/locales/th.js b/src/chrome/src/ui/locales/th.js
index 49c34462d..a89eede7a 100644
--- a/src/chrome/src/ui/locales/th.js
+++ b/src/chrome/src/ui/locales/th.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "ดาวน์โหลดไฟล์จาก",
"sp.perm.verb.upload": "อัปโหลดไฟล์ไปยัง",
"sp.perm.verb.record": "บันทึกแท็บ (และไมโครโฟน) บน",
- "sp.help.shortcuts_html": "แป้นพิมพ์ลัดCtrl/Cmd+/ — โฟกัสช่องป้อนข้อความCtrl/Cmd+Shift+A — เปลี่ยนไปโหมดถามCtrl/Cmd+Shift+X — เปลี่ยนไปโหมดทำCtrl/Cmd+Shift+D — เปลี่ยนไปโหมดนักพัฒนาCtrl/Cmd+M — สลับการป้อนด้วยเสียง",
+ "sp.help.shortcuts_html": "แป้นพิมพ์ลัดCtrl/Cmd+/ — โฟกัสช่องป้อนข้อความCtrl/Cmd+Shift+A — เปลี่ยนไปโหมดถามCtrl/Cmd+Shift+X — เปลี่ยนไปโหมดทำCtrl/Cmd+Shift+D — เปลี่ยนไปโหมดนักพัฒนาEscape — หยุดการทำงานที่กำลังทำอยู่Escape สองครั้ง — หยุดการบันทึกที่กำลังทำอยู่1–9 — เลือกคำตอบที่มีหมายเลขนั้น",
"sp.slash.record_transcribe": "บันทึกและบันทึกบทถอดเสียง Whisper หลังหยุด",
"sp.slash.unknown_command": "ไม่รู้จักคำสั่งสแลช {command} ใช้ /help เพื่อดูคำสั่งที่ใช้ได้",
"sp.slash.invalid_usage": "ไวยากรณ์คำสั่งสแลชไม่ถูกต้อง วิธีใช้: {usage}",
diff --git a/src/chrome/src/ui/locales/tl.js b/src/chrome/src/ui/locales/tl.js
index cffd8eef4..20659efc6 100644
--- a/src/chrome/src/ui/locales/tl.js
+++ b/src/chrome/src/ui/locales/tl.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "mag-download ng files mula sa",
"sp.perm.verb.upload": "mag-upload ng file sa",
"sp.perm.verb.record": "i-record ang tab (at mikropono) sa",
- "sp.help.shortcuts_html": "Mga Keyboard ShortcutCtrl/Cmd+/ — I-focus ang inputCtrl/Cmd+Shift+A — Lumipat sa Ask modeCtrl/Cmd+Shift+X — Lumipat sa Act modeCtrl/Cmd+Shift+D — Lumipat sa Dev modeCtrl/Cmd+M — I-toggle ang voice input",
+ "sp.help.shortcuts_html": "Mga Keyboard ShortcutCtrl/Cmd+/ — I-focus ang inputCtrl/Cmd+Shift+A — Lumipat sa Ask modeCtrl/Cmd+Shift+X — Lumipat sa Act modeCtrl/Cmd+Shift+D — Lumipat sa Dev modeEscape — Ihinto ang aktibong runEscape nang dalawang beses — Ihinto ang aktibong pag-record1–9 — Piliin ang sagot na may ganoong numero",
"sp.slash.record_transcribe": "I-record at i-save ang Whisper transcript pagkatapos huminto",
"sp.slash.unknown_command": "Hindi kilalang slash command {command}. Gamitin ang /help upang makita ang mga available na command.",
"sp.slash.invalid_usage": "Hindi wastong syntax ng slash command. Paggamit: {usage}",
diff --git a/src/chrome/src/ui/locales/tr.js b/src/chrome/src/ui/locales/tr.js
index 387acb1aa..abb170750 100644
--- a/src/chrome/src/ui/locales/tr.js
+++ b/src/chrome/src/ui/locales/tr.js
@@ -725,7 +725,7 @@ export default {
"sp.perm.verb.download": "dosya indirmek",
"sp.perm.verb.upload": "dosya yüklemek",
"sp.perm.verb.record": "sekmeyi (ve mikrofonu) kaydetmek",
- "sp.help.shortcuts_html": "Klavye KısayollarıCtrl/Cmd+/ — Giriş alanına odaklanCtrl/Cmd+Shift+A — Sor moduna geçCtrl/Cmd+Shift+X — Uygula moduna geçCtrl/Cmd+Shift+D — Dev moduna geçCtrl/Cmd+M — Ses girişini aç/kapat",
+ "sp.help.shortcuts_html": "Klavye KısayollarıCtrl/Cmd+/ — Giriş alanına odaklanCtrl/Cmd+Shift+A — Sor moduna geçCtrl/Cmd+Shift+X — Uygula moduna geçCtrl/Cmd+Shift+D — Dev moduna geçEscape — Aktif çalışmayı durdurEscape iki kez — Aktif kaydı durdur1–9 — O numaralı yanıtı seç",
"sp.slash.record_transcribe": "Kaydet ve durdurduktan sonra Whisper dökümü kaydet",
"sp.slash.unknown_command": "Bilinmeyen slash komutu {command}. Kullanılabilir komutları görmek için /help kullanın.",
"sp.slash.invalid_usage": "Geçersiz slash komutu sözdizimi. Kullanım: {usage}",
diff --git a/src/chrome/src/ui/locales/uk.js b/src/chrome/src/ui/locales/uk.js
index 40802341a..5caf90a09 100644
--- a/src/chrome/src/ui/locales/uk.js
+++ b/src/chrome/src/ui/locales/uk.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "завантажити файли з",
"sp.perm.verb.upload": "вивантажити файл на",
"sp.perm.verb.record": "записати вкладку (і мікрофон) на",
- "sp.help.shortcuts_html": "Гарячі клавішіCtrl/Cmd+/ — Фокус на полі введенняCtrl/Cmd+Shift+A — Перейти в режим запитаньCtrl/Cmd+Shift+X — Перейти в режим дійCtrl/Cmd+Shift+D — Перейти в режим розробкиCtrl/Cmd+M — Перемкнути голосове введення",
+ "sp.help.shortcuts_html": "Гарячі клавішіCtrl/Cmd+/ — Фокус на полі введенняCtrl/Cmd+Shift+A — Перейти в режим запитаньCtrl/Cmd+Shift+X — Перейти в режим дійCtrl/Cmd+Shift+D — Перейти в режим розробкиEscape — Зупинити активний запускEscape двічі — Зупинити активний запис1–9 — Вибрати відповідь із цим номером",
"sp.slash.record_transcribe": "Записати та зберегти транскрипт Whisper після зупинки",
"sp.slash.unknown_command": "Невідома slash-команда {command}. Скористайтеся /help, щоб переглянути доступні команди.",
"sp.slash.invalid_usage": "Неправильний синтаксис slash-команди. Використання: {usage}",
diff --git a/src/chrome/src/ui/locales/vi.js b/src/chrome/src/ui/locales/vi.js
index cb98ed256..8103501f5 100644
--- a/src/chrome/src/ui/locales/vi.js
+++ b/src/chrome/src/ui/locales/vi.js
@@ -527,7 +527,7 @@ export default {
'sp.permissions.gate_off': 'Tắt: WebBrain hành động trên mọi trang web mà không hỏi.',
'sp.permissions.manage': 'Quản lý quyền của trang web',
'sp.permissions.enabled': 'Lời nhắc về quyền đã được bật lại.',
- "sp.help.shortcuts_html": "Phím tắtCtrl/Cmd+/ - Tập trung đầu vàoCtrl/Cmd+Shift+A - Chuyển sang chế độ HỏiCtrl/Cmd+Shift+X - Chuyển sang chế độ ActCtrl/Cmd+Shift+D - Chuyển sang chế độ DevEscape - Dừng quá trình chạy đang hoạt độngEscape hai lần - Dừng quá trình ghi đang hoạt động",
+ "sp.help.shortcuts_html": "Phím tắtCtrl/Cmd+/ - Tập trung đầu vàoCtrl/Cmd+Shift+A - Chuyển sang chế độ HỏiCtrl/Cmd+Shift+X - Chuyển sang chế độ ActCtrl/Cmd+Shift+D - Chuyển sang chế độ DevEscape - Dừng quá trình chạy đang hoạt độngEscape hai lần - Dừng quá trình ghi đang hoạt động1–9 - Chọn câu trả lời có số đó",
"sp.slash.record_transcribe": "Ghi và lưu bản ghi Whisper sau khi dừng",
"sp.slash.unknown_command": "Lệnh gạch chéo không xác định {command}. Sử dụng /help để xem các lệnh có sẵn.",
"sp.slash.invalid_usage": "Cú pháp lệnh gạch chéo không hợp lệ. Cách sử dụng: {usage}",
diff --git a/src/chrome/src/ui/locales/zh.js b/src/chrome/src/ui/locales/zh.js
index 7e3304422..a81117bcd 100644
--- a/src/chrome/src/ui/locales/zh.js
+++ b/src/chrome/src/ui/locales/zh.js
@@ -679,7 +679,7 @@ export default {
"sp.perm.verb.download": "下载文件自",
"sp.perm.verb.upload": "上传文件到",
"sp.perm.verb.record": "录制标签页(及麦克风)于",
- "sp.help.shortcuts_html": "键盘快捷键Ctrl/Cmd+/ —— 聚焦输入框Ctrl/Cmd+Shift+A —— 切换到提问模式Ctrl/Cmd+Shift+X —— 切换到执行模式Ctrl/Cmd+Shift+D —— 切换到开发模式Ctrl/Cmd+M —— 切换语音输入",
+ "sp.help.shortcuts_html": "键盘快捷键Ctrl/Cmd+/ —— 聚焦输入框Ctrl/Cmd+Shift+A —— 切换到提问模式Ctrl/Cmd+Shift+X —— 切换到执行模式Ctrl/Cmd+Shift+D —— 切换到开发模式Escape —— 停止当前运行Escape 两次 —— 停止当前录制1–9 —— 选择对应编号的答案",
"sp.slash.record_transcribe": "停止录制后保存 Whisper 转录",
"sp.slash.unknown_command": "未知斜杠命令 {command}。使用 /help 查看可用命令。",
"sp.slash.invalid_usage": "斜杠命令语法无效。用法:{usage}",
diff --git a/src/chrome/src/ui/sidepanel.js b/src/chrome/src/ui/sidepanel.js
index 7444b40e4..81e104250 100644
--- a/src/chrome/src/ui/sidepanel.js
+++ b/src/chrome/src/ui/sidepanel.js
@@ -6890,7 +6890,14 @@ function rebindClarifyCards() {
card.querySelectorAll('.permission-education-action').forEach(bindPermissionEducationAction);
card.querySelectorAll('.clarify-skip-permissions').forEach(btn => bindPermissionSkipButton(btn, card, tabId, clarifyId));
+ // Number the answers again: a card whose HTML was saved before the numbers
+ // existed gets them now, so every live card answers to its digits.
+ let shortcut = 0;
card.querySelectorAll('.clarify-option').forEach(btn => {
+ if (++shortcut <= 9) {
+ btn.dataset.shortcut = String(shortcut);
+ btn.setAttribute('aria-keyshortcuts', String(shortcut));
+ }
if (btn.dataset.bound) return;
btn.dataset.bound = 'true';
btn.addEventListener('click', () => {
@@ -11987,6 +11994,21 @@ function renderClarifyCard(data) {
card.dataset.deadlineTs = String(Math.floor(deadlineTs));
}
+ // Every answer carries its own number, shown in a small square at the right
+ // edge of the button, and typing that digit answers the card
+ // (handleClarifyShortcutKeydown). The number lives in a data attribute the
+ // CSS draws rather than in the button's text, because a card restored from
+ // saved chat HTML sends that text back as the answer. Inlined, like the text
+ // repair above, so function-extraction test harnesses keep working.
+ const numberClarifyOptions = (optionsEl) => {
+ let shortcut = 0;
+ for (const button of optionsEl.querySelectorAll('.clarify-option')) {
+ if (++shortcut > 9) break;
+ button.dataset.shortcut = String(shortcut);
+ button.setAttribute('aria-keyshortcuts', String(shortcut));
+ }
+ };
+
const qEl = document.createElement('div');
qEl.className = 'clarify-question';
if (data.pendingReconciliation === true) qEl.style.whiteSpace = 'pre-wrap';
@@ -12030,6 +12052,7 @@ function renderClarifyCard(data) {
deny.dataset.value = 'deny';
deny.addEventListener('click', () => submitClarify(card, tabId, clarifyId, 'deny', 'option'));
optionsEl.appendChild(deny);
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -12073,6 +12096,7 @@ function renderClarifyCard(data) {
b.addEventListener('click', () => submitClarify(card, tabId, clarifyId, value, 'option'));
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -12133,6 +12157,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -12183,6 +12208,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -12221,6 +12247,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -12259,6 +12286,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -12310,6 +12338,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
// The agent's timer decides; this countdown shows it and backs it up.
const stepTimeoutAnswer = ['once', 'deny'].includes(data.timeoutAnswer) ? data.timeoutAnswer : '';
@@ -12408,6 +12437,7 @@ function renderClarifyCard(data) {
bindPermissionSkipButton(skip, card, tabId, clarifyId);
optionsEl.appendChild(skip);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
// The hint offers "Always allow", which an upload card does not have.
@@ -12444,6 +12474,7 @@ function renderClarifyCard(data) {
b.addEventListener('click', () => submitClarify(card, tabId, clarifyId, b.textContent, 'option'));
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
}
@@ -12976,6 +13007,45 @@ function submitClarify(card, tabId, clarifyId, answer, source) {
}
+/**
+ * The numbered answer a digit picks on the live clarify card, or null.
+ *
+ * The digit only counts where nothing else claims the keyboard: no focus, the
+ * composer, or the card itself. A field with text in it keeps the digit as
+ * text, so an answer the user is typing is never cut short; an empty field
+ * gives it up, which is what makes "1" work while the card's own input holds
+ * the caret. The lowest card is the live one — an older unanswered card sits
+ * above it, already invalidated or abandoned.
+ */
+function clarifyShortcutOption(event) {
+ if (event.defaultPrevented || event.isComposing) return null;
+ if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return null;
+ if (!/^[1-9]$/.test(event.key)) return null;
+ const cards = document.querySelectorAll('.clarify-card:not(.clarify-answered):not(.clarify-obsolete)');
+ const card = cards[cards.length - 1];
+ if (!card) return null;
+ const active = document.activeElement;
+ if (active && active !== document.body && active !== inputEl && !card.contains(active)) return null;
+ const tag = active?.tagName;
+ if (tag === 'SELECT' || active?.isContentEditable) return null;
+ if ((tag === 'INPUT' || tag === 'TEXTAREA') && String(active.value || '')) return null;
+ const option = card.querySelector(`.clarify-option[data-shortcut="${event.key}"]`);
+ return option && !option.disabled ? option : null;
+}
+
+function handleClarifyShortcutKeydown(event) {
+ const option = clarifyShortcutOption(event);
+ if (!option) return;
+ // preventDefault keeps the digit out of the composer it was typed into.
+ event.preventDefault();
+ event.stopPropagation();
+ // Click the button rather than answering here, so a permission card's own
+ // label bookkeeping and a scheduled card's tab still go through one path.
+ option.click();
+}
+
+document.addEventListener('keydown', handleClarifyShortcutKeydown, true);
+
// ==========================================================================
// ACTIVITY HISTORY — retained in every mode, revealed by verbose mode
// ==========================================================================
diff --git a/src/chrome/styles/sidepanel.css b/src/chrome/styles/sidepanel.css
index 645120f1e..6458054a5 100644
--- a/src/chrome/styles/sidepanel.css
+++ b/src/chrome/styles/sidepanel.css
@@ -4855,6 +4855,9 @@ html[data-ui-scale="175"] .composer-toolbar {
}
.clarify-option {
+ display: flex;
+ align-items: center;
+ gap: 8px;
text-align: left;
padding: 8px 10px;
background: var(--bg-input);
@@ -4876,6 +4879,33 @@ html[data-ui-scale="175"] .composer-toolbar {
cursor: default;
}
+/* The answer's number, drawn from the data attribute so the button's own text
+ stays the answer WebBrain sends back. The empty alt text after the slash
+ keeps the digit out of the accessible name; aria-keyshortcuts announces the
+ shortcut instead. */
+.clarify-option[data-shortcut]::after {
+ content: attr(data-shortcut) / "";
+ box-sizing: border-box;
+ flex: none;
+ margin-left: auto;
+ min-width: 16px;
+ height: 16px;
+ border: 1px solid color-mix(in srgb, var(--text-secondary) 40%, transparent);
+ border-radius: 3px;
+ background: var(--tint-soft);
+ color: var(--text-secondary);
+ font-size: 10px;
+ font-weight: 600;
+ line-height: 14px;
+ text-align: center;
+ font-variant-numeric: tabular-nums;
+}
+
+.clarify-option:hover:not(:disabled)::after {
+ border-color: var(--accent);
+ color: var(--text-primary);
+}
+
/* The permission card's way to the skip dialog: set apart from the answers
above it and marked as risky. */
.clarify-skip-permissions {
diff --git a/src/firefox/src/ui/locales/ar.js b/src/firefox/src/ui/locales/ar.js
index b96d89385..35436abbd 100644
--- a/src/firefox/src/ui/locales/ar.js
+++ b/src/firefox/src/ui/locales/ar.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "يُنزّل ملفات من",
"sp.perm.verb.upload": "يرفع ملفًا إلى",
"sp.perm.verb.record": "يُسجّل علامة التبويب (والميكروفون) على",
- "sp.help.shortcuts_html": "اختصارات لوحة المفاتيحCtrl/Cmd+/ — التركيز على حقل الإدخالCtrl/Cmd+Shift+A — التبديل إلى وضع السؤالCtrl/Cmd+Shift+X — التبديل إلى وضع التنفيذCtrl/Cmd+Shift+D — التبديل إلى وضع التطويرCtrl/Cmd+M — تبديل الإدخال الصوتي",
+ "sp.help.shortcuts_html": "اختصارات لوحة المفاتيحCtrl/Cmd+/ — التركيز على حقل الإدخالCtrl/Cmd+Shift+A — التبديل إلى وضع السؤالCtrl/Cmd+Shift+X — التبديل إلى وضع التنفيذCtrl/Cmd+Shift+D — التبديل إلى وضع التطويرEscape — إيقاف التشغيل النشط1–9 — اختيار الإجابة التي تحمل هذا الرقم",
"sp.slash.record_transcribe": "التسجيل وحفظ نص Whisper بعد الإيقاف",
"sp.slash.unknown_command": "أمر شرطة مائلة غير معروف {command}. استخدم /help لعرض الأوامر المتاحة.",
"sp.slash.invalid_usage": "بنية أمر الشرطة المائلة غير صالحة. الاستخدام: {usage}",
diff --git a/src/firefox/src/ui/locales/bn.js b/src/firefox/src/ui/locales/bn.js
index fa6593301..dedf77f52 100644
--- a/src/firefox/src/ui/locales/bn.js
+++ b/src/firefox/src/ui/locales/bn.js
@@ -524,7 +524,7 @@ export default {
'sp.permissions.gate_off': 'বন্ধ: WebBrain জিজ্ঞাসা না করেই প্রতিটি সাইটে কাজ করে।',
'sp.permissions.manage': 'সাইটের অনুমতি পরিচালনা করুন',
'sp.permissions.enabled': 'অনুমতি প্রম্পট আবার চালু হয়েছে।',
- "sp.help.shortcuts_html": "কীবোর্ড শর্টকাটCtrl/Cmd+/ - ইনপুট ফোকাস করুনCtrl/Cmd+Shift+A — আস্ক মোডে স্যুইচ করুনCtrl/Cmd+Shift+X — অ্যাক্ট মোডে স্যুইচ করুনCtrl/Cmd+Shift+D — ডেভ মোডে স্যুইচ করুনEscape - সক্রিয় রান বন্ধ করুন",
+ "sp.help.shortcuts_html": "কীবোর্ড শর্টকাটCtrl/Cmd+/ - ইনপুট ফোকাস করুনCtrl/Cmd+Shift+A — আস্ক মোডে স্যুইচ করুনCtrl/Cmd+Shift+X — অ্যাক্ট মোডে স্যুইচ করুনCtrl/Cmd+Shift+D — ডেভ মোডে স্যুইচ করুনEscape - সক্রিয় রান বন্ধ করুন1–9 — সেই নম্বরের উত্তরটি বেছে নিন",
"sp.slash.record_transcribe": "থামার পরে একটি হুইস্পার প্রতিলিপি রেকর্ড করুন এবং সংরক্ষণ করুন",
"sp.slash.unknown_command": "অজানা স্ল্যাশ কমান্ড {command}। উপলব্ধ কমান্ড দেখতে /help ব্যবহার করুন।",
"sp.slash.invalid_usage": "অবৈধ স্ল্যাশ কমান্ড সিনট্যাক্স। ব্যবহার: {usage}",
diff --git a/src/firefox/src/ui/locales/de.js b/src/firefox/src/ui/locales/de.js
index f666c6eb2..7e59f1a78 100644
--- a/src/firefox/src/ui/locales/de.js
+++ b/src/firefox/src/ui/locales/de.js
@@ -529,7 +529,7 @@ export default {
'sp.perm.verb.record': 'Tab (und Mikrofon) aufnehmen auf',
'sp.perm.verb.schedule': 'zukünftige Aufgaben planen für',
'sp.perm.verb.window': 'die Größe des Browserfensters ändern auf',
- 'sp.help.shortcuts_html': 'TastenkürzelCtrl/Cmd+/ — Eingabefeld fokussierenCtrl/Cmd+Shift+A — Zum Fragen-Modus wechselnCtrl/Cmd+Shift+X — Zum Handeln-Modus wechselnCtrl/Cmd+Shift+D — Zum Dev-Modus wechselnEscape — Aktiven Durchlauf stoppenEscape zweimal — Aktive Aufnahme stoppen',
+ 'sp.help.shortcuts_html': 'TastenkürzelCtrl/Cmd+/ — Eingabefeld fokussierenCtrl/Cmd+Shift+A — Zum Fragen-Modus wechselnCtrl/Cmd+Shift+X — Zum Handeln-Modus wechselnCtrl/Cmd+Shift+D — Zum Dev-Modus wechselnEscape — Aktiven Durchlauf stoppen1–9 — Antwort mit dieser Nummer wählen',
'sp.compact.nothing_to_compact': 'Noch nichts zu kompaktieren — es gibt nicht genügend älteren Kontext.',
'sp.compact.busy': 'Kompaktierung nicht möglich, während ein Durchlauf läuft — warten Sie auf dessen Abschluss.',
'sp.compact.failed': 'Kontext-Kompaktierung fehlgeschlagen: {error}',
diff --git a/src/firefox/src/ui/locales/en.js b/src/firefox/src/ui/locales/en.js
index 909e6165f..6bbe9e126 100644
--- a/src/firefox/src/ui/locales/en.js
+++ b/src/firefox/src/ui/locales/en.js
@@ -538,7 +538,7 @@ export default {
'sp.permissions.gate_off': 'Off: WebBrain acts on every site without asking.',
'sp.permissions.manage': 'Manage site permissions',
'sp.permissions.enabled': 'Permission prompts are on again.',
- "sp.help.shortcuts_html": "Keyboard ShortcutsCtrl/Cmd+/ — Focus the inputCtrl/Cmd+Shift+A — Switch to Ask modeCtrl/Cmd+Shift+X — Switch to Act modeCtrl/Cmd+Shift+D — Switch to Dev modeEscape — Stop the active run",
+ "sp.help.shortcuts_html": "Keyboard ShortcutsCtrl/Cmd+/ — Focus the inputCtrl/Cmd+Shift+A — Switch to Ask modeCtrl/Cmd+Shift+X — Switch to Act modeCtrl/Cmd+Shift+D — Switch to Dev modeEscape — Stop the active run1–9 — Pick that answer when WebBrain asks",
"sp.slash.record_transcribe": "Record and save a Whisper transcript after stop",
"sp.slash.unknown_command": "Unknown slash command {command}. Use /help to see available commands.",
"sp.slash.invalid_usage": "Invalid slash command syntax. Usage: {usage}",
diff --git a/src/firefox/src/ui/locales/es.js b/src/firefox/src/ui/locales/es.js
index 6c0c817c1..bb12c1077 100644
--- a/src/firefox/src/ui/locales/es.js
+++ b/src/firefox/src/ui/locales/es.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "descargar archivos de",
"sp.perm.verb.upload": "subir un archivo a",
"sp.perm.verb.record": "grabar la pestaña (y el micrófono) en",
- "sp.help.shortcuts_html": "Atajos de tecladoCtrl/Cmd+/ — Enfocar la entradaCtrl/Cmd+Shift+A — Cambiar al modo PreguntarCtrl/Cmd+Shift+X — Cambiar al modo ActuarCtrl/Cmd+Shift+D — Cambiar al modo DesarrolloCtrl/Cmd+M — Alternar entrada de voz",
+ "sp.help.shortcuts_html": "Atajos de tecladoCtrl/Cmd+/ — Enfocar la entradaCtrl/Cmd+Shift+A — Cambiar al modo PreguntarCtrl/Cmd+Shift+X — Cambiar al modo ActuarCtrl/Cmd+Shift+D — Cambiar al modo DesarrolloEscape — Detener la ejecución activa1–9 — Elegir la respuesta con ese número",
"sp.slash.record_transcribe": "Grabar y guardar una transcripción de Whisper al detener",
"sp.slash.unknown_command": "Comando de barra desconocido {command}. Usa /help para ver los comandos disponibles.",
"sp.slash.invalid_usage": "Sintaxis de comando de barra no válida. Uso: {usage}",
diff --git a/src/firefox/src/ui/locales/fa.js b/src/firefox/src/ui/locales/fa.js
index bd9409c93..8dd61b0aa 100644
--- a/src/firefox/src/ui/locales/fa.js
+++ b/src/firefox/src/ui/locales/fa.js
@@ -524,7 +524,7 @@ export default {
'sp.permissions.gate_off': 'خاموش: WebBrain بدون پرسیدن در همهٔ سایتها اقدام میکند.',
'sp.permissions.manage': 'مدیریت مجوزهای سایت',
'sp.permissions.enabled': 'درخواستهای مجوز دوباره روشن شدند.',
- "sp.help.shortcuts_html": "میانبرهای صفحه کلیدCtrl/Cmd+/ - روی ورودی تمرکز کنیدCtrl/Cmd+Shift+A - به حالت سؤال برویدCtrl/Cmd+Shift+X - به حالت Act تغییر دهیدCtrl/Cmd+Shift+D - به حالت Dev برویدEscape - اجرای فعال را متوقف کنید",
+ "sp.help.shortcuts_html": "میانبرهای صفحه کلیدCtrl/Cmd+/ - روی ورودی تمرکز کنیدCtrl/Cmd+Shift+A - به حالت سؤال برویدCtrl/Cmd+Shift+X - به حالت Act تغییر دهیدCtrl/Cmd+Shift+D - به حالت Dev برویدEscape - اجرای فعال را متوقف کنید1–9 - انتخاب پاسخی که آن شماره را دارد",
"sp.slash.record_transcribe": "پس از توقف، رونوشت Whisper را ضبط و ذخیره کنید",
"sp.slash.unknown_command": "دستور اسلش نامشخص {command}. از /help برای دیدن دستورات موجود استفاده کنید.",
"sp.slash.invalid_usage": "دستور دستور اسلش نامعتبر است. استفاده: {usage}",
diff --git a/src/firefox/src/ui/locales/fr.js b/src/firefox/src/ui/locales/fr.js
index afe6696c6..a3a99764b 100644
--- a/src/firefox/src/ui/locales/fr.js
+++ b/src/firefox/src/ui/locales/fr.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "télécharger des fichiers depuis",
"sp.perm.verb.upload": "téléverser un fichier vers",
"sp.perm.verb.record": "enregistrer l'onglet (et le microphone) sur",
- "sp.help.shortcuts_html": "Raccourcis clavierCtrl/Cmd+/ — Focus sur la zone de saisieCtrl/Cmd+Shift+A — Passer en mode DemanderCtrl/Cmd+Shift+X — Passer en mode AgirCtrl/Cmd+Shift+D — Passer en mode DéveloppementCtrl/Cmd+M — Basculer la saisie vocale",
+ "sp.help.shortcuts_html": "Raccourcis clavierCtrl/Cmd+/ — Focus sur la zone de saisieCtrl/Cmd+Shift+A — Passer en mode DemanderCtrl/Cmd+Shift+X — Passer en mode AgirCtrl/Cmd+Shift+D — Passer en mode DéveloppementEscape — Arrêter l’exécution en cours1–9 — Choisir la réponse portant ce numéro",
"sp.slash.record_transcribe": "Enregistrer et sauvegarder une transcription Whisper à l'arrêt",
"sp.slash.unknown_command": "Commande slash inconnue {command}. Utilisez /help pour voir les commandes disponibles.",
"sp.slash.invalid_usage": "Syntaxe de commande slash invalide. Utilisation : {usage}",
diff --git a/src/firefox/src/ui/locales/he.js b/src/firefox/src/ui/locales/he.js
index 749c82b4b..40a3ea9ff 100644
--- a/src/firefox/src/ui/locales/he.js
+++ b/src/firefox/src/ui/locales/he.js
@@ -509,7 +509,7 @@ export default {
"sp.permissions.gate_off": "כבוי: WebBrain פועל בכל אתר בלי לשאול.",
"sp.permissions.manage": "ניהול הרשאות אתרים",
"sp.permissions.enabled": "בקשות ההרשאה הופעלו שוב.",
- "sp.help.shortcuts_html": "קיצורי מקלדתCtrl/Cmd+/ — מקד את שדה הקלטCtrl/Cmd+Shift+A — עבור למצב שאלCtrl/Cmd+Shift+X — עבור למצב פעולהCtrl/Cmd+Shift+D — עבור למצב DevCtrl/Cmd+M — הפעל או השבת קלט קולי",
+ "sp.help.shortcuts_html": "קיצורי מקלדתCtrl/Cmd+/ — מקד את שדה הקלטCtrl/Cmd+Shift+A — עבור למצב שאלCtrl/Cmd+Shift+X — עבור למצב פעולהCtrl/Cmd+Shift+D — עבור למצב DevEscape — עצירת ההרצה הפעילה1–9 — בחירת התשובה שמספרה זה",
"sp.slash.record_transcribe": "הקלט ושמור תמלול Whisper לאחר העצירה",
"sp.slash.unknown_command": "פקודת לוכסן לא מוכרת {command}. השתמשו ב-/help כדי לראות את הפקודות הזמינות.",
"sp.slash.invalid_usage": "תחביר פקודת לוכסן לא תקין. שימוש: {usage}",
diff --git a/src/firefox/src/ui/locales/hi.js b/src/firefox/src/ui/locales/hi.js
index 2bfba600a..e5dc16b77 100644
--- a/src/firefox/src/ui/locales/hi.js
+++ b/src/firefox/src/ui/locales/hi.js
@@ -524,7 +524,7 @@ export default {
'sp.permissions.gate_off': 'बंद: WebBrain बिना पूछे हर साइट पर कार्रवाई करता है।',
'sp.permissions.manage': 'साइट अनुमतियां प्रबंधित करें',
'sp.permissions.enabled': 'अनुमति संकेत फिर से चालू हैं।',
- "sp.help.shortcuts_html": "कीबोर्ड शॉर्टकटCtrl/Cmd+/ - इनपुट पर फोकस करेंCtrl/Cmd+Shift+A - आस्क मोड पर स्विच करेंCtrl/Cmd+Shift+X - एक्ट मोड पर स्विच करेंCtrl/Cmd+Shift+D - डेव मोड पर स्विच करेंEscape - सक्रिय रन बंद करें",
+ "sp.help.shortcuts_html": "कीबोर्ड शॉर्टकटCtrl/Cmd+/ - इनपुट पर फोकस करेंCtrl/Cmd+Shift+A - आस्क मोड पर स्विच करेंCtrl/Cmd+Shift+X - एक्ट मोड पर स्विच करेंCtrl/Cmd+Shift+D - डेव मोड पर स्विच करेंEscape - सक्रिय रन बंद करें1–9 - उस नंबर वाला उत्तर चुनें",
"sp.slash.record_transcribe": "रुकने के बाद व्हिस्पर प्रतिलेख को रिकॉर्ड करें और सहेजें",
"sp.slash.unknown_command": "अज्ञात स्लैश कमांड {command}। उपलब्ध कमांड देखने के लिए /help का उपयोग करें।",
"sp.slash.invalid_usage": "अमान्य स्लैश कमांड सिंटैक्स. उपयोग: {usage}",
diff --git a/src/firefox/src/ui/locales/id.js b/src/firefox/src/ui/locales/id.js
index 00e076dcc..5aa584a5b 100644
--- a/src/firefox/src/ui/locales/id.js
+++ b/src/firefox/src/ui/locales/id.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "mengunduh berkas dari",
"sp.perm.verb.upload": "mengunggah berkas ke",
"sp.perm.verb.record": "merekam tab (dan mikrofon) pada",
- "sp.help.shortcuts_html": "Pintasan KeyboardCtrl/Cmd+/ — Fokus ke inputCtrl/Cmd+Shift+A — Beralih ke mode TanyaCtrl/Cmd+Shift+X — Beralih ke mode AksiCtrl/Cmd+Shift+D — Beralih ke mode DevCtrl/Cmd+M — Alihkan input suara",
+ "sp.help.shortcuts_html": "Pintasan KeyboardCtrl/Cmd+/ — Fokus ke inputCtrl/Cmd+Shift+A — Beralih ke mode TanyaCtrl/Cmd+Shift+X — Beralih ke mode AksiCtrl/Cmd+Shift+D — Beralih ke mode DevEscape — Hentikan proses yang berjalan1–9 — Pilih jawaban bernomor itu",
"sp.slash.record_transcribe": "Rekam dan simpan transkrip Whisper setelah berhenti",
"sp.slash.unknown_command": "Perintah garis miring tidak dikenal {command}. Gunakan /help untuk melihat perintah yang tersedia.",
"sp.slash.invalid_usage": "Sintaks perintah garis miring tidak valid. Penggunaan: {usage}",
diff --git a/src/firefox/src/ui/locales/ja.js b/src/firefox/src/ui/locales/ja.js
index b10097cea..60bdec254 100644
--- a/src/firefox/src/ui/locales/ja.js
+++ b/src/firefox/src/ui/locales/ja.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "からのファイルのダウンロードを",
"sp.perm.verb.upload": "へのファイルのアップロードを",
"sp.perm.verb.record": "でのタブ(およびマイク)の録画を",
- "sp.help.shortcuts_html": "キーボードショートカットCtrl/Cmd+/ — 入力にフォーカスCtrl/Cmd+Shift+A — 質問モードに切り替えCtrl/Cmd+Shift+X — 操作モードに切り替えCtrl/Cmd+Shift+D — 開発モードに切り替えCtrl/Cmd+M — 音声入力を切り替え",
+ "sp.help.shortcuts_html": "キーボードショートカットCtrl/Cmd+/ — 入力にフォーカスCtrl/Cmd+Shift+A — 質問モードに切り替えCtrl/Cmd+Shift+X — 操作モードに切り替えCtrl/Cmd+Shift+D — 開発モードに切り替えEscape — 実行中のタスクを停止1–9 — その番号の回答を選択",
"sp.slash.record_transcribe": "録画停止後に Whisper の文字起こしを保存",
"sp.slash.unknown_command": "不明なスラッシュコマンドです: {command}。利用可能なコマンドは /help で確認できます。",
"sp.slash.invalid_usage": "スラッシュコマンドの構文が正しくありません。使用法: {usage}",
diff --git a/src/firefox/src/ui/locales/ko.js b/src/firefox/src/ui/locales/ko.js
index 01af25fcd..a747f1e51 100644
--- a/src/firefox/src/ui/locales/ko.js
+++ b/src/firefox/src/ui/locales/ko.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "파일 다운로드",
"sp.perm.verb.upload": "파일 업로드",
"sp.perm.verb.record": "탭(및 마이크) 녹화",
- "sp.help.shortcuts_html": "키보드 단축키Ctrl/Cmd+/ — 입력에 포커스Ctrl/Cmd+Shift+A — 질문 모드로 전환Ctrl/Cmd+Shift+X — 실행 모드로 전환Ctrl/Cmd+Shift+D — 개발 모드로 전환Ctrl/Cmd+M — 음성 입력 전환",
+ "sp.help.shortcuts_html": "키보드 단축키Ctrl/Cmd+/ — 입력에 포커스Ctrl/Cmd+Shift+A — 질문 모드로 전환Ctrl/Cmd+Shift+X — 실행 모드로 전환Ctrl/Cmd+Shift+D — 개발 모드로 전환Escape — 실행 중인 작업 중지1–9 — 해당 번호의 답변 선택",
"sp.slash.record_transcribe": "녹화 후 Whisper 전사본 저장",
"sp.slash.unknown_command": "알 수 없는 슬래시 명령어입니다: {command}. 사용 가능한 명령어는 /help에서 확인하세요.",
"sp.slash.invalid_usage": "슬래시 명령어 구문이 올바르지 않습니다. 사용법: {usage}",
diff --git a/src/firefox/src/ui/locales/ms.js b/src/firefox/src/ui/locales/ms.js
index 2c5540cdf..de2b9278d 100644
--- a/src/firefox/src/ui/locales/ms.js
+++ b/src/firefox/src/ui/locales/ms.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "memuat turun fail dari",
"sp.perm.verb.upload": "memuat naik fail ke",
"sp.perm.verb.record": "merakam tab (dan mikrofon) pada",
- "sp.help.shortcuts_html": "Pintasan Papan KekunciCtrl/Cmd+/ — Fokus pada medan inputCtrl/Cmd+Shift+A — Beralih ke mod TanyaCtrl/Cmd+Shift+X — Beralih ke mod LakukanCtrl/Cmd+Shift+D — Beralih ke mod DevCtrl/Cmd+M — Togol input suara",
+ "sp.help.shortcuts_html": "Pintasan Papan KekunciCtrl/Cmd+/ — Fokus pada medan inputCtrl/Cmd+Shift+A — Beralih ke mod TanyaCtrl/Cmd+Shift+X — Beralih ke mod LakukanCtrl/Cmd+Shift+D — Beralih ke mod DevEscape — Hentikan larian aktif1–9 — Pilih jawapan bernombor itu",
"sp.slash.record_transcribe": "Rakam dan simpan transkrip Whisper selepas berhenti",
"sp.slash.unknown_command": "Arahan slash tidak diketahui {command}. Gunakan /help untuk melihat arahan yang tersedia.",
"sp.slash.invalid_usage": "Sintaks arahan slash tidak sah. Penggunaan: {usage}",
diff --git a/src/firefox/src/ui/locales/nl.js b/src/firefox/src/ui/locales/nl.js
index ab052e3e3..e79b7f748 100644
--- a/src/firefox/src/ui/locales/nl.js
+++ b/src/firefox/src/ui/locales/nl.js
@@ -510,7 +510,7 @@ export default {
'sp.permissions.gate_off': 'Uit: WebBrain handelt op elke site zonder te vragen.',
'sp.permissions.manage': 'Sitemachtigingen beheren',
'sp.permissions.enabled': 'Machtigingsvragen staan weer aan.',
- "sp.help.shortcuts_html": "Sneltoetsen
...",
+ "sp.help.shortcuts_html": "SneltoetsenCtrl/Cmd+/ — Het invoerveld focussenCtrl/Cmd+Shift+A — Naar de modus Vragen schakelenCtrl/Cmd+Shift+X — Naar de modus Handelen schakelenCtrl/Cmd+Shift+D — Naar de modus Dev schakelenEscape — De actieve run stoppen1–9 — Het antwoord met dat nummer kiezen",
"sp.slash.record_transcribe": "Opnemen en Whisper-transcriptie opslaan na stop",
"sp.slash.unknown_command": "Onbekend slashcommando {command}. Gebruik /help om beschikbare commando's te zien.",
"sp.slash.invalid_usage": "Ongeldige slashcommandosyntaxis. Gebruik: {usage}",
diff --git a/src/firefox/src/ui/locales/pl.js b/src/firefox/src/ui/locales/pl.js
index 83a547af4..0e7fb1a3f 100644
--- a/src/firefox/src/ui/locales/pl.js
+++ b/src/firefox/src/ui/locales/pl.js
@@ -410,7 +410,7 @@ export default {
'sp.permissions.gate_off': 'Wyłączone: WebBrain działa na każdej stronie bez pytania.',
'sp.permissions.manage': 'Zarządzaj uprawnieniami stron',
'sp.permissions.enabled': 'Pytania o uprawnienia są ponownie włączone.',
- "sp.help.shortcuts_html": "Skróty klawiszoweCtrl/Cmd+/ — Ustaw fokus na polu wprowadzaniaCtrl/Cmd+Shift+A — Przełącz na tryb PytajCtrl/Cmd+Shift+X — Przełącz na tryb DziałajCtrl/Cmd+Shift+D — Przełącz na tryb DevCtrl/Cmd+M — Togol wprowadzanie głosowe",
+ "sp.help.shortcuts_html": "Skróty klawiszoweCtrl/Cmd+/ — Ustaw fokus na polu wprowadzaniaCtrl/Cmd+Shift+A — Przełącz na tryb PytajCtrl/Cmd+Shift+X — Przełącz na tryb DziałajCtrl/Cmd+Shift+D — Przełącz na tryb DevEscape — Zatrzymaj aktywne uruchomienie1–9 — Wybierz odpowiedź z tym numerem",
"sp.slash.record_transcribe": "Nagraj i zapisz transkrypcję Whisper po zatrzymaniu",
"sp.slash.unknown_command": "Nieznane polecenie ukośnikowe {command}. Użyj /help, aby zobaczyć dostępne polecenia.",
"sp.slash.invalid_usage": "Nieprawidłowa składnia polecenia ukośnikowego. Użycie: {usage}",
diff --git a/src/firefox/src/ui/locales/pt.js b/src/firefox/src/ui/locales/pt.js
index 2ed0d68ca..ee600debd 100644
--- a/src/firefox/src/ui/locales/pt.js
+++ b/src/firefox/src/ui/locales/pt.js
@@ -524,7 +524,7 @@ export default {
'sp.permissions.gate_off': 'Desativado: o WebBrain age em qualquer site sem perguntar.',
'sp.permissions.manage': 'Gerenciar permissões de sites',
'sp.permissions.enabled': 'Os prompts de permissão estão ativados novamente.',
- "sp.help.shortcuts_html": "Atalhos de tecladoCtrl/Cmd+/ - Concentre a entradaCtrl/Cmd+Shift+A — Mudar para o modo PerguntarCtrl/Cmd+Shift+X — Mudar para o modo AgirCtrl/Cmd+Shift+D — Mudar para o modo DevEscape — Pare a execução ativa",
+ "sp.help.shortcuts_html": "Atalhos de tecladoCtrl/Cmd+/ - Concentre a entradaCtrl/Cmd+Shift+A — Mudar para o modo PerguntarCtrl/Cmd+Shift+X — Mudar para o modo AgirCtrl/Cmd+Shift+D — Mudar para o modo DevEscape — Pare a execução ativa1–9 — Escolher a resposta com esse número",
"sp.slash.record_transcribe": "Grave e salve uma transcrição do Whisper após parar",
"sp.slash.unknown_command": "Comando de barra desconhecido {command}. Use /help para ver os comandos disponíveis.",
"sp.slash.invalid_usage": "Sintaxe de comando de barra inválida. Uso: {usage}",
diff --git a/src/firefox/src/ui/locales/ru.js b/src/firefox/src/ui/locales/ru.js
index bf38fd7d6..baff36bd7 100644
--- a/src/firefox/src/ui/locales/ru.js
+++ b/src/firefox/src/ui/locales/ru.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "скачивать файлы с",
"sp.perm.verb.upload": "загрузить файл на",
"sp.perm.verb.record": "записывать вкладку (и микрофон) на",
- "sp.help.shortcuts_html": "Горячие клавишиCtrl/Cmd+/ — Переключить фокус на вводCtrl/Cmd+Shift+A — Переключиться в режим «Вопрос»Ctrl/Cmd+Shift+X — Переключиться в режим «Действие»Ctrl/Cmd+Shift+D — Переключиться в режим «Разработка»Ctrl/Cmd+M — Переключить голосовой ввод",
+ "sp.help.shortcuts_html": "Горячие клавишиCtrl/Cmd+/ — Переключить фокус на вводCtrl/Cmd+Shift+A — Переключиться в режим «Вопрос»Ctrl/Cmd+Shift+X — Переключиться в режим «Действие»Ctrl/Cmd+Shift+D — Переключиться в режим «Разработка»Escape — Остановить активный запуск1–9 — Выбрать ответ с этим номером",
"sp.slash.record_transcribe": "Записать и сохранить расшифровку Whisper после остановки",
"sp.slash.unknown_command": "Неизвестная slash-команда {command}. Используйте /help, чтобы увидеть доступные команды.",
"sp.slash.invalid_usage": "Неверный синтаксис slash-команды. Использование: {usage}",
diff --git a/src/firefox/src/ui/locales/th.js b/src/firefox/src/ui/locales/th.js
index 24c0d1142..8b368e7cd 100644
--- a/src/firefox/src/ui/locales/th.js
+++ b/src/firefox/src/ui/locales/th.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "ดาวน์โหลดไฟล์จาก",
"sp.perm.verb.upload": "อัปโหลดไฟล์ไปยัง",
"sp.perm.verb.record": "บันทึกแท็บ (และไมโครโฟน) บน",
- "sp.help.shortcuts_html": "แป้นพิมพ์ลัดCtrl/Cmd+/ — โฟกัสช่องป้อนข้อความCtrl/Cmd+Shift+A — เปลี่ยนไปโหมดถามCtrl/Cmd+Shift+X — เปลี่ยนไปโหมดทำCtrl/Cmd+Shift+D — เปลี่ยนไปโหมดนักพัฒนาCtrl/Cmd+M — สลับการป้อนด้วยเสียง",
+ "sp.help.shortcuts_html": "แป้นพิมพ์ลัดCtrl/Cmd+/ — โฟกัสช่องป้อนข้อความCtrl/Cmd+Shift+A — เปลี่ยนไปโหมดถามCtrl/Cmd+Shift+X — เปลี่ยนไปโหมดทำCtrl/Cmd+Shift+D — เปลี่ยนไปโหมดนักพัฒนาEscape — หยุดการทำงานที่กำลังทำอยู่1–9 — เลือกคำตอบที่มีหมายเลขนั้น",
"sp.slash.record_transcribe": "บันทึกและบันทึกบทถอดเสียง Whisper หลังหยุด",
"sp.slash.unknown_command": "ไม่รู้จักคำสั่งสแลช {command} ใช้ /help เพื่อดูคำสั่งที่ใช้ได้",
"sp.slash.invalid_usage": "ไวยากรณ์คำสั่งสแลชไม่ถูกต้อง วิธีใช้: {usage}",
diff --git a/src/firefox/src/ui/locales/tl.js b/src/firefox/src/ui/locales/tl.js
index a96e79793..149da3ee2 100644
--- a/src/firefox/src/ui/locales/tl.js
+++ b/src/firefox/src/ui/locales/tl.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "mag-download ng files mula sa",
"sp.perm.verb.upload": "mag-upload ng file sa",
"sp.perm.verb.record": "i-record ang tab (at mikropono) sa",
- "sp.help.shortcuts_html": "Mga Keyboard ShortcutCtrl/Cmd+/ — I-focus ang inputCtrl/Cmd+Shift+A — Lumipat sa Ask modeCtrl/Cmd+Shift+X — Lumipat sa Act modeCtrl/Cmd+Shift+D — Lumipat sa Dev modeCtrl/Cmd+M — I-toggle ang voice input",
+ "sp.help.shortcuts_html": "Mga Keyboard ShortcutCtrl/Cmd+/ — I-focus ang inputCtrl/Cmd+Shift+A — Lumipat sa Ask modeCtrl/Cmd+Shift+X — Lumipat sa Act modeCtrl/Cmd+Shift+D — Lumipat sa Dev modeEscape — Ihinto ang aktibong run1–9 — Piliin ang sagot na may ganoong numero",
"sp.slash.record_transcribe": "I-record at i-save ang Whisper transcript pagkatapos huminto",
"sp.slash.unknown_command": "Hindi kilalang slash command {command}. Gamitin ang /help upang makita ang mga available na command.",
"sp.slash.invalid_usage": "Hindi wastong syntax ng slash command. Paggamit: {usage}",
diff --git a/src/firefox/src/ui/locales/tr.js b/src/firefox/src/ui/locales/tr.js
index 1f02654e8..dc743eee0 100644
--- a/src/firefox/src/ui/locales/tr.js
+++ b/src/firefox/src/ui/locales/tr.js
@@ -698,7 +698,7 @@ export default {
"sp.perm.verb.download": "dosya indirmek",
"sp.perm.verb.upload": "dosya yüklemek",
"sp.perm.verb.record": "sekmeyi (ve mikrofonu) kaydetmek",
- "sp.help.shortcuts_html": "Klavye KısayollarıCtrl/Cmd+/ — Giriş alanına odaklanCtrl/Cmd+Shift+A — Sor moduna geçCtrl/Cmd+Shift+X — Uygula moduna geçCtrl/Cmd+Shift+D — Dev moduna geçCtrl/Cmd+M — Ses girişini aç/kapat",
+ "sp.help.shortcuts_html": "Klavye KısayollarıCtrl/Cmd+/ — Giriş alanına odaklanCtrl/Cmd+Shift+A — Sor moduna geçCtrl/Cmd+Shift+X — Uygula moduna geçCtrl/Cmd+Shift+D — Dev moduna geçEscape — Aktif çalışmayı durdur1–9 — O numaralı yanıtı seç",
"sp.slash.record_transcribe": "Kaydet ve durdurduktan sonra Whisper dökümü kaydet",
"sp.slash.unknown_command": "Bilinmeyen slash komutu {command}. Kullanılabilir komutları görmek için /help kullanın.",
"sp.slash.invalid_usage": "Geçersiz slash komutu sözdizimi. Kullanım: {usage}",
diff --git a/src/firefox/src/ui/locales/uk.js b/src/firefox/src/ui/locales/uk.js
index 25fcd7741..e31f95002 100644
--- a/src/firefox/src/ui/locales/uk.js
+++ b/src/firefox/src/ui/locales/uk.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "завантажити файли з",
"sp.perm.verb.upload": "вивантажити файл на",
"sp.perm.verb.record": "записати вкладку (і мікрофон) на",
- "sp.help.shortcuts_html": "Гарячі клавішіCtrl/Cmd+/ — Фокус на полі введенняCtrl/Cmd+Shift+A — Перейти в режим запитаньCtrl/Cmd+Shift+X — Перейти в режим дійCtrl/Cmd+Shift+D — Перейти в режим розробкиCtrl/Cmd+M — Перемкнути голосове введення",
+ "sp.help.shortcuts_html": "Гарячі клавішіCtrl/Cmd+/ — Фокус на полі введенняCtrl/Cmd+Shift+A — Перейти в режим запитаньCtrl/Cmd+Shift+X — Перейти в режим дійCtrl/Cmd+Shift+D — Перейти в режим розробкиEscape — Зупинити активний запуск1–9 — Вибрати відповідь із цим номером",
"sp.slash.record_transcribe": "Записати та зберегти транскрипт Whisper після зупинки",
"sp.slash.unknown_command": "Невідома slash-команда {command}. Скористайтеся /help, щоб переглянути доступні команди.",
"sp.slash.invalid_usage": "Неправильний синтаксис slash-команди. Використання: {usage}",
diff --git a/src/firefox/src/ui/locales/vi.js b/src/firefox/src/ui/locales/vi.js
index f4b159c22..623465d7c 100644
--- a/src/firefox/src/ui/locales/vi.js
+++ b/src/firefox/src/ui/locales/vi.js
@@ -524,7 +524,7 @@ export default {
'sp.permissions.gate_off': 'Tắt: WebBrain hành động trên mọi trang web mà không hỏi.',
'sp.permissions.manage': 'Quản lý quyền của trang web',
'sp.permissions.enabled': 'Lời nhắc về quyền đã được bật lại.',
- "sp.help.shortcuts_html": "Phím tắtCtrl/Cmd+/ - Tập trung đầu vàoCtrl/Cmd+Shift+A - Chuyển sang chế độ HỏiCtrl/Cmd+Shift+X - Chuyển sang chế độ ActCtrl/Cmd+Shift+D - Chuyển sang chế độ DevEscape - Dừng quá trình chạy đang hoạt động",
+ "sp.help.shortcuts_html": "Phím tắtCtrl/Cmd+/ - Tập trung đầu vàoCtrl/Cmd+Shift+A - Chuyển sang chế độ HỏiCtrl/Cmd+Shift+X - Chuyển sang chế độ ActCtrl/Cmd+Shift+D - Chuyển sang chế độ DevEscape - Dừng quá trình chạy đang hoạt động1–9 - Chọn câu trả lời có số đó",
"sp.slash.record_transcribe": "Ghi và lưu bản ghi Whisper sau khi dừng",
"sp.slash.unknown_command": "Lệnh gạch chéo không xác định {command}. Sử dụng /help để xem các lệnh có sẵn.",
"sp.slash.invalid_usage": "Cú pháp lệnh gạch chéo không hợp lệ. Cách sử dụng: {usage}",
diff --git a/src/firefox/src/ui/locales/zh.js b/src/firefox/src/ui/locales/zh.js
index bc68570ae..1afdf4eeb 100644
--- a/src/firefox/src/ui/locales/zh.js
+++ b/src/firefox/src/ui/locales/zh.js
@@ -652,7 +652,7 @@ export default {
"sp.perm.verb.download": "下载文件自",
"sp.perm.verb.upload": "上传文件到",
"sp.perm.verb.record": "录制标签页(及麦克风)于",
- "sp.help.shortcuts_html": "键盘快捷键Ctrl/Cmd+/ —— 聚焦输入框Ctrl/Cmd+Shift+A —— 切换到提问模式Ctrl/Cmd+Shift+X —— 切换到执行模式Ctrl/Cmd+Shift+D —— 切换到开发模式Ctrl/Cmd+M —— 切换语音输入",
+ "sp.help.shortcuts_html": "键盘快捷键Ctrl/Cmd+/ —— 聚焦输入框Ctrl/Cmd+Shift+A —— 切换到提问模式Ctrl/Cmd+Shift+X —— 切换到执行模式Ctrl/Cmd+Shift+D —— 切换到开发模式Escape —— 停止当前运行1–9 —— 选择对应编号的答案",
"sp.slash.record_transcribe": "停止录制后保存 Whisper 转录",
"sp.slash.unknown_command": "未知斜杠命令 {command}。使用 /help 查看可用命令。",
"sp.slash.invalid_usage": "斜杠命令语法无效。用法:{usage}",
diff --git a/src/firefox/src/ui/sidepanel.js b/src/firefox/src/ui/sidepanel.js
index 0f231f6d0..f33f51c4f 100644
--- a/src/firefox/src/ui/sidepanel.js
+++ b/src/firefox/src/ui/sidepanel.js
@@ -6720,7 +6720,14 @@ function rebindClarifyCards() {
card.querySelectorAll('.permission-education-action').forEach(bindPermissionEducationAction);
card.querySelectorAll('.clarify-skip-permissions').forEach(btn => bindPermissionSkipButton(btn, card, tabId, clarifyId));
+ // Number the answers again: a card whose HTML was saved before the numbers
+ // existed gets them now, so every live card answers to its digits.
+ let shortcut = 0;
card.querySelectorAll('.clarify-option').forEach(btn => {
+ if (++shortcut <= 9) {
+ btn.dataset.shortcut = String(shortcut);
+ btn.setAttribute('aria-keyshortcuts', String(shortcut));
+ }
if (btn.dataset.bound) return;
btn.dataset.bound = 'true';
btn.addEventListener('click', () => {
@@ -11480,6 +11487,21 @@ function renderClarifyCard(data) {
card.dataset.deadlineTs = String(Math.floor(deadlineTs));
}
+ // Every answer carries its own number, shown in a small square at the right
+ // edge of the button, and typing that digit answers the card
+ // (handleClarifyShortcutKeydown). The number lives in a data attribute the
+ // CSS draws rather than in the button's text, because a card restored from
+ // saved chat HTML sends that text back as the answer. Inlined, like the text
+ // repair above, so function-extraction test harnesses keep working.
+ const numberClarifyOptions = (optionsEl) => {
+ let shortcut = 0;
+ for (const button of optionsEl.querySelectorAll('.clarify-option')) {
+ if (++shortcut > 9) break;
+ button.dataset.shortcut = String(shortcut);
+ button.setAttribute('aria-keyshortcuts', String(shortcut));
+ }
+ };
+
const qEl = document.createElement('div');
qEl.className = 'clarify-question';
if (data.pendingReconciliation === true) qEl.style.whiteSpace = 'pre-wrap';
@@ -11523,6 +11545,7 @@ function renderClarifyCard(data) {
deny.dataset.value = 'deny';
deny.addEventListener('click', () => submitClarify(card, tabId, clarifyId, 'deny', 'option'));
optionsEl.appendChild(deny);
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -11566,6 +11589,7 @@ function renderClarifyCard(data) {
b.addEventListener('click', () => submitClarify(card, tabId, clarifyId, value, 'option'));
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -11626,6 +11650,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -11676,6 +11701,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -11714,6 +11740,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -11752,6 +11779,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
scrollToBottom({ force: true });
@@ -11803,6 +11831,7 @@ function renderClarifyCard(data) {
});
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
// The agent's timer decides; this countdown shows it and backs it up.
const stepTimeoutAnswer = ['once', 'deny'].includes(data.timeoutAnswer) ? data.timeoutAnswer : '';
@@ -11901,6 +11930,7 @@ function renderClarifyCard(data) {
bindPermissionSkipButton(skip, card, tabId, clarifyId);
optionsEl.appendChild(skip);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
content.appendChild(card);
// The hint offers "Always allow", which an upload card does not have.
@@ -11937,6 +11967,7 @@ function renderClarifyCard(data) {
b.addEventListener('click', () => submitClarify(card, tabId, clarifyId, b.textContent, 'option'));
optionsEl.appendChild(b);
}
+ numberClarifyOptions(optionsEl);
card.appendChild(optionsEl);
}
@@ -12604,6 +12635,45 @@ function submitClarify(card, tabId, clarifyId, answer, source) {
}
+/**
+ * The numbered answer a digit picks on the live clarify card, or null.
+ *
+ * The digit only counts where nothing else claims the keyboard: no focus, the
+ * composer, or the card itself. A field with text in it keeps the digit as
+ * text, so an answer the user is typing is never cut short; an empty field
+ * gives it up, which is what makes "1" work while the card's own input holds
+ * the caret. The lowest card is the live one — an older unanswered card sits
+ * above it, already invalidated or abandoned.
+ */
+function clarifyShortcutOption(event) {
+ if (event.defaultPrevented || event.isComposing) return null;
+ if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return null;
+ if (!/^[1-9]$/.test(event.key)) return null;
+ const cards = document.querySelectorAll('.clarify-card:not(.clarify-answered):not(.clarify-obsolete)');
+ const card = cards[cards.length - 1];
+ if (!card) return null;
+ const active = document.activeElement;
+ if (active && active !== document.body && active !== inputEl && !card.contains(active)) return null;
+ const tag = active?.tagName;
+ if (tag === 'SELECT' || active?.isContentEditable) return null;
+ if ((tag === 'INPUT' || tag === 'TEXTAREA') && String(active.value || '')) return null;
+ const option = card.querySelector(`.clarify-option[data-shortcut="${event.key}"]`);
+ return option && !option.disabled ? option : null;
+}
+
+function handleClarifyShortcutKeydown(event) {
+ const option = clarifyShortcutOption(event);
+ if (!option) return;
+ // preventDefault keeps the digit out of the composer it was typed into.
+ event.preventDefault();
+ event.stopPropagation();
+ // Click the button rather than answering here, so a permission card's own
+ // label bookkeeping and a scheduled card's tab still go through one path.
+ option.click();
+}
+
+document.addEventListener('keydown', handleClarifyShortcutKeydown, true);
+
// ==========================================================================
// ACTIVITY HISTORY — retained in every mode, revealed by verbose mode
// ==========================================================================
diff --git a/src/firefox/styles/sidepanel.css b/src/firefox/styles/sidepanel.css
index dc7763ae9..7b20884f3 100644
--- a/src/firefox/styles/sidepanel.css
+++ b/src/firefox/styles/sidepanel.css
@@ -4695,6 +4695,9 @@ html[data-ui-scale="175"] .composer-toolbar {
}
.clarify-option {
+ display: flex;
+ align-items: center;
+ gap: 8px;
text-align: left;
padding: 8px 10px;
background: var(--bg-input);
@@ -4716,6 +4719,33 @@ html[data-ui-scale="175"] .composer-toolbar {
cursor: default;
}
+/* The answer's number, drawn from the data attribute so the button's own text
+ stays the answer WebBrain sends back. The empty alt text after the slash
+ keeps the digit out of the accessible name; aria-keyshortcuts announces the
+ shortcut instead. */
+.clarify-option[data-shortcut]::after {
+ content: attr(data-shortcut) / "";
+ box-sizing: border-box;
+ flex: none;
+ margin-left: auto;
+ min-width: 16px;
+ height: 16px;
+ border: 1px solid color-mix(in srgb, var(--text-secondary) 40%, transparent);
+ border-radius: 3px;
+ background: var(--tint-soft);
+ color: var(--text-secondary);
+ font-size: 10px;
+ font-weight: 600;
+ line-height: 14px;
+ text-align: center;
+ font-variant-numeric: tabular-nums;
+}
+
+.clarify-option:hover:not(:disabled)::after {
+ border-color: var(--accent);
+ color: var(--text-primary);
+}
+
/* The permission card's way to the skip dialog: set apart from the answers
above it and marked as risky. */
.clarify-skip-permissions {
diff --git a/test/clarify-option-shortcuts.mjs b/test/clarify-option-shortcuts.mjs
new file mode 100644
index 000000000..5ccf8b96c
--- /dev/null
+++ b/test/clarify-option-shortcuts.mjs
@@ -0,0 +1,175 @@
+// Numbered answers on WebBrain's clarify cards: the real renderClarifyCard,
+// submitClarify and the keydown handler run in Chromium and Firefox with the
+// real stylesheet and locale strings. Each answer shows its number in a small
+// square at its right edge, drawn from a data attribute so the button's own
+// text stays the answer the card sends back, and typing that digit answers the
+// card. A field the user is writing in keeps the digit as text.
+import assert from 'node:assert/strict';
+import fs from 'node:fs';
+import { test } from 'node:test';
+import { chromium, firefox } from 'playwright';
+
+const read = (build, file) => fs.readFileSync(new URL(`../src/${build}/${file}`, import.meta.url), 'utf8').replace(/\r\n/g, '\n');
+function extract(source, name) {
+ const start = source.search(new RegExp(`^(?:async )?function ${name}\\(`, 'm'));
+ assert.ok(start >= 0, `Missing function: ${name}`);
+ return source.slice(start, source.indexOf('\n}', start) + 2);
+}
+
+async function panel(build, engine) {
+ const source = read(build, 'src/ui/sidepanel.js');
+ const english = (await import(`../src/${build}/src/ui/locales/en.js`)).default;
+ const browser = await engine.launch({ headless: true });
+ const page = await browser.newPage({ viewport: { width: 380, height: 700 } });
+ await page.setContent(`
+