From b84f60fb5f89b127a0264551099141322c45ee6e Mon Sep 17 00:00:00 2001 From: stevenjj33 <75509501+stevenjj33@users.noreply.github.com> Date: Mon, 26 Oct 2026 22:58:22 +0800 Subject: [PATCH 1/3] feat(webui): let the settings page rebind the composer's send and newline keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 快捷键 tab was a label with `disabled: true` behind it, and the composer decided in code what Enter meant. The tab is now a page: it lists the composer's keyboard actions, shows the key each one is bound to, and changes the binding. - The notation is one canonical string (`Control+Shift+Enter`) shared by the page and the composer, in `client/projection/common/shortcuts.ts`. - 发送消息 (built-in `Enter`) and 换行 (built-in `Shift+Enter`) are rebindable; 停止生成 is listed as 仅按钮,无快捷键, because `Escape` is already claimed by the menus it closes. - The binding is stored under `webui-shortcuts.v1`, a key of its own, and the composer reads it when a key is pressed, so a rebinding takes effect at once. - A capture refuses a bare modifier and a combination another action already holds, and names the action that holds it. - `resolveWebuiComposerEnterAction` is retired: the rule it encoded is the default configuration, expressed as the values the page shows. ADR 0026 records the decision. --- packages/webui/docs/README.md | 5 +- ...s-the-bindings-the-settings-page-stores.md | 77 +++++ packages/webui/docs/client/composer.md | 8 + .../composer/bindings/use-composer-input.ts | 54 +++- .../composer/projection/composer-state.ts | 35 ++- .../settings/projection/settings-shortcuts.ts | 80 ++++++ .../settings/projection/settings-view.ts | 2 +- .../settings/ui/SettingsModal.public.tsx | 8 +- .../settings/ui/ShortcutsSettings.tsx | 104 +++++++ .../client/features/settings/ui/settings.css | 14 + .../src/client/projection/common/shortcuts.ts | 272 ++++++++++++++++++ .../browser/settings-account-tab.spec.mjs | 12 +- .../test/browser/settings-shortcuts.spec.mjs | 241 ++++++++++++++++ .../gates/fixtures/path-metadata-f00.json | 27 ++ .../webui/test/unit/composer-intent.test.ts | 131 ++++----- .../webui/test/unit/settings-modal.test.tsx | 11 +- .../test/unit/settings-shortcuts.test.ts | 189 ++++++++++++ release/public-source.json | 6 + test/vitest-suites.json | 1 + 19 files changed, 1178 insertions(+), 99 deletions(-) create mode 100644 packages/webui/docs/adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md create mode 100644 packages/webui/src/client/features/settings/projection/settings-shortcuts.ts create mode 100644 packages/webui/src/client/features/settings/ui/ShortcutsSettings.tsx create mode 100644 packages/webui/src/client/projection/common/shortcuts.ts create mode 100644 packages/webui/test/browser/settings-shortcuts.spec.mjs create mode 100644 packages/webui/test/unit/settings-shortcuts.test.ts diff --git a/packages/webui/docs/README.md b/packages/webui/docs/README.md index 44948ba44..1fb1f848a 100644 --- a/packages/webui/docs/README.md +++ b/packages/webui/docs/README.md @@ -90,7 +90,10 @@ is the sole decision record for Mini App hosting. ADR 0021 records the model pic with two states, and the cascade it replaces. ADR 0024 records the client-side workspace boundary for a diff body: a diff entry outside the workspace keeps its name and its counts and loses its content, the boundary is lexical, and a diff whose workspace root the client does not know is not -withheld. A new decision takes the next free number. +withheld. ADR 0026 records the composer's keyboard bindings as the settings page stores them: one +canonical notation, the settings page owns the change, the composer reads the stored binding when +a key is pressed, and only the actions that already have keyboard meaning are bindable. A new +decision takes the next free number. | Retired | Was | Why it is not in the log | Where the live facts are | | --- | --- | --- | --- | diff --git a/packages/webui/docs/adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md b/packages/webui/docs/adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md new file mode 100644 index 000000000..bb9759a54 --- /dev/null +++ b/packages/webui/docs/adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md @@ -0,0 +1,77 @@ +# The composer follows the bindings the settings page stores + +**Status:** Accepted and implemented. +**Date:** 2026-10-26. + +The settings page's **快捷键** tab was a label with no panel behind it: `shortcuts` was the one +preference entry declared `disabled: true` next to 语音 and 连接, and the composer decided what +Enter meant in code — `resolveWebuiComposerEnterAction` answered "submit" or "newline" from the +modifier flags alone. A user could not see that rule, could not change it, and a page that lists +actions it cannot bind is a page that lies. + +The settings page now **lists the composer's keyboard actions, shows the key each one is bound to, +and changes the binding**. Two actions are bindable, because two actions have keyboard meaning +today: + +| Action | Built-in binding | +| --- | --- | +| 发送消息 — send the message | `Enter` | +| 换行 — break the line | `Shift+Enter` | + +## What a binding is + +A binding is **one canonical string**: the modifiers in a fixed order, then the base key — +`Control+Shift+Enter`. The same string is what the browser stores, what the page shows and what the +composer matches against, so a binding cannot mean one thing on the page and another in the +composer. The notation, the matching, the conflict rule and the fallback to the built-in bindings +live in one module (`client/projection/common/shortcuts.ts`) that both sides read, because both sides +have to agree on what a binding is. + +The string is not a keymap. It is the smallest representation that lets a stored preference and a +key press be compared without either side inventing its own vocabulary. + +## Who owns the change, and who reads it + +The **settings page owns the change**: it is the only surface that rebinds an action, and it hands +the result to the settings owner, which persists it under `webui-shortcuts.v1` — the same habit as +`webui-theme`, `mavis-locale` and `file_line_wrap`, and a key of its own so it cannot collide with +the language preference. + +The **composer reads it when a key is pressed**, not when it renders. The settings page and the +composer are open at the same time, and a binding changed in the page has to be the binding the +next key press obeys; a value read at press time is that, and a value held in component state would +be whatever it was when the composer last rendered. + +The composer therefore keeps no shortcut state of its own. What it owns is the rule: a press that +names the send binding submits, a press that names the newline binding breaks the line, and a press +that names neither is left to the browser — which is why a key the user unbound stops doing the +composer's business and starts doing the textarea's. + +## What the page refuses + +- **A modifier on its own.** A binding is a combination; capturing `Shift` alone would leave a + shortcut that fires whenever the user holds a key down. +- **A combination another action already holds.** The page says which action holds it and keeps + both bindings as they were. + +## What this is not + +- **Not a keybinding framework.** Two actions, one notation, one page. The voice, connection and + personalization tabs stay disabled, and nothing here changes the server or the runtime. +- **Not a new binding for stopping a generation.** 停止生成 is a button and nothing else, and the + page says so. `Escape` is already spoken for by the menus it closes — the mention menu, the slash + menu, the permission menu, goal mode and plan mode all claim it — so a shortcut for it would + fight them rather than serve the user. +- **Not the language pack.** This page's strings are hard-coded Chinese, like the rest of the + settings page on this baseline. Where the settings page's language pack lands, these strings move + with the others; the two changes touch the same tab table and nothing else. + +## Consequences + +- The composer no longer hard-codes what Enter means. `resolveWebuiComposerEnterAction` is retired: + the rule it encoded is the default configuration, expressed as the same values the page shows. +- The built-in behaviour is unchanged. With nothing stored, `Enter` sends and `Shift+Enter` breaks + the line, and a press that names neither binding is left to the browser — which is what the + retired rule did with every modified Enter. +- A newline bound to a key the browser does not break the line on (`Control+J`, say) is broken by + the composer itself, because a binding the user can set is a binding the user can rely on. diff --git a/packages/webui/docs/client/composer.md b/packages/webui/docs/client/composer.md index cc2ae309e..549b776d6 100644 --- a/packages/webui/docs/client/composer.md +++ b/packages/webui/docs/client/composer.md @@ -13,6 +13,7 @@ needs its own behavioural evidence — browser or assembled-application, per | Queue mirror | One selected destination with a generation, not a per-session mirror map; home display gates preserved | Refresh view interest without recreating the owner | Enqueue / delete / read commit only to an eligible destination generation; settlement obligations survive a selection change | | Retry | Last `{session, message}` retained, shown only for the matching session and refusal, never retargeted by adoption | Retained | Retry enters the ordinary send/enqueue workflow; goals and commands create no turn-retry record | | Mention and slash | Mention retained until an explicit command; slash derived from draft and caret | Recreate caret, index and listeners | Selection/dismiss controls the range; no universal switch or submit reset | +| Send and newline keys | The bindable keys are the stored bindings, not a rule in the component; the settings page owns the change | The stored binding is read when a key is pressed, so a rebinding takes effect without a remount | 发送消息 submits and 换行 breaks the line; a press that names neither binding is left to the browser; an open IME composition belongs to the composition | ## Where the pieces live @@ -29,3 +30,10 @@ needs its own behavioural evidence — browser or assembled-application, per React-side store binding. - The submission path itself (creation, admission, send-or-queue) is [`submission.md`](submission.md). +- The keyboard bindings live in the settings business: the page is + `client/features/settings/ui/ShortcutsSettings.tsx` with its own model in + `client/features/settings/projection/settings-shortcuts.ts`, and the notation both the page and the + composer read is `client/projection/common/shortcuts.ts`. The composer keeps no binding state — + it reads the stored binding when a key is pressed. ADR + [`../adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md`](../adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md) + records why. diff --git a/packages/webui/src/client/features/composer/bindings/use-composer-input.ts b/packages/webui/src/client/features/composer/bindings/use-composer-input.ts index f3afc95c4..979a8d802 100644 --- a/packages/webui/src/client/features/composer/bindings/use-composer-input.ts +++ b/packages/webui/src/client/features/composer/bindings/use-composer-input.ts @@ -1,6 +1,8 @@ import { useCallback, useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent, type RefObject } from "react"; import { findWebuiMentionRange, removeWebuiSlashToken, type WebuiMentionRange, type WebuiSlashRange } from "../projection/composer-interactions.js"; -import { resolveWebuiComposerEnterAction } from "../projection/composer-state.js"; +import { resolveWebuiComposerShortcutAction } from "../projection/composer-state.js"; +import { parseShortcutBindings, shortcutBaseKey, SHORTCUT_STORAGE_KEY } from "../../../projection/common/shortcuts.js"; +import { useWebuiBrowserCapabilities } from "../../../bindings/browser-capabilities.js"; import { shouldRecallWebuiHistory, startWebuiHistoryBrowse, stepWebuiHistoryBrowse, type WebuiHistoryBrowse } from "../application/composer-history.js"; export interface ComposerInputKeyOptions { @@ -59,6 +61,10 @@ export function useComposerInput(draft: string, sessionId?: string): ComposerInp const [mentionIndex, setMentionIndex] = useState(0); const [commandIndex, setCommandIndex] = useState(0); const [historyBrowse, setHistoryBrowse] = useState(); + // The bindings are read when a key is pressed rather than held in state: the + // settings page can change them while the composer is open, and the next + // press must follow the binding the user just set. + const { storage } = useWebuiBrowserCapabilities(); useEffect(() => setHistoryBrowse(undefined), [sessionId]); @@ -85,6 +91,27 @@ export function useComposerInput(draft: string, sessionId?: string): ComposerInp input.setMentionRange(nextRange); }, []); + /** + * Breaks the line at the caret. + * + * `Enter` breaks the line by itself, so this is only reached for a newline + * bound to a key the browser does not break the line on. + */ + const insertNewline = useCallback((event: KeyboardEvent, options: ComposerInputKeyOptions) => { + const caret = event.currentTarget.selectionStart ?? options.draft.length; + const value = `${options.draft.slice(0, caret)}\n${options.draft.slice(caret)}`; + pendingCaret.current = caret + 1; + edit({ + value, + caret: caret + 1, + changeDraft: options.onHistoryDraftChange ?? options.onDraftChange, + mentionRange: options.mentionRange, + setMentionRange: options.setMentionRange, + setComposerMenu: options.setComposerMenu, + setPermissionMenuOpen: options.setPermissionMenuOpen, + }); + }, [edit]); + const updateCaret: ReturnType["updateCaret"] = useCallback((value, nextCaret, _mentionRange, setMentionRange) => { setCaret(nextCaret); setMentionRange(findWebuiMentionRange(value, nextCaret)); @@ -145,20 +172,31 @@ export function useComposerInput(draft: string, sessionId?: string): ComposerInp return; } } - if (event.key === "Enter" && options.commandCount === 0) { - const action = resolveWebuiComposerEnterAction({ - shiftKey: event.shiftKey, - altKey: event.altKey, - ctrlKey: event.ctrlKey, - metaKey: event.metaKey, + if (options.commandCount === 0) { + const bindings = parseShortcutBindings(storage.getItem(SHORTCUT_STORAGE_KEY)); + const action = resolveWebuiComposerShortcutAction({ + event: { + key: event.key, + code: event.code, + ctrlKey: event.ctrlKey, + metaKey: event.metaKey, + altKey: event.altKey, + shiftKey: event.shiftKey, + }, isComposing: event.nativeEvent.isComposing, submitBlocked: options.submitBlocked, + bindings, }); if (action === "submit") { event.preventDefault(); event.currentTarget.form?.requestSubmit(); return; } + if (action === "newline" && shortcutBaseKey(bindings["composer.newline"]) !== "Enter") { + event.preventDefault(); + insertNewline(event, options); + return; + } } if (options.commandCount === 0) return; if (event.key === "ArrowDown") { @@ -171,7 +209,7 @@ export function useComposerInput(draft: string, sessionId?: string): ComposerInp event.preventDefault(); options.chooseCommand(commandIndex); } - }, [applyHistoryDraft, commandIndex, historyBrowse, mentionIndex]); + }, [applyHistoryDraft, commandIndex, historyBrowse, insertNewline, mentionIndex, storage]); return { textareaRef, caret, setCaret, mentionIndex, setMentionIndex, commandIndex, setCommandIndex, diff --git a/packages/webui/src/client/features/composer/projection/composer-state.ts b/packages/webui/src/client/features/composer/projection/composer-state.ts index fbe71a01a..9fd8231b5 100644 --- a/packages/webui/src/client/features/composer/projection/composer-state.ts +++ b/packages/webui/src/client/features/composer/projection/composer-state.ts @@ -3,6 +3,7 @@ import type { WebuiSlashCommandFields, } from "../contracts/slash-command.js"; import { classifyWebuiSlashCommand } from "../contracts/slash-command.js"; +import { shortcutMatches, type ShortcutBindings, type ShortcutKeyEvent } from "../../../projection/common/shortcuts.js"; export type WebuiSubmissionIntent = | { readonly kind: "activate-goal-mode" } | { readonly kind: "activate-plan-mode" } @@ -55,19 +56,33 @@ export function resolveWebuiSubmissionIntent(args: { return { kind: "submit-turn" }; } -export type WebuiComposerEnterAction = "submit" | "newline"; +export type WebuiComposerShortcutAction = "submit" | "newline" | "ignore"; -export function resolveWebuiComposerEnterAction(args: { - readonly shiftKey: boolean; - readonly altKey: boolean; - readonly ctrlKey: boolean; - readonly metaKey: boolean; +/** + * What a key press in the composer does. + * + * The rule is the configured binding, not a hard-coded one: the settings page + * can bind "send the message" to any combination, and the composer follows it. + * `ignore` is the answer for a press that names no binding at all — the + * browser's own behaviour then stands, which is how a key that is not bound + * keeps doing what a key in a textarea does. + * + * The default bindings (`Enter` sends, `Shift+Enter` breaks the line) reproduce + * the rule this composer had before the bindings were rebindable. + */ +export function resolveWebuiComposerShortcutAction(args: { + readonly event: ShortcutKeyEvent; readonly isComposing: boolean; readonly submitBlocked: boolean; -}): WebuiComposerEnterAction { - if (args.shiftKey || args.altKey || args.ctrlKey || args.metaKey) return "newline"; - if (args.isComposing || args.submitBlocked) return "newline"; - return "submit"; + readonly bindings: ShortcutBindings; +}): WebuiComposerShortcutAction { + // While an input method is composing, Enter belongs to the composition. + if (args.isComposing) return "ignore"; + if (shortcutMatches(args.bindings["composer.submit"], args.event)) { + return args.submitBlocked ? "ignore" : "submit"; + } + if (shortcutMatches(args.bindings["composer.newline"], args.event)) return "newline"; + return "ignore"; } export function deriveRecentWorkspaceDirs( diff --git a/packages/webui/src/client/features/settings/projection/settings-shortcuts.ts b/packages/webui/src/client/features/settings/projection/settings-shortcuts.ts new file mode 100644 index 000000000..d03991d48 --- /dev/null +++ b/packages/webui/src/client/features/settings/projection/settings-shortcuts.ts @@ -0,0 +1,80 @@ +// The shortcuts page's own model: which actions it lists, what each one is +// called and which of them can be bound at all. +// +// The page renders this and the composer reads the bindings themselves, so the +// names live here rather than in the component that draws the rows. + +import { + shortcutDisplayLabel, + type ShortcutActionId, + type ShortcutBindings, +} from "../../../projection/common/shortcuts.js"; + +export interface ShortcutSettingsAction { + readonly actionId: ShortcutActionId; + /** The control's test id. It is a page detail, not a domain name. */ + readonly testId: string; + readonly title: string; + readonly description: string; + /** Whether the row accepts a new binding. */ + readonly editable: boolean; + /** What the row says for an action that has no key binding at all. */ + readonly note?: string; +} + +/** + * The actions the page lists. + * + * Only the two composer actions that already have keyboard meaning are + * bindable. Stopping a generation is a button and nothing else: `Escape` is + * already spoken for by the menus it closes, so the row says so rather than + * offering a binding that would fight them. + */ +export const SHORTCUT_SETTINGS_ACTIONS: readonly ShortcutSettingsAction[] = [ + { + actionId: "composer.submit", + testId: "mavis-settings-shortcut-submit", + title: "发送消息", + description: "在输入框中发送当前消息", + editable: true, + }, + { + actionId: "composer.newline", + testId: "mavis-settings-shortcut-newline", + title: "换行", + description: "在输入框中换行,不发送消息", + editable: true, + }, + { + actionId: "composer.stop", + testId: "mavis-settings-shortcut-stop", + title: "停止生成", + description: "仅按钮,无快捷键", + editable: false, + note: "仅按钮,无快捷键", + }, +]; + +export interface ShortcutSettingsRow extends ShortcutSettingsAction { + /** The action's current binding, in its canonical form. */ + readonly shortcut: string; + /** How the current binding is shown. */ + readonly label: string; +} + +/** The page's rows, for a set of bindings. */ +export function shortcutSettingsRows(bindings: ShortcutBindings): readonly ShortcutSettingsRow[] { + return SHORTCUT_SETTINGS_ACTIONS.map((action) => { + const shortcut = bindings[action.actionId] ?? ""; + return { + ...action, + shortcut, + label: shortcut ? shortcutDisplayLabel(shortcut) : "未设置", + }; + }); +} + +/** The name of an action, for a message that names the action it collided with. */ +export function shortcutActionTitle(actionId: ShortcutActionId): string { + return SHORTCUT_SETTINGS_ACTIONS.find((action) => action.actionId === actionId)?.title ?? actionId; +} diff --git a/packages/webui/src/client/features/settings/projection/settings-view.ts b/packages/webui/src/client/features/settings/projection/settings-view.ts index 56358911c..0093ce718 100644 --- a/packages/webui/src/client/features/settings/projection/settings-view.ts +++ b/packages/webui/src/client/features/settings/projection/settings-view.ts @@ -13,7 +13,7 @@ export type SettingsTabKey = "desktop" | "shortcuts" | "voice" | "custom-instruc export interface SettingsTabDefinition { readonly key: SettingsTabKey; readonly group: "preferences" | "management" | "coding" | "archived"; readonly label: string; readonly icon: string; readonly disabled?: boolean; } export const DESKTOP_SETTINGS_TABS: readonly SettingsTabDefinition[] = [ -{ key: "desktop", group: "preferences", label: "通用", icon: "desktop" }, { key: "voice", group: "preferences", label: "语音", icon: "voice", disabled: true }, { key: "shortcuts", group: "preferences", label: "快捷键", icon: "shortcuts", disabled: true }, { key: "custom-instructions", group: "preferences", label: "个性化", icon: "custom-instructions" }, +{ key: "desktop", group: "preferences", label: "通用", icon: "desktop" }, { key: "voice", group: "preferences", label: "语音", icon: "voice", disabled: true }, { key: "shortcuts", group: "preferences", label: "快捷键", icon: "shortcuts" }, { key: "custom-instructions", group: "preferences", label: "个性化", icon: "custom-instructions" }, // The browser switches were under the browser panel, in the tool area. A // setting that lives in a panel is a setting nobody finds without opening // that panel first, so they are a page of their own — under 偏好, next to diff --git a/packages/webui/src/client/features/settings/ui/SettingsModal.public.tsx b/packages/webui/src/client/features/settings/ui/SettingsModal.public.tsx index a9fa7ee27..091c95839 100644 --- a/packages/webui/src/client/features/settings/ui/SettingsModal.public.tsx +++ b/packages/webui/src/client/features/settings/ui/SettingsModal.public.tsx @@ -54,6 +54,8 @@ import { selectWebuiCatalogFlatPage } from "../../../features/sessions/applicati import { BrowserSettingsPage } from "../../browser/ui/BrowserSettingsPage.public.js"; import { DESKTOP_SETTINGS_TABS, resolveThemePreference, filterSettingsTabs, SETTINGS_GROUPS } from "../projection/settings-view.js"; import type { SettingsTabKey } from "../projection/settings-view.js"; +import { DEFAULT_SHORTCUT_BINDINGS, parseShortcutBindings, serializeShortcutBindings, SHORTCUT_STORAGE_KEY } from "../../../projection/common/shortcuts.js"; +import { ShortcutsSettings } from "./ShortcutsSettings.js"; import { WebuiZoneBoundary } from "../../../shell/WebuiZoneBoundary.js"; import { WebuiWorktreePanel } from "./SettingsModal.js"; @@ -127,9 +129,9 @@ export function SettingsModal({ open, onClose, dataDir, version, sessionId, work const models = modelsState.models.value ?? []; const account = accountState.account.value; const archived = archivedState.sessions; - const [active, setActive] = useState("desktop"); const [query, setQuery] = useState(""); const [theme, setTheme] = useState(() => stored("webui-theme", "light", storage)); const [systemDark, setSystemDark] = useState(() => typeof window !== "undefined" && window.matchMedia?.("(prefers-color-scheme: dark)").matches); const [language] = useState(() => stored("mavis-locale", "en", storage)); const [wrap, setWrap] = useState(() => stored("file_line_wrap", "true", storage) === "true"); const [newTab, setNewTab] = useState(() => stored("file_open_in_new_tab", "false", storage) === "true"); const [contextWindow, setContextWindow] = useState(() => stored("webui-context-window-usage", "true", storage) !== "false"); const actualTheme = resolveThemePreference(theme, systemDark); + const [active, setActive] = useState("desktop"); const [query, setQuery] = useState(""); const [theme, setTheme] = useState(() => stored("webui-theme", "light", storage)); const [systemDark, setSystemDark] = useState(() => typeof window !== "undefined" && window.matchMedia?.("(prefers-color-scheme: dark)").matches); const [language] = useState(() => stored("mavis-locale", "en", storage)); const [wrap, setWrap] = useState(() => stored("file_line_wrap", "true", storage) === "true"); const [newTab, setNewTab] = useState(() => stored("file_open_in_new_tab", "false", storage) === "true"); const [contextWindow, setContextWindow] = useState(() => stored("webui-context-window-usage", "true", storage) !== "false"); const [shortcuts, setShortcuts] = useState(() => parseShortcutBindings(storage.getItem(SHORTCUT_STORAGE_KEY))); const actualTheme = resolveThemePreference(theme, systemDark); useEffect(() => { if (typeof window === "undefined" || !window.matchMedia) return; const media = window.matchMedia("(prefers-color-scheme: dark)"); const listener = () => setSystemDark(media.matches); listener(); media.addEventListener?.("change", listener); return () => media.removeEventListener?.("change", listener); }, []); - useEffect(() => { dom.updateDocumentAppearance(actualTheme, language); storage.setItem("webui-theme", theme); storage.setItem("mavis-locale", language); storage.setItem("file_line_wrap", String(wrap)); storage.setItem("file_open_in_new_tab", String(newTab)); storage.setItem("webui-context-window-usage", String(contextWindow)); dom.dispatchContextWindowUsageChange(); }, [actualTheme, contextWindow, dom, language, newTab, storage, theme, wrap]); + useEffect(() => { dom.updateDocumentAppearance(actualTheme, language); storage.setItem("webui-theme", theme); storage.setItem("mavis-locale", language); storage.setItem("file_line_wrap", String(wrap)); storage.setItem("file_open_in_new_tab", String(newTab)); storage.setItem("webui-context-window-usage", String(contextWindow)); storage.setItem(SHORTCUT_STORAGE_KEY, serializeShortcutBindings(shortcuts)); dom.dispatchContextWindowUsageChange(); }, [actualTheme, contextWindow, dom, language, newTab, shortcuts, storage, theme, wrap]); useEffect(() => { if (!open) return; void modelsWorkflows?.loadModels(sessionId); void accountWorkflows?.loadAccount(sessionId); void sessionWorkflows?.loadArchived(); }, [accountWorkflows, modelsWorkflows, open, sessionId, sessionWorkflows]); const visibleTabs = useMemo(() => filterSettingsTabs(query), [query]); if (!open) return null; const selected = models.find((model) => model.selected); const modelValue = selected ? `${selected.providerId}/${selected.modelId}/${selected.variant ?? ""}` : ""; const groups = SETTINGS_GROUPS.map((group) => ({ ...group, tabs: visibleTabs.filter((tab) => tab.group === group.key) })).filter((group) => group.tabs.length > 0); const label = DESKTOP_SETTINGS_TABS.find((tab) => tab.key === active)?.label; // The request is Models' to build: the option value and the selection are two @@ -138,7 +140,7 @@ export function SettingsModal({ open, onClose, dataDir, version, sessionId, work // not arrive here. const changeModel = async (value: string) => { const model = webuiModelFromOptionValue(models, value); if (!model || !modelsWorkflows) return; await modelsWorkflows.selectModel(buildWebuiModelSelectionRequest(model, {}, sessionId)); }; const handleDeleteAllArchived = async () => { if (!sessionWorkflows || !archived.length || !window.confirm("确定删除全部已归档任务吗?此操作无法撤销")) return; const ids = archived.map((session) => session.sessionId); try { await Promise.all(ids.map((id) => sessionWorkflows.removeArchived(id))); } catch (error) { window.alert(`删除失败:${error instanceof Error ? error.message : String(error)}`); } }; - return
{ if (event.target === event.currentTarget) onClose(); }}>
event.stopPropagation()}>

{label}

{active === "archived" ? : null}{active === "account" ? : null}
{active === "desktop" ? : null}{active === "custom-instructions" ? : null}{active === "browser" ? : null}{active === "usage" ? : null}{active === "account" ? : null}{active === "archived" ? { if (!sessionWorkflows) return; await sessionWorkflows.removeArchived(id); }} onUnarchive={async (id) => { await sessionWorkflows?.unarchive(id); }} /> : null}{active === "coding" ? : null}{active === "worktree" ? : null}{active !== "desktop" && active !== "usage" && active !== "account" && active !== "archived" && active !== "coding" && active !== "worktree" && active !== "custom-instructions" && active !== "browser" ?
: null}{active === "desktop" && dataDir ?

{dataDir}

: null}
; + return
{ if (event.target === event.currentTarget) onClose(); }}>
event.stopPropagation()}>

{label}

{active === "archived" ? : null}{active === "account" ? : null}
{active === "desktop" ? : null}{active === "custom-instructions" ? : null}{active === "shortcuts" ? setShortcuts(DEFAULT_SHORTCUT_BINDINGS)} /> : null}{active === "browser" ? : null}{active === "usage" ? : null}{active === "account" ? : null}{active === "archived" ? { if (!sessionWorkflows) return; await sessionWorkflows.removeArchived(id); }} onUnarchive={async (id) => { await sessionWorkflows?.unarchive(id); }} /> : null}{active === "coding" ? : null}{active === "worktree" ? : null}{active !== "desktop" && active !== "usage" && active !== "account" && active !== "archived" && active !== "coding" && active !== "worktree" && active !== "custom-instructions" && active !== "browser" && active !== "shortcuts" ?
: null}{active === "desktop" && dataDir ?

{dataDir}

: null}
; } function GenericPage({ theme, setTheme, wrap, setWrap, newTab, setNewTab, contextWindow, setContextWindow, version }: { readonly theme: string; readonly setTheme: (value: string) => void; readonly wrap: boolean; readonly setWrap: (value: boolean) => void; readonly newTab: boolean; readonly setNewTab: (value: boolean) => void; readonly contextWindow: boolean; readonly setContextWindow: (value: boolean) => void; readonly version: string }): ReactElement { diff --git a/packages/webui/src/client/features/settings/ui/ShortcutsSettings.tsx b/packages/webui/src/client/features/settings/ui/ShortcutsSettings.tsx new file mode 100644 index 000000000..ce45695c0 --- /dev/null +++ b/packages/webui/src/client/features/settings/ui/ShortcutsSettings.tsx @@ -0,0 +1,104 @@ +// The shortcuts page: the actions a user can rebind, the key each one is bound +// to, and the control that captures a new one. +// +// The page is the only place a binding is changed. It hands the result up +// rather than writing to browser storage itself, so the owner of the +// preference decides when and where it is persisted — the same arrangement the +// other settings rows use. +// +// The capture owns the keyboard while it is open. A key press that names a +// binding is consumed here instead of reaching the app, because the press is +// the user naming a shortcut, not the user using one. + +import { Fragment, useEffect, useMemo, useState, type ReactElement } from "react"; +import { + findShortcutConflict, + parseShortcut, + shortcutDisplayLabel, + type ShortcutActionId, + type ShortcutBindings, +} from "../../../projection/common/shortcuts.js"; +import { SettingsDivider, SettingsPage, SettingsRow, SettingsSection } from "../../../ui/settings-layout.js"; +import { SettingsButton } from "./settings-atoms.js"; +import { shortcutActionTitle, shortcutSettingsRows } from "../projection/settings-shortcuts.js"; + +export interface ShortcutsSettingsProps { + readonly bindings: ShortcutBindings; + readonly onChange: (bindings: ShortcutBindings) => void; + readonly onReset: () => void; +} + +export function ShortcutsSettings({ bindings, onChange, onReset }: ShortcutsSettingsProps): ReactElement { + const [capturing, setCapturing] = useState(undefined); + const [error, setError] = useState(""); + const rows = useMemo(() => shortcutSettingsRows(bindings), [bindings]); + + useEffect(() => { + if (!capturing) return; + const onKeyDown = (event: KeyboardEvent): void => { + // Tab keeps its own meaning while the capture is open: it is how the + // user leaves the control, and a shortcut that swallows it would leave + // them stuck on the button they are editing. + if (event.key !== "Tab") event.preventDefault(); + event.stopPropagation(); + if (event.key === "Escape") { + setCapturing(undefined); + setError(""); + return; + } + const shortcut = parseShortcut(event); + // A modifier on its own names no combination, so it is not captured. + if (!shortcut) return; + const conflict = findShortcutConflict(bindings, capturing, shortcut); + if (conflict) { + setError(`「${shortcutDisplayLabel(shortcut)}」已被「${shortcutActionTitle(conflict)}」占用`); + return; + } + onChange({ ...bindings, [capturing]: shortcut }); + setCapturing(undefined); + setError(""); + }; + window.addEventListener("keydown", onKeyDown, true); + return () => window.removeEventListener("keydown", onKeyDown, true); + }, [bindings, capturing, onChange]); + + return ( + + { setError(""); setCapturing(undefined); onReset(); }}> + 恢复默认 + + } + > + {error ?

{error}

: null} + {rows.map((row, index) => ( + + {index > 0 ? : null} + + {row.editable ? ( + + ) : ( + + {row.note ?? row.label} + + )} + + + ))} +
+
+ ); +} diff --git a/packages/webui/src/client/features/settings/ui/settings.css b/packages/webui/src/client/features/settings/ui/settings.css index 809dccaee..e0210415b 100644 --- a/packages/webui/src/client/features/settings/ui/settings.css +++ b/packages/webui/src/client/features/settings/ui/settings.css @@ -388,6 +388,20 @@ .mavis-settings-appearance-row .webui-settings-row-control { display: flex; } .mavis-settings-theme-selector { display: flex; align-items: flex-start; gap: var(--spacing_12); } .mavis-settings-theme-option { display: flex; width: 100px; flex: 0 0 100px; flex-direction: column; align-items: center; gap: var(--spacing_8); border: 0; background: transparent; padding: 0; color: var(--text_default_secondary); font-size: var(--size_12); line-height: var(--line_height_16); } + /* The shortcut chip. It is a key the user reads, so it is set in the + * monospace face the composer uses for its own key hints: a combination + * like `Ctrl + Enter` is a sequence of names, and names read better when + * they are not the body face. */ + .mavis-settings-shortcut-key { display: inline-flex; min-width: 104px; height: 30px; align-items: center; justify-content: center; border: 1px solid var(--border_default); border-radius: var(--radius_8); background: var(--bg_interaction_secondary_default); padding: 0 var(--spacing_12); color: var(--text_default_primary); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: var(--size_12); line-height: var(--line_height_16); } + .mavis-settings-shortcut-key:hover:not(:disabled) { background: var(--bg_interaction_secondary_hover); } + .mavis-settings-shortcut-key:focus-visible { outline: 2px solid var(--border_accent); outline-offset: 2px; } + /* While the chip is listening for a combination, it says so rather than + * showing the key it is about to be replaced with. */ + .mavis-settings-shortcut-key.is-capturing { border-color: var(--border_accent); color: var(--text_default_secondary); } + /* An action with no binding is a fact, not a control: it gets the row's + * secondary text and no surface to click. */ + .mavis-settings-shortcut-key.is-static { border-color: transparent; background: transparent; color: var(--text_default_secondary); } + .mavis-settings-shortcut-error { margin: 0; padding: var(--spacing_8) var(--spacing_12); color: var(--text_label_danger_secondary_default); font-size: var(--size_12); line-height: var(--line_height_16); } .mavis-settings-theme-preview { display: block; width: 100px; height: 64px; overflow: hidden; border-radius: var(--radius_8); padding: var(--spacing_4); outline: 2px solid var(--border_light); outline-offset: -2px; } .mavis-settings-theme-preview.is-selected { outline-color: var(--icon_default_accent); } .mavis-settings-theme-preview > span { display: block; width: 100%; height: 100%; overflow: hidden; border-radius: 6px; outline: 1px solid var(--border_light); outline-offset: -1px; } diff --git a/packages/webui/src/client/projection/common/shortcuts.ts b/packages/webui/src/client/projection/common/shortcuts.ts new file mode 100644 index 000000000..53cec46dc --- /dev/null +++ b/packages/webui/src/client/projection/common/shortcuts.ts @@ -0,0 +1,272 @@ +// Keyboard shortcut bindings: the notation, the matching and the conflicts. +// +// The settings page owns the page and the composer owns the key handling, but +// both have to agree on what a binding *is*: which key combination names +// which action, whether a captured combination is usable at all, and which +// combinations are already taken. That agreement is a value rather than a +// behaviour of either side, so it lives here, in the one layer both may read. +// +// The notation is one canonical string — modifiers in a fixed order, then the +// base key (`Control+Shift+Enter`). The same string is what the browser +// stores, what the page displays and what the composer matches against, so a +// binding cannot mean one thing on the page and another in the composer. + +/** The actions a shortcut can be bound to. */ +export type ShortcutActionId = "composer.submit" | "composer.newline" | "composer.stop"; + +/** The actions, in the order the settings page lists them. */ +export const SHORTCUT_ACTION_IDS: readonly ShortcutActionId[] = [ + "composer.submit", + "composer.newline", + "composer.stop", +]; + +/** + * The part of a keyboard event a binding is read from. + * + * It is the shape both a DOM `KeyboardEvent` and a test's literal already + * have, so nothing here needs a DOM to be exercised. + */ +export interface ShortcutKeyEvent { + readonly key: string; + /** The physical key. It is what keeps `A` and `Shift+A` apart. */ + readonly code?: string; + readonly ctrlKey: boolean; + readonly metaKey: boolean; + readonly altKey: boolean; + readonly shiftKey: boolean; +} + +/** What every action is bound to. */ +export type ShortcutBindings = Readonly>; + +/** Where the bindings live in browser storage. */ +export const SHORTCUT_STORAGE_KEY = "webui-shortcuts.v1"; + +/** + * The built-in bindings: Enter sends the message, Shift+Enter breaks the line. + * + * They are the behaviour the composer had before the settings page could + * change it, expressed as the same values the page shows. + */ +export const DEFAULT_SHORTCUT_BINDINGS: ShortcutBindings = Object.freeze({ + "composer.submit": "Enter", + "composer.newline": "Shift+Enter", + "composer.stop": "", +}); + +type ShortcutModifier = "Control" | "Alt" | "Shift" | "Meta"; + +/** The order modifiers are written in, so two equal bindings are equal strings. */ +const MODIFIER_ORDER: readonly ShortcutModifier[] = ["Control", "Alt", "Shift", "Meta"]; + +/** How a modifier is spelled when it is read rather than written. */ +const MODIFIER_ALIASES: Readonly> = { + ctrl: "Control", + control: "Control", + alt: "Alt", + option: "Alt", + shift: "Shift", + meta: "Meta", + cmd: "Meta", + command: "Meta", + super: "Meta", + win: "Meta", +}; + +/** How a modifier is spelled when it is shown. */ +const DISPLAY_MODIFIERS: Readonly> = { + Control: "Ctrl", + Alt: "Alt", + Shift: "Shift", + Meta: "Cmd", +}; + +/** Keys that are only ever a modifier, and so can never be a binding on their own. */ +const MODIFIER_KEYS: ReadonlySet = new Set([ + "Control", + "Alt", + "Shift", + "Meta", + "AltGraph", + "CapsLock", + "NumLock", + "ScrollLock", + "Fn", + "FnLock", + "Hyper", + "Super", + "Symbol", + "SymbolLock", + "OS", +]); + +/** The named keys, written the way the browser spells them. */ +const NAMED_KEYS: Readonly> = { + enter: "Enter", + escape: "Escape", + esc: "Escape", + tab: "Tab", + backspace: "Backspace", + delete: "Delete", + space: "Space", + " ": "Space", + arrowup: "ArrowUp", + arrowdown: "ArrowDown", + arrowleft: "ArrowLeft", + arrowright: "ArrowRight", + home: "Home", + end: "End", + pageup: "PageUp", + pagedown: "PageDown", + insert: "Insert", +}; + +/** The canonical spelling of a base key, or undefined when it cannot be one. */ +function normalizeBaseKey(raw: string): string | undefined { + const trimmed = raw.trim(); + if (!trimmed) return undefined; + if (MODIFIER_KEYS.has(trimmed)) return undefined; + const lower = trimmed.toLowerCase(); + const named = NAMED_KEYS[lower]; + if (named) return named; + if (/^f\d{1,2}$/u.test(lower)) return lower.toUpperCase(); + if (trimmed.length === 1) return trimmed.toUpperCase(); + return trimmed; +} + +function canonicalShortcut(modifiers: ReadonlySet, base: string): string { + const parts: string[] = []; + for (const modifier of MODIFIER_ORDER) if (modifiers.has(modifier)) parts.push(modifier); + parts.push(base); + return parts.join("+"); +} + +/** + * The canonical form of a written binding, or undefined when it is not one. + * + * It accepts what a person would write (`ctrl+enter`, `Shift + Enter`) and + * returns what the page and the composer agree on (`Control+Enter`). + */ +export function normalizeShortcut(shortcut: string): string | undefined { + const parts = shortcut.split("+").map((part) => part.trim()).filter((part) => part.length > 0); + if (parts.length === 0) return undefined; + const base = normalizeBaseKey(parts[parts.length - 1] ?? ""); + if (!base) return undefined; + const modifiers = new Set(); + for (const modifier of parts.slice(0, -1)) { + const canonical = MODIFIER_ALIASES[modifier.toLowerCase()]; + if (!canonical) return undefined; + modifiers.add(canonical); + } + return canonicalShortcut(modifiers, base); +} + +/** The base key of a binding: `Control+Enter` and `Enter` both answer `Enter`. */ +export function shortcutBaseKey(shortcut: string): string | undefined { + const normalized = normalizeShortcut(shortcut); + if (!normalized) return undefined; + return normalized.slice(normalized.lastIndexOf("+") + 1); +} + +/** The base key of a key press, or undefined when the press carries none. */ +function baseKeyOf(event: ShortcutKeyEvent): string | undefined { + const code = event.code ?? ""; + const letter = /^Key([A-Z])$/u.exec(code); + if (letter) return letter[1] ?? undefined; + const digit = /^Digit([0-9])$/u.exec(code); + if (digit) return digit[1] ?? undefined; + if (code === "Space") return "Space"; + return normalizeBaseKey(event.key); +} + +/** + * The binding a key press names, or undefined when it names none. + * + * A press of a modifier on its own names nothing: a binding is a combination, + * and capturing `Shift` alone would leave the user with a shortcut that fires + * whenever they hold a key down. + */ +export function parseShortcut(event: ShortcutKeyEvent): string | undefined { + const base = baseKeyOf(event); + if (!base) return undefined; + const modifiers = new Set(); + if (event.ctrlKey) modifiers.add("Control"); + if (event.altKey) modifiers.add("Alt"); + if (event.shiftKey) modifiers.add("Shift"); + if (event.metaKey) modifiers.add("Meta"); + return canonicalShortcut(modifiers, base); +} + +/** Whether a key press is the one a binding names. */ +export function shortcutMatches(shortcut: string, event: ShortcutKeyEvent): boolean { + const normalized = normalizeShortcut(shortcut); + if (!normalized) return false; + return normalized === parseShortcut(event); +} + +/** + * The action a binding would collide with, if any. + * + * The action's own current binding is not a collision — rebinding an action to + * what it already has changes nothing. + */ +export function findShortcutConflict( + bindings: ShortcutBindings, + actionId: ShortcutActionId, + shortcut: string, +): ShortcutActionId | undefined { + const target = normalizeShortcut(shortcut); + if (!target) return undefined; + for (const candidate of SHORTCUT_ACTION_IDS) { + if (candidate === actionId) continue; + const value = normalizeShortcut(bindings[candidate]); + if (value && value === target) return candidate; + } + return undefined; +} + +/** + * The bindings a stored value describes. + * + * A value that cannot be read, or a binding that cannot be one, falls back to + * the default for that action: a corrupt preference must not leave the + * composer without a way to send a message. + */ +export function parseShortcutBindings(raw: string | null | undefined): ShortcutBindings { + if (!raw) return DEFAULT_SHORTCUT_BINDINGS; + let parsed: unknown; + try { + parsed = JSON.parse(raw); + } catch { + return DEFAULT_SHORTCUT_BINDINGS; + } + if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return DEFAULT_SHORTCUT_BINDINGS; + const source = parsed as Record; + const next: Record = { ...DEFAULT_SHORTCUT_BINDINGS }; + for (const action of SHORTCUT_ACTION_IDS) { + const value = source[action]; + if (typeof value !== "string") continue; + const normalized = normalizeShortcut(value); + if (normalized) next[action] = normalized; + } + return next; +} + +/** The stored form of a set of bindings. */ +export function serializeShortcutBindings(bindings: ShortcutBindings): string { + const next: Record = {}; + for (const action of SHORTCUT_ACTION_IDS) + next[action] = normalizeShortcut(bindings[action]) ?? DEFAULT_SHORTCUT_BINDINGS[action]; + return JSON.stringify(next); +} + +/** How a binding is shown on the page. */ +export function shortcutDisplayLabel(shortcut: string): string { + const normalized = normalizeShortcut(shortcut); + if (!normalized) return "未设置"; + const parts = normalized.split("+"); + const base = parts.pop() ?? ""; + const modifiers = parts.map((part) => DISPLAY_MODIFIERS[part as ShortcutModifier] ?? part); + return [...modifiers, base].join(" + "); +} diff --git a/packages/webui/test/browser/settings-account-tab.spec.mjs b/packages/webui/test/browser/settings-account-tab.spec.mjs index 75f0b8135..8f8876ebc 100644 --- a/packages/webui/test/browser/settings-account-tab.spec.mjs +++ b/packages/webui/test/browser/settings-account-tab.spec.mjs @@ -115,13 +115,13 @@ test("the account tab is enabled where the unfinished tabs are still disabled", // The other half, and the reason the assertion above is not vacuous: the nav // really does still ship disabled items, so "enabled" is a fact about this // tab rather than a property of every button in the sidebar. A nav that - // silently enabled 语音/快捷键/连接 would pass the first two lines. + // silently enabled 语音/连接 would pass the first two lines. // - // 代码审查 and 工作树 left this list when their pages were built — they are - // real panels now, not empty panes behind a clickable label. The three that - // remain have no content behind them, which is what the `disabled` gate is - // still for. - for (const key of ["voice", "shortcuts", "connection"]) { + // 代码审查, 工作树 and 快捷键 left this list when their pages were built — + // they are real panels now, not empty panes behind a clickable label. The two + // that remain have no content behind them, which is what the `disabled` gate + // is still for. + for (const key of ["voice", "connection"]) { await expect(settingsNavItem(page, key)).toBeDisabled(); } // The app behind the modal is still mounted: the modal is a `document.body` diff --git a/packages/webui/test/browser/settings-shortcuts.spec.mjs b/packages/webui/test/browser/settings-shortcuts.spec.mjs new file mode 100644 index 000000000..b1009883a --- /dev/null +++ b/packages/webui/test/browser/settings-shortcuts.spec.mjs @@ -0,0 +1,241 @@ +// Settings › 快捷键 — the shortcuts page, driven the way a user drives it. +// +// The page's own promise is that a binding it shows is the binding the +// composer obeys, so the tests here follow one binding through the whole +// round trip: capture it on the page, see it survive a close and a reload, +// and then press the key in the composer and watch the message go — or +// watch it stay. +// +// The evidence is the built client and the in-page fixture transport: the +// fixture records what reached the wire, and the transcript is what the user +// sees afterwards. + +import { expect } from "@playwright/test"; + +import { emitStream, openApp, requestCount, test } from "./harness.mjs"; + +test.beforeEach(async ({ page }) => { + page.on("pageerror", (error) => console.error("BROWSER_PAGE_ERROR", error.stack ?? error.message)); + page.on("console", (message) => { if (message.type() === "error") console.error("BROWSER_CONSOLE_ERROR", message.text()); }); +}); + +function settingsDialog(page) { + return page.locator('[role="dialog"][aria-label="设置"]'); +} + +function settingsNavItem(page, key) { + return page.locator(`[data-menu-key="${key}"]`); +} + +/** Opens settings the way a user does: user menu, then 设置. */ +async function openSettings(page) { + await page.locator('[data-testid="sidebar-user-menu-trigger"]').click(); + await page.locator('[data-testid="user-menu-settings"]').click(); + await expect(settingsDialog(page)).toBeVisible(); +} + +/** Leaves the settings the way a user does: the 返回应用 button. */ +async function closeSettings(page) { + await page.locator('[aria-label="返回"]').click(); + await expect(settingsDialog(page)).toHaveCount(0); +} + +function composer(page) { + return page.getByPlaceholder("输入消息…(输入 / 唤起命令)"); +} + +/** The chip that shows an action's current binding, and captures a new one. */ +function shortcutKey(page, action) { + return page.locator(`[data-testid="mavis-settings-shortcut-${action}"]`); +} + +/** The stored bindings, as the browser holds them. */ +function storedShortcuts(page) { + return page.evaluate(() => localStorage.getItem("webui-shortcuts.v1")); +} + +/** Opens the shortcuts page. */ +async function openShortcuts(page) { + await settingsNavItem(page, "shortcuts").click(); + await expect(page.locator('[data-testid="settings-shortcuts-page"]')).toBeVisible(); +} + +/** Rebinds an action to a combination, the way the page captures one. */ +async function rebind(page, action, combination) { + await shortcutKey(page, action).click(); + await expect(shortcutKey(page, action)).toHaveText("按下组合键…"); + await page.keyboard.press(combination); +} + +/** The texts the client sent, as the fixture recorded them. */ +function sentContent(page) { + return page.evaluate(() => + window.__fixture.requests + .filter((request) => request.operation === "sendMessage") + .map((request) => request.body.content), + ); +} + +/** + * The server's echo of a submitted message. + * + * The client sends a message and the turn comes back on the stream; the + * transcript shows what the server echoed. Echoing it here is what puts the + * submitted text in the transcript the user reads. + */ +async function echoTurn(page, sessionId, text) { + await emitStream(page, sessionId, { + dataJson: JSON.stringify({ type: "agent_message", agent_message: { msg_id: `msg-user-${text}`, msg_content: text, role: "user" } }), + }); +} + +/** Ends the live turn, so the composer can take the next submission. */ +async function endTurn(page, sessionId) { + await emitStream(page, sessionId, { dataJson: "[DONE]" }); +} + +test("the shortcuts tab opens and lists the actions with their current bindings", async ({ page }) => { + await openApp(page, "#session=A"); + await openSettings(page); + await openShortcuts(page); + + // The tab is a real page now, not a label that leads nowhere. + await expect(page.locator('[data-testid="shortcuts-section"]')).toBeVisible(); + // And it is the only thing on the panel: the empty-page fallback that + // covers the tabs with no content behind them must not appear beside it. + await expect(page.locator('[aria-label="空设置面板"]')).toHaveCount(0); + await expect(shortcutKey(page, "submit")).toHaveText("Enter"); + await expect(shortcutKey(page, "newline")).toHaveText("Shift + Enter"); + // Stopping a generation is a button and nothing else, and the row says so + // rather than offering a binding that would fight the Escape the menus own. + await expect(shortcutKey(page, "stop")).toHaveText("仅按钮,无快捷键"); +}); + +test("a captured combination becomes the binding the page shows", async ({ page }) => { + await openApp(page, "#session=A"); + await openSettings(page); + await openShortcuts(page); + + await rebind(page, "submit", "Control+Enter"); + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + + // A combination that is already taken is refused, and the row that holds it + // is named. The capture stays open so the user can press another one; + // Escape leaves it, and the binding is the one it was. + await rebind(page, "newline", "Control+Enter"); + await expect(page.locator('[data-testid="mavis-settings-shortcut-error"]')).toContainText("发送消息"); + await page.keyboard.press("Escape"); + await expect(shortcutKey(page, "newline")).toHaveText("Shift + Enter"); + await expect(page.locator('[data-testid="mavis-settings-shortcut-error"]')).toHaveCount(0); +}); + +test("the binding survives closing the settings and coming back", async ({ page }) => { + await openApp(page, "#session=A"); + await openSettings(page); + await openShortcuts(page); + await rebind(page, "submit", "Control+Enter"); + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + + await closeSettings(page); + await openSettings(page); + await openShortcuts(page); + + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + // The page's own state would survive a close, so the stored value is what + // makes this a persistence claim rather than a rendering one. + expect(await storedShortcuts(page)).toContain("Control+Enter"); +}); + +test("the binding survives a reload", async ({ page }) => { + await openApp(page, "#session=A"); + await openSettings(page); + await openShortcuts(page); + await rebind(page, "submit", "Control+Enter"); + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + + await page.reload(); + await expect(page.locator("#webui-root")).toBeVisible(); + await openSettings(page); + await openShortcuts(page); + + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + expect(await storedShortcuts(page)).toContain("Control+Enter"); +}); + +test("the composer sends on the new binding and no longer on the old one", async ({ page }) => { + await openApp(page, "#session=A"); + const input = composer(page); + + // The control leg: under the built-in binding, Enter sends. Without it, the + // assertions below would pass against a composer that never sends at all. + await input.click(); + await input.pressSequentially("默认回车发送"); + await input.press("Enter"); + await expect.poll(() => sentContent(page)).toContain("默认回车发送"); + await echoTurn(page, "A", "默认回车发送"); + await expect(page.locator('[data-webui-transcript="A"]')).toContainText("默认回车发送"); + await endTurn(page, "A"); + + await openSettings(page); + await openShortcuts(page); + await rebind(page, "submit", "Control+Enter"); + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + await closeSettings(page); + + // The new binding sends: the text the user typed is what reached the wire, + // and the transcript shows the turn that carried it. + await input.click(); + await input.pressSequentially("新键发送"); + await input.press("Control+Enter"); + await expect.poll(() => sentContent(page)).toContain("新键发送"); + await expect(input).toHaveValue(""); + await echoTurn(page, "A", "新键发送"); + await expect(page.locator('[data-webui-transcript="A"]')).toContainText("新键发送"); + await endTurn(page, "A"); + + // The old one does not: the draft is still there, with the line break the + // browser breaks it with, and nothing was sent for it. + await input.click(); + await input.pressSequentially("旧键不发"); + await input.press("Enter"); + await expect(input).toHaveValue("旧键不发\n"); + expect(await sentContent(page)).not.toContain("旧键不发"); + await expect(page.locator('[data-webui-transcript="A"]')).not.toContainText("旧键不发"); +}); + +test("恢复默认 puts the built-in binding back and the composer follows it", async ({ page }) => { + await openApp(page, "#session=A"); + await openSettings(page); + await openShortcuts(page); + await rebind(page, "submit", "Control+Enter"); + await expect(shortcutKey(page, "submit")).toHaveText("Ctrl + Enter"); + + await page.locator('[data-testid="mavis-settings-shortcuts-reset"]').click(); + await expect(shortcutKey(page, "submit")).toHaveText("Enter"); + await closeSettings(page); + + // The behaviour followed the binding back: Enter sends again. + const input = composer(page); + await input.click(); + await input.pressSequentially("回退后发送"); + await input.press("Enter"); + await expect.poll(() => sentContent(page)).toContain("回退后发送"); + await echoTurn(page, "A", "回退后发送"); + await expect(page.locator('[data-webui-transcript="A"]')).toContainText("回退后发送"); +}); + +test("a newline bound to a key the browser does not break the line on breaks it anyway", async ({ page }) => { + await openApp(page, "#session=A"); + await openSettings(page); + await openShortcuts(page); + await rebind(page, "newline", "Control+J"); + await expect(shortcutKey(page, "newline")).toHaveText("Ctrl + J"); + await closeSettings(page); + + const input = composer(page); + await input.click(); + await input.pressSequentially("换行键"); + await input.press("Control+J"); + await expect(input).toHaveValue("换行键\n"); + await expect.poll(() => requestCount(page, "sendMessage")).toBe(0); +}); diff --git a/packages/webui/test/gates/fixtures/path-metadata-f00.json b/packages/webui/test/gates/fixtures/path-metadata-f00.json index dc40202c7..9cf1d6d54 100644 --- a/packages/webui/test/gates/fixtures/path-metadata-f00.json +++ b/packages/webui/test/gates/fixtures/path-metadata-f00.json @@ -1884,6 +1884,15 @@ "business": "settings", "home": "target" }, + { + "path": "client/features/settings/projection/settings-shortcuts.ts", + "layers": [ + "view" + ], + "role": "feature-projection", + "business": "settings", + "home": "target" + }, { "path": "client/features/settings/projection/settings-view.ts", "layers": [ @@ -1974,6 +1983,15 @@ "business": "settings", "home": "target" }, + { + "path": "client/features/settings/ui/ShortcutsSettings.tsx", + "layers": [ + "bindings" + ], + "role": "feature-ui", + "business": "settings", + "home": "target" + }, { "path": "client/features/settings/ui/UsageHeatmap.tsx", "layers": [ @@ -3189,6 +3207,15 @@ "business": null, "home": "current" }, + { + "path": "client/projection/common/shortcuts.ts", + "layers": [ + "view" + ], + "role": "projection-common", + "business": null, + "home": "current" + }, { "path": "client/projection/common/unread-badge.ts", "layers": [ diff --git a/packages/webui/test/unit/composer-intent.test.ts b/packages/webui/test/unit/composer-intent.test.ts index cf37e678c..8a7f90b91 100644 --- a/packages/webui/test/unit/composer-intent.test.ts +++ b/packages/webui/test/unit/composer-intent.test.ts @@ -2,10 +2,15 @@ import { describe, expect, it } from "vitest"; import { createElement } from "react"; import { deriveRecentWorkspaceDirs, - resolveWebuiComposerEnterAction, + resolveWebuiComposerShortcutAction, resolveWebuiSubmissionIntent, type WebuiSubmissionIntent, } from "../../src/client/features/composer/projection/composer-state.js"; +import { + DEFAULT_SHORTCUT_BINDINGS, + type ShortcutBindings, + type ShortcutKeyEvent, +} from "../../src/client/projection/common/shortcuts.js"; import { isTurnLive } from "../../src/client/features/turn/contracts/stream-state.js"; import type { SlashCommandEntry } from "../../src/client/features/composer/ui/slash-palette.js"; import { @@ -596,94 +601,90 @@ describe("deriveRecentWorkspaceDirs — the 最近 group in the workspace picker }); /** - * Enter-to-send in the composer textarea. + * What a key press in the composer does. * - * resolveWebuiComposerEnterAction(key, gates) → "submit" | "newline" + * resolveWebuiComposerShortcutAction(key, gates, bindings) + * → "submit" | "newline" | "ignore" * - * The taxonomy is two-valued on purpose: `newline` is the absence of an - * action, and the component reads it as "do not preventDefault", so the - * textarea keeps its own line break. Everything Enter could otherwise mean — - * accepting an open mention, accepting an open slash command — is claimed by - * earlier branches of the component's `onKeyDown`, which return before this - * resolver is consulted. + * The taxonomy is three-valued because the bindings are rebindable: `newline` + * is the action the user bound to breaking the line, `ignore` is the absence + * of a binding, and the component reads `ignore` as "do not preventDefault", so + * the textarea keeps its own behaviour for that key. Everything Enter could + * otherwise mean — accepting an open mention, accepting an open slash command + * — is claimed by earlier branches of the component's `onKeyDown`, which return + * before this resolver is consulted. * - * These tests pin the precedence the resolver documents: any modifier first, - * then an open IME composition, then the submit gate. The IME case is the one - * that is easy to regress silently and expensive when it does — a Chinese or - * Japanese candidate window is confirmed with Enter, and submitting on that - * keystroke would send a half-typed word. + * These tests pin the precedence the resolver documents: the composition + * first, then the configured bindings, then the submit gate. The IME case is + * the one that is easy to regress silently and expensive when it does — a + * Chinese or Japanese candidate window is confirmed with Enter, and + * submitting on that keystroke would send a half-typed word. */ -describe("resolveWebuiComposerEnterAction", () => { - const enter = { - shiftKey: false, - altKey: false, +describe("resolveWebuiComposerShortcutAction", () => { + const key = (overrides: Partial = {}): ShortcutKeyEvent => ({ + key: "Enter", + code: "Enter", ctrlKey: false, metaKey: false, - isComposing: false, - submitBlocked: false, - }; + altKey: false, + shiftKey: false, + ...overrides, + }); + const resolve = ( + event: ShortcutKeyEvent, + overrides: { readonly isComposing?: boolean; readonly submitBlocked?: boolean; readonly bindings?: ShortcutBindings } = {}, + ): string => + resolveWebuiComposerShortcutAction({ + event, + isComposing: overrides.isComposing ?? false, + submitBlocked: overrides.submitBlocked ?? false, + bindings: overrides.bindings ?? DEFAULT_SHORTCUT_BINDINGS, + }); it("submits on a bare Enter when the draft can be sent", () => { - expect(resolveWebuiComposerEnterAction(enter)).toBe("submit"); + expect(resolve(key())).toBe("submit"); + }); + + it("breaks the line on the newline binding", () => { + expect(resolve(key({ shiftKey: true }))).toBe("newline"); }); // Each modifier is checked on its own: a combined assertion would pass even - // if the implementation tested only one of them. - for (const modifier of ["shiftKey", "altKey", "ctrlKey", "metaKey"] as const) { - it(`keeps the newline for ${modifier}`, () => { - expect( - resolveWebuiComposerEnterAction({ ...enter, [modifier]: true }), - ).toBe("newline"); + // if the implementation tested only one of them. None of them is a binding + // under the default configuration, so the textarea keeps its own behaviour. + for (const modifier of ["altKey", "ctrlKey", "metaKey"] as const) { + it(`leaves ${modifier} + Enter to the browser`, () => { + expect(resolve(key({ [modifier]: true }))).toBe("ignore"); }); } - it("keeps the newline while an IME candidate window is open", () => { + it("leaves Enter alone while an IME candidate window is open", () => { // Submitting here would discard the candidate the user is still choosing. - expect(resolveWebuiComposerEnterAction({ ...enter, isComposing: true })).toBe( - "newline", - ); + expect(resolve(key(), { isComposing: true })).toBe("ignore"); }); it("does not submit when the send button is blocked", () => { // The component feeds its `submitBlocked` — the button's own `disabled` // condition — in, so the keyboard cannot open a path the button refuses. - expect( - resolveWebuiComposerEnterAction({ ...enter, submitBlocked: true }), - ).toBe("newline"); + expect(resolve(key(), { submitBlocked: true })).toBe("ignore"); }); - it("prefers composition over the submit gate and vice versa, both losing to modifiers", () => { - // Modifier is the outermost guard: Shift+Enter stays a newline even when - // a send is perfectly available. - expect( - resolveWebuiComposerEnterAction({ - ...enter, - shiftKey: true, - isComposing: false, - submitBlocked: false, - }), - ).toBe("newline"); + it("prefers composition over the submit gate and vice versa, both losing to a binding", () => { + // A binding is the outermost guard after the composition: the newline + // binding stands even when a send is perfectly available. + expect(resolve(key({ shiftKey: true }), { submitBlocked: false })).toBe("newline"); // With no modifier, composing still wins over an otherwise sendable draft. - expect( - resolveWebuiComposerEnterAction({ - ...enter, - shiftKey: false, - isComposing: true, - submitBlocked: false, - }), - ).toBe("newline"); + expect(resolve(key(), { isComposing: true, submitBlocked: false })).toBe("ignore"); }); - it("only submits when no modifier is held, nothing is composing, and the gate is open", () => { - expect( - resolveWebuiComposerEnterAction({ - shiftKey: false, - altKey: false, - ctrlKey: false, - metaKey: false, - isComposing: false, - submitBlocked: false, - }), - ).toBe("submit"); + it("follows the configured binding instead of the built-in one", () => { + const rebound: ShortcutBindings = { ...DEFAULT_SHORTCUT_BINDINGS, "composer.submit": "Control+Enter" }; + expect(resolve(key(), { bindings: rebound })).toBe("ignore"); + expect(resolve(key({ ctrlKey: true }), { bindings: rebound })).toBe("submit"); + }); + + it("follows a newline binding the browser does not break the line on", () => { + const rebound: ShortcutBindings = { ...DEFAULT_SHORTCUT_BINDINGS, "composer.newline": "Control+J" }; + expect(resolve(key({ key: "j", code: "KeyJ", ctrlKey: true }), { bindings: rebound })).toBe("newline"); }); }); diff --git a/packages/webui/test/unit/settings-modal.test.tsx b/packages/webui/test/unit/settings-modal.test.tsx index 19c1ed7cc..acbd4d566 100644 --- a/packages/webui/test/unit/settings-modal.test.tsx +++ b/packages/webui/test/unit/settings-modal.test.tsx @@ -136,13 +136,14 @@ it("leaves the implemented tabs clickable while the unimplemented tabs stay disa // A fully implemented panel must not carry the `disabled` gate the // not-yet-built panels still need. `account` (email row, sign-out button, // sign-out error region), `coding` (workspace review), `worktree` (parallel - // experiment branches) and `custom-instructions` (profile-wide AGENTS.md - // editor) are all built, so all four sit in the ungated group. The rest have - // no content behind them and clicking one would land on an empty pane. - for (const key of ["account", "coding", "worktree", "custom-instructions"]) { + // experiment branches), `custom-instructions` (profile-wide AGENTS.md + // editor) and `shortcuts` (the rebindable composer bindings) are all + // built, so all five sit in the ungated group. The rest have no content + // behind them and clicking one would land on an empty pane. + for (const key of ["account", "coding", "worktree", "custom-instructions", "shortcuts"]) { expect(DESKTOP_SETTINGS_TABS.find((tab) => tab.key === key)?.disabled).toBeUndefined(); } - for (const key of ["voice", "shortcuts", "connection"]) { + for (const key of ["voice", "connection"]) { expect(DESKTOP_SETTINGS_TABS.find((tab) => tab.key === key)?.disabled).toBe(true); } }); diff --git a/packages/webui/test/unit/settings-shortcuts.test.ts b/packages/webui/test/unit/settings-shortcuts.test.ts new file mode 100644 index 000000000..96202ded5 --- /dev/null +++ b/packages/webui/test/unit/settings-shortcuts.test.ts @@ -0,0 +1,189 @@ +import { describe, expect, it } from "vitest"; +import { + DEFAULT_SHORTCUT_BINDINGS, + findShortcutConflict, + normalizeShortcut, + parseShortcut, + parseShortcutBindings, + serializeShortcutBindings, + shortcutBaseKey, + shortcutDisplayLabel, + shortcutMatches, + type ShortcutKeyEvent, +} from "../../src/client/projection/common/shortcuts.js"; +import { + SHORTCUT_SETTINGS_ACTIONS, + shortcutActionTitle, + shortcutSettingsRows, +} from "../../src/client/features/settings/projection/settings-shortcuts.js"; + +/** A key press, with only what the notation reads. */ +const press = (overrides: Partial & { readonly key: string }): ShortcutKeyEvent => ({ + code: undefined, + ctrlKey: false, + metaKey: false, + altKey: false, + shiftKey: false, + ...overrides, +}); + +describe("shortcut notation", () => { + it("names a bare key by the key itself", () => { + expect(parseShortcut(press({ key: "Enter", code: "Enter" }))).toBe("Enter"); + expect(parseShortcut(press({ key: "F5", code: "F5" }))).toBe("F5"); + expect(parseShortcut(press({ key: " ", code: "Space" }))).toBe("Space"); + }); + + it("names a modified key by its modifiers and its base key", () => { + expect(parseShortcut(press({ key: "Enter", code: "Enter", shiftKey: true }))).toBe("Shift+Enter"); + expect(parseShortcut(press({ key: "Enter", code: "Enter", ctrlKey: true }))).toBe("Control+Enter"); + expect(parseShortcut(press({ key: "Enter", code: "Enter", metaKey: true }))).toBe("Meta+Enter"); + expect(parseShortcut(press({ key: "Enter", code: "Enter", altKey: true }))).toBe("Alt+Enter"); + expect(parseShortcut(press({ key: "Enter", code: "Enter", ctrlKey: true, shiftKey: true }))).toBe("Control+Shift+Enter"); + }); + + it("keeps a letter and the same letter with shift apart", () => { + expect(parseShortcut(press({ key: "a", code: "KeyA" }))).toBe("A"); + expect(parseShortcut(press({ key: "A", code: "KeyA", shiftKey: true }))).toBe("Shift+A"); + }); + + it("names no binding for a modifier pressed on its own", () => { + // A binding is a combination. Capturing `Shift` alone would leave the user + // with a shortcut that fires whenever they hold a key down. + expect(parseShortcut(press({ key: "Shift", code: "ShiftLeft", shiftKey: true }))).toBeUndefined(); + expect(parseShortcut(press({ key: "Control", code: "ControlLeft", ctrlKey: true }))).toBeUndefined(); + expect(parseShortcut(press({ key: "Alt", code: "AltLeft", altKey: true }))).toBeUndefined(); + expect(parseShortcut(press({ key: "Meta", code: "MetaLeft", metaKey: true }))).toBeUndefined(); + }); + + it("reads a written binding back the way the page and the composer agree on it", () => { + expect(normalizeShortcut("ctrl+enter")).toBe("Control+Enter"); + expect(normalizeShortcut("Shift + Enter")).toBe("Shift+Enter"); + expect(normalizeShortcut("cmd+enter")).toBe("Meta+Enter"); + expect(normalizeShortcut("Enter")).toBe("Enter"); + }); + + it("rejects a written binding that cannot be one", () => { + expect(normalizeShortcut("")).toBeUndefined(); + expect(normalizeShortcut("Shift")).toBeUndefined(); + expect(normalizeShortcut("Hyper+Enter")).toBeUndefined(); + }); +}); + +describe("shortcut matching", () => { + it("matches the exact combination and nothing else", () => { + const enter = press({ key: "Enter", code: "Enter" }); + expect(shortcutMatches("Enter", enter)).toBe(true); + expect(shortcutMatches("Control+Enter", enter)).toBe(false); + expect(shortcutMatches("Shift+Enter", press({ key: "Enter", code: "Enter", shiftKey: true }))).toBe(true); + expect(shortcutMatches("Enter", press({ key: "Enter", code: "Enter", shiftKey: true }))).toBe(false); + }); + + it("matches nothing against a binding that names nothing", () => { + expect(shortcutMatches("", press({ key: "Enter", code: "Enter" }))).toBe(false); + }); + + it("answers which key a binding is about", () => { + expect(shortcutBaseKey("Control+Enter")).toBe("Enter"); + expect(shortcutBaseKey("Control+J")).toBe("J"); + expect(shortcutBaseKey("")).toBeUndefined(); + }); +}); + +describe("shortcut conflicts", () => { + it("reports the action a binding would collide with", () => { + expect(findShortcutConflict(DEFAULT_SHORTCUT_BINDINGS, "composer.newline", "Enter")).toBe("composer.submit"); + expect(findShortcutConflict(DEFAULT_SHORTCUT_BINDINGS, "composer.submit", "Shift+Enter")).toBe("composer.newline"); + }); + + it("does not report a collision with the action's own binding", () => { + expect(findShortcutConflict(DEFAULT_SHORTCUT_BINDINGS, "composer.submit", "Enter")).toBeUndefined(); + }); + + it("does not report a collision with a combination nothing is bound to", () => { + expect(findShortcutConflict(DEFAULT_SHORTCUT_BINDINGS, "composer.submit", "Control+Enter")).toBeUndefined(); + }); + + it("does not report a collision for a binding that cannot be one", () => { + expect(findShortcutConflict(DEFAULT_SHORTCUT_BINDINGS, "composer.submit", "Shift")).toBeUndefined(); + }); +}); + +describe("stored shortcut bindings", () => { + it("reads the built-in bindings when nothing is stored", () => { + expect(parseShortcutBindings(null)).toEqual(DEFAULT_SHORTCUT_BINDINGS); + expect(parseShortcutBindings(undefined)).toEqual(DEFAULT_SHORTCUT_BINDINGS); + }); + + it("falls back to the built-in bindings when the stored value cannot be read", () => { + expect(parseShortcutBindings("not json")).toEqual(DEFAULT_SHORTCUT_BINDINGS); + expect(parseShortcutBindings("[]")).toEqual(DEFAULT_SHORTCUT_BINDINGS); + expect(parseShortcutBindings('"a string"')).toEqual(DEFAULT_SHORTCUT_BINDINGS); + }); + + it("keeps the default of an action whose stored binding cannot be one", () => { + // A corrupt preference must not leave the composer without a way to send. + expect(parseShortcutBindings('{"composer.submit":"Shift"}')).toEqual(DEFAULT_SHORTCUT_BINDINGS); + expect(parseShortcutBindings('{"composer.submit":42}')).toEqual(DEFAULT_SHORTCUT_BINDINGS); + }); + + it("reads the stored binding of an action and leaves the others alone", () => { + expect(parseShortcutBindings('{"composer.submit":"Control+Enter"}')).toEqual({ + "composer.submit": "Control+Enter", + "composer.newline": "Shift+Enter", + "composer.stop": "", + }); + }); + + it("ignores an action it does not know", () => { + expect(parseShortcutBindings('{"composer.teleport":"Control+Enter"}')).toEqual(DEFAULT_SHORTCUT_BINDINGS); + }); + + it("writes the bindings back in their canonical form", () => { + expect(serializeShortcutBindings({ ...DEFAULT_SHORTCUT_BINDINGS, "composer.submit": "ctrl+enter" })).toBe( + '{"composer.submit":"Control+Enter","composer.newline":"Shift+Enter","composer.stop":""}', + ); + expect(parseShortcutBindings(serializeShortcutBindings(DEFAULT_SHORTCUT_BINDINGS))).toEqual(DEFAULT_SHORTCUT_BINDINGS); + }); +}); + +describe("how a binding is shown", () => { + it("spells the modifiers the way the platform names them", () => { + expect(shortcutDisplayLabel("Enter")).toBe("Enter"); + expect(shortcutDisplayLabel("Control+Enter")).toBe("Ctrl + Enter"); + expect(shortcutDisplayLabel("Shift+Enter")).toBe("Shift + Enter"); + expect(shortcutDisplayLabel("Meta+Enter")).toBe("Cmd + Enter"); + expect(shortcutDisplayLabel("Alt+Enter")).toBe("Alt + Enter"); + }); + + it("says so when a binding names nothing", () => { + expect(shortcutDisplayLabel("")).toBe("未设置"); + }); +}); + +describe("the shortcuts page rows", () => { + it("lists the two composer actions and the action that has no binding", () => { + const rows = shortcutSettingsRows(DEFAULT_SHORTCUT_BINDINGS); + expect(rows.map((row) => row.actionId)).toEqual(["composer.submit", "composer.newline", "composer.stop"]); + expect(rows.map((row) => row.title)).toEqual(["发送消息", "换行", "停止生成"]); + expect(rows.map((row) => row.editable)).toEqual([true, true, false]); + }); + + it("shows the current binding of each action", () => { + const rows = shortcutSettingsRows({ ...DEFAULT_SHORTCUT_BINDINGS, "composer.submit": "Control+Enter" }); + expect(rows[0]?.label).toBe("Ctrl + Enter"); + expect(rows[1]?.label).toBe("Shift + Enter"); + expect(rows[2]?.label).toBe("未设置"); + }); + + it("says that stopping a generation is a button and nothing else", () => { + // `Escape` is already spoken for by the menus it closes, so the row says so + // rather than offering a binding that would fight them. + expect(SHORTCUT_SETTINGS_ACTIONS[2]?.note).toBe("仅按钮,无快捷键"); + }); + + it("names the action a collided binding belongs to", () => { + expect(shortcutActionTitle("composer.submit")).toBe("发送消息"); + expect(shortcutActionTitle("composer.newline")).toBe("换行"); + }); +}); diff --git a/release/public-source.json b/release/public-source.json index 7f3983478..40e0b2561 100644 --- a/release/public-source.json +++ b/release/public-source.json @@ -3571,6 +3571,7 @@ "packages/webui/docs/adr/0022-webui-workspace-panel-is-a-browser-tab-strip.md", "packages/webui/docs/adr/0023-webui-test-coverage-follows-user-workflows-and-evidence-levels.md", "packages/webui/docs/adr/0024-the-client-draws-the-workspace-boundary-for-a-diff-body.md", + "packages/webui/docs/adr/0026-the-composer-follows-the-bindings-the-settings-page-stores.md", "packages/webui/docs/adr/observation-architecture.md", "packages/webui/docs/agents/domain.md", "packages/webui/docs/agents/issue-tracker.md", @@ -3885,6 +3886,7 @@ "packages/webui/src/client/features/settings/application/settings-workflows.ts", "packages/webui/src/client/features/settings/contracts/memory-handoff.ts", "packages/webui/src/client/features/settings/contracts/settings-port.ts", + "packages/webui/src/client/features/settings/projection/settings-shortcuts.ts", "packages/webui/src/client/features/settings/projection/settings-view.ts", "packages/webui/src/client/features/settings/projection/usage-plan.ts", "packages/webui/src/client/features/settings/projection/usage-report.ts", @@ -3895,6 +3897,7 @@ "packages/webui/src/client/features/settings/ui/PersonalizationSettings.tsx", "packages/webui/src/client/features/settings/ui/SettingsModal.public.tsx", "packages/webui/src/client/features/settings/ui/SettingsModal.tsx", + "packages/webui/src/client/features/settings/ui/ShortcutsSettings.tsx", "packages/webui/src/client/features/settings/ui/UsageHeatmap.tsx", "packages/webui/src/client/features/settings/ui/UsageModelSettings.tsx", "packages/webui/src/client/features/settings/ui/UsageResetCards.tsx", @@ -4030,6 +4033,7 @@ "packages/webui/src/client/projection/common/overlay-geometry.ts", "packages/webui/src/client/projection/common/paths.ts", "packages/webui/src/client/projection/common/router.ts", + "packages/webui/src/client/projection/common/shortcuts.ts", "packages/webui/src/client/shell/ArchonPage.tsx", "packages/webui/src/client/shell/ArchonShell.tsx", "packages/webui/src/client/shell/ConnectionStatus.tsx", @@ -4231,6 +4235,7 @@ "packages/webui/test/browser/review-consumers.spec.mjs", "packages/webui/test/browser/server.mjs", "packages/webui/test/browser/settings-account-tab.spec.mjs", + "packages/webui/test/browser/settings-shortcuts.spec.mjs", "packages/webui/test/browser/settings-theme.spec.mjs", "packages/webui/test/browser/support/native-browser-host.ts", "packages/webui/test/browser/terminal-cross-page.spec.mjs", @@ -4378,6 +4383,7 @@ "packages/webui/test/unit/settings-layout.test.tsx", "packages/webui/test/unit/settings-modal.test.tsx", "packages/webui/test/unit/settings-mutation-ordering.test.ts", + "packages/webui/test/unit/settings-shortcuts.test.ts", "packages/webui/test/unit/settings-workflows.test.ts", "packages/webui/test/unit/shell-surface.test.ts", "packages/webui/test/unit/slash-classification.test.ts", diff --git a/test/vitest-suites.json b/test/vitest-suites.json index f75003d21..b338d53bd 100644 --- a/test/vitest-suites.json +++ b/test/vitest-suites.json @@ -343,6 +343,7 @@ "packages/webui/test/unit/session-transfer-route.test.ts", "packages/webui/test/unit/session-transfer.test.ts", "packages/webui/test/unit/settings-layout.test.tsx", + "packages/webui/test/unit/settings-shortcuts.test.ts", "packages/webui/test/unit/settings-modal.test.tsx", "packages/webui/test/unit/settings-workflows.test.ts", "packages/webui/test/unit/shell-surface.test.ts", From edcec43489575204ffc064018b1c1242501143fc Mon Sep 17 00:00:00 2001 From: stevenjj33 <75509501+stevenjj33@users.noreply.github.com> Date: Mon, 26 Oct 2026 23:29:08 +0800 Subject: [PATCH 2/3] fix(webui): allowlist the shortcut storage key name for the leak scanner The settings shortcut storage key reads like a credential to gitleaks' generic-api-key rule, so the release audit rejected this branch. It is a localStorage key name, not a secret, so allowlist it next to the other documented non-credentials. --- .gitleaks.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitleaks.toml b/.gitleaks.toml index b222e6bb7..e14d42375 100644 --- a/.gitleaks.toml +++ b/.gitleaks.toml @@ -19,6 +19,13 @@ paths = ['''(^|/)packages/(browser-extension/test/protocol\.test\.ts|webui/test/ regexTarget = "secret" regexes = ['''^00112233445566778899aabbccddeeff$'''] +[[rules.allowlists]] +description = "WebUI shortcut storage key name, not a credential" +condition = "AND" +paths = ['''(^|/)packages/webui/src/client/projection/common/shortcuts\.ts$'''] +regexTarget = "match" +regexes = ['''^SHORTCUT_STORAGE_KEY = "webui-shortcuts\.v1"$'''] + [[rules.allowlists]] description = "Documented keyboard shortcut" condition = "AND" From 9daf9cf866dcb51d1aaf00b9f4c9ac610f805a4e Mon Sep 17 00:00:00 2001 From: stevenjj33 <75509501+stevenjj33@users.noreply.github.com> Date: Tue, 27 Oct 2026 10:33:57 +0800 Subject: [PATCH 3/3] chore(webui): record the settings dialog's Linux baseline again The shortcuts tab is enabled now, so the settings dialog renders differently: its nav row is no longer greyed out. The baseline was recorded on the gate's Linux environment, the same way the other nine baselines in this folder were. --- .../settings-dialog-linux.png | Bin 103346 -> 103475 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/webui/test/browser/visual-baselines.spec.mjs-snapshots/settings-dialog-linux.png b/packages/webui/test/browser/visual-baselines.spec.mjs-snapshots/settings-dialog-linux.png index dd2d41d505c8f5477740205eec3bdb660de0004c..48c0e223fa133fe513b34e044ec5ad345be88ecc 100644 GIT binary patch literal 103475 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≧G)abSjR)7K%ZvhJErpr-Svs7G?z@Vj!Zi4FD{pX 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 MjhbAAjQQvP24h3y;{X5v literal 103346 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