What happened
In Settings › 通用 (General) › 任务默认 › 默认模型 (Default model), switching
the default model shows a loading spinner on the picker trigger for the entire
duration of the save. The spinner is visually distracting, and while it spins
the trigger keeps showing the old model until setDefaultModel and the
connection refresh finish, then flips to the new one.
Expected: selecting a model reflects the choice immediately with no spinner —
the same quiet behavior as the adjacent 默认权限模式 (Default permission mode)
and 默认思考级别 (Default thinking level) selectors, which never spin.
How to reproduce
- Open Settings → 通用 (General).
- Under 任务默认, open the 默认模型 picker.
- Pick a model different from the current one.
- Observe the spinner on the trigger while the save is in flight (more
noticeable when the Runtime Host round-trip is slow); the label updates only
after the save resolves.
Environment
- Maka commit:
d2754b1ee (main), running from source
- OS: macOS 15.7.3 (Apple Silicon)
- Surface: Desktop
- Node.js: v24.14.0
Logs, screenshots, or additional context
No console errors. The spinner appears on the 默认模型 trigger immediately after
a selection and persists until the save resolves.
Likely root cause: ModelPicker (packages/ui/src/model-picker.tsx) drives
the Astryx Selector through its async changeAction prop. On that path the
Selector wraps the caller's save in a transition and keeps the trigger
aria-busy (rendering a <Spinner>) as long as its optimistic value differs
from the controlled value — i.e. for the whole setDefaultModel +
connection-refresh round-trip. The sibling permission-mode / thinking-level
selectors use the synchronous onChange path and therefore never spin.
I have a fix ready and will open a PR referencing this issue.
What happened
In Settings › 通用 (General) › 任务默认 › 默认模型 (Default model), switching
the default model shows a loading spinner on the picker trigger for the entire
duration of the save. The spinner is visually distracting, and while it spins
the trigger keeps showing the old model until
setDefaultModeland theconnection refresh finish, then flips to the new one.
Expected: selecting a model reflects the choice immediately with no spinner —
the same quiet behavior as the adjacent 默认权限模式 (Default permission mode)
and 默认思考级别 (Default thinking level) selectors, which never spin.
How to reproduce
noticeable when the Runtime Host round-trip is slow); the label updates only
after the save resolves.
Environment
d2754b1ee(main), running from sourceLogs, screenshots, or additional context
No console errors. The spinner appears on the 默认模型 trigger immediately after
a selection and persists until the save resolves.
Likely root cause:
ModelPicker(packages/ui/src/model-picker.tsx) drivesthe Astryx
Selectorthrough its asyncchangeActionprop. On that path theSelector wraps the caller's save in a transition and keeps the trigger
aria-busy(rendering a<Spinner>) as long as its optimistic value differsfrom the controlled
value— i.e. for the wholesetDefaultModel+connection-refresh round-trip. The sibling permission-mode / thinking-level
selectors use the synchronous
onChangepath and therefore never spin.I have a fix ready and will open a PR referencing this issue.