feat(web): choose the default agent preset from General settings

One settings row picking which preset new sessions are composed from.

It is deliberately a new-session preference, not a live switch: a session's
preset is fixed at creation and the host refuses to adopt an existing session
under a different one, so the row says "applies to sessions you start from now
on" rather than implying it can retune a running agent.

Options and the current value come from one `agentPreset.list` call — the
roster already reports which id an unspecified session gets, so the row needs
no settings-schema introspection, unlike the permission row it is modelled on.
The write targets only the namespace's `default` field.

The menu marks `user` rows: a locally authored preset is exactly as privileged
as the plugins it names, and presenting it identically to a shipped one would
hide that.

An empty roster reads as `unavailable` and renders nothing, because composing
no presets is a valid deployment rather than a failure — distinct from a
roster call that failed, which surfaces its message.
This commit is contained in:
Yichen Jiang
2026-08-04 00:25:19 +08:00
parent e6fe32b3c3
commit 6758da87ae
24 changed files with 760 additions and 0 deletions

33
pnpm-lock.yaml generated
View File

@@ -146,6 +146,9 @@ importers:
'@deepseek-ai/dsh-base':
specifier: workspace:^
version: link:../../packages/bundle/base
'@deepseek-ai/dsh-client-ui-agent-preset':
specifier: workspace:^
version: link:../../packages/client/ui-agent-preset
'@deepseek-ai/dsh-headless':
specifier: workspace:^
version: link:../../packages/bundle/headless
@@ -1432,6 +1435,36 @@ importers:
specifier: ^18.2.0
version: 18.3.1(react@18.3.1)
packages/client/ui-agent-preset:
devDependencies:
'@deepseek-ai/dsh-client-connection':
specifier: workspace:^
version: link:../connection
'@deepseek-ai/dsh-client-locale':
specifier: workspace:^
version: link:../locale
'@deepseek-ai/dsh-client-runtime':
specifier: workspace:^
version: link:../runtime
'@deepseek-ai/dsh-client-ui-primitives':
specifier: workspace:^
version: link:../ui-primitives
'@deepseek-ai/dsh-client-ui-slots':
specifier: workspace:^
version: link:../ui-slots
'@deepseek-ai/dsh-invariants':
specifier: workspace:^
version: link:../../support/invariants
'@types/react':
specifier: ~18.3.1
version: 18.3.31
cordis:
specifier: ^4.0.0-rc.7
version: link:../../../vendor/cordis
react:
specifier: ^18.2.0
version: 18.3.1
packages/client/ui-command:
dependencies:
clsx: