From 0ab035c748af10163a2a24186967fed2be490e39 Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Fri, 7 Aug 2026 03:00:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20name=20the=20preset=20in=20General?= =?UTF-8?q?=20settings,=20and=20say=20=E9=A2=84=E8=AE=BE=20in=20Chinese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The preference row rendered `option.id` while every other surface — the new-session chip, the session header label, the preset cards — renders the metadata name. So the same roster read `标准模式` on one screen and `standard` on the next, and the id is addressing, not a label. A preset that names itself nothing still falls back to its id, which is then all there is to say about it. The row's Chinese copy also still ended on the English word: the section is `Agent 预设`, so the sentence about a running session keeping its composition says 预设 too. --- .../snapshots/settings-chrome/dialog.expected.md | 6 +++--- .../ui-agent-preset/src/client/AgentPresetRow.tsx | 11 +++++++++-- packages/client/ui-agent-preset/src/client/locales.ts | 2 +- .../client/ui-agent-preset/tests/components.spec.tsx | 8 +++++--- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/apps/web/tests/snapshots/settings-chrome/dialog.expected.md b/apps/web/tests/snapshots/settings-chrome/dialog.expected.md index aa69a337cb..cf87f5acbd 100644 --- a/apps/web/tests/snapshots/settings-chrome/dialog.expected.md +++ b/apps/web/tests/snapshots/settings-chrome/dialog.expected.md @@ -14,9 +14,9 @@ - button "关闭": - img - text: 关闭 - - text: Agent 预设 对此后新建的会话生效。运行中的会话保持它开始时的 preset。 - - button "standard": - - text: standard + - text: Agent 预设 对此后新建的会话生效。运行中的会话保持它开始时的预设。 + - button "标准模式": + - text: 标准模式 - img - text: 权限 选择新会话的默认权限模式 - button "Workspace Write": diff --git a/packages/client/ui-agent-preset/src/client/AgentPresetRow.tsx b/packages/client/ui-agent-preset/src/client/AgentPresetRow.tsx index 492f593134..178c2a6ada 100644 --- a/packages/client/ui-agent-preset/src/client/AgentPresetRow.tsx +++ b/packages/client/ui-agent-preset/src/client/AgentPresetRow.tsx @@ -52,7 +52,12 @@ export function AgentPresetRow({ load, select, useAgentPreset, t }: AgentPresetR // every session shares the host composition — the row simply does not exist. if (state.status === 'unavailable') return null const busy = state.status === 'loading' || state.status === 'saving' - const label = state.currentValue === '' ? t('loading') : state.currentValue + // The metadata name is what every other surface shows — the new-session chip, + // the session header, the preset cards — so this row shows it too; the id is + // the addressing, not the label. A preset that names itself nothing falls + // back to its id, which is then all there is to say about it. + const chosen = state.options.find(option => option.id === state.currentValue) + const label = state.currentValue === '' ? t('loading') : (chosen?.name ?? state.currentValue) const description: string = state.error ?? t('description') return ( @@ -69,7 +74,9 @@ export function AgentPresetRow({ load, select, useAgentPreset, t }: AgentPresetR // every preset as shipped and vetted. items={state.options.map(option => ({ id: option.id, - label: option.trust === 'user' ? `${option.id} · ${t('userTrust')}` : option.id, + label: option.trust === 'user' + ? `${option.name ?? option.id} · ${t('userTrust')}` + : option.name ?? option.id, }))} selectedId={state.currentValue} onSelect={(id) => { diff --git a/packages/client/ui-agent-preset/src/client/locales.ts b/packages/client/ui-agent-preset/src/client/locales.ts index 1b4d940e44..e3aab04f84 100644 --- a/packages/client/ui-agent-preset/src/client/locales.ts +++ b/packages/client/ui-agent-preset/src/client/locales.ts @@ -64,7 +64,7 @@ export const en: Record = { /** Simplified Chinese copy. */ export const zh: Record = { title: 'Agent 预设', - description: '对此后新建的会话生效。运行中的会话保持它开始时的 preset。', + description: '对此后新建的会话生效。运行中的会话保持它开始时的预设。', loading: '正在加载预设…', error: '无法加载 Agent 预设。', userTrust: '自定义', diff --git a/packages/client/ui-agent-preset/tests/components.spec.tsx b/packages/client/ui-agent-preset/tests/components.spec.tsx index eff1e047e9..c0d1bf45b1 100644 --- a/packages/client/ui-agent-preset/tests/components.spec.tsx +++ b/packages/client/ui-agent-preset/tests/components.spec.tsx @@ -28,7 +28,9 @@ const ROW_READY: AgentPresetSettingsState = { error: null, writable: true, currentValue: 'standard', - options: [{ id: 'standard', trust: 'system' }, { id: 'mine', trust: 'user' }], + // `mine` deliberately names itself nothing: the row must fall back to the + // id for a preset whose author wrote no metadata. + options: [{ id: 'standard', trust: 'system', name: '标准模式' }, { id: 'mine', trust: 'user' }], } const SEAT_READY: AgentPresetSeatState = { @@ -88,7 +90,7 @@ describe('the General-settings row', () => { const actions = renderRow() await waitFor(() => { expect(actions.load).toHaveBeenCalledTimes(1) }) - expect(screen.getByRole('button').textContent).toContain('standard') + expect(screen.getByRole('button').textContent).toContain('标准模式') }) it('marks a locally authored option as local', () => { @@ -100,7 +102,7 @@ describe('the General-settings row', () => { // list says which rows are local rather than presenting all as vetted. expect(screen.getByText(`mine · ${en.userTrust}`)).toBeTruthy() // The shipped one carries no marker; only local rows are called out. - expect(screen.getAllByText('standard')).toHaveLength(2) + expect(screen.getAllByText('标准模式')).toHaveLength(2) }) it('writes the picked preset and closes the menu', () => {