Model Switch v0.3.10
Release: v0.3.10 · stable · published 2026-08-27 · tag commit 7f4d07089fc5785ed519a931218446df29da2fd7
Highlights: Composer and Plan Review move into Model Switch
Model Switch 0.3.10 rolls the v0.3.0–v0.3.10 tag sequence into one release. It keeps Main/Subagent/Search/Image routing and adds ownership of the composer model seat and Plan Review execution picker.
Composer picker
- Replaces the standalone
dsh-composer-pickerpackage; keep only Model Switch installed so there is one composer model seat. - Groups provider catalog rows into Model / Effort / Context / Fast / Thinking dimensions while still submitting through official
session.selectModel. - Shows family name and distinct effort/Fast/context bits in the trigger.
- Preserves a routable current model even when it is absent from the advisory catalog.
- Renders and wraps triggers, headings, model names, catalog descriptions, and values instead of truncating them.
Plan Review
- Takes over the official
plan-reviewcomposer surface with a one-row footer: execution-model capsule plus Discuss / Keep planning / Approve. - Commits the selected execution model before sending approval.
- Keeps the footer usable on narrow screens by shrinking controls and wrapping labels inside buttons.
- Keeps composer/Plan picker failures mounted as localized, retryable diagnostics rather than silently falling back to another seat.
Mobile interaction fixes
- Gives the custom seat an unambiguous winning priority and declares its Sessions/model-directory service gate.
- Makes a mobile tap idempotent across pointer and synthetic-click delivery: first tap opens, second tap closes and stays closed.
- Preserves the preferred 320px menu width when the viewport permits, hides horizontal overflow, retains internal vertical scrolling, and keeps content readable.
- Extracts popup activation/positioning/dismissal into an internal surface module and consolidates each snapshot with its directory operations.
Behavior / technical boundary
- Optional mobile operations use Cordis typed public non-strict lookup; absence degrades gracefully.
- Picker state follows official directory status/routability, and unsupported/missing routes continue to fail explicitly without fallback.
Settings
- Retains the existing Default Main, Subagent, Search, and Image Settings cards.
- Refreshes the Settings nav glyph after shell redraws and aligns route cards with the shared LLM Providers chrome.
web_fetch, Vision/read_image, ordinary attachments, AgentPresets, and provider-specific image tools remain unchanged.- The Settings icon is still a label-matched DOM swap because rc.2 exposes no icon field.
- Plan Review uses priority
-7because rc.2 exposes no public Plan handoff seam; theexternal-agents.plan-review.continue-in-dshadapter remains for dual-install compatibility.
Install / upgrade / compatibility
DSH_HOME=~/.dsh dsh plugin --profile web add github:NOirBRight/dsh-model-switch#v0.3.10
DSH_HOME=~/.dsh dsh plugin --profile web add github:NOirBRight/dsh-llm-codex#v0.3.0
DSH_HOME=~/.dsh dsh plugin --profile web add github:NOirBRight/dsh-llm-grok#v0.3.0Remove a standalone dsh-composer-picker dependency, preserve the profile's fetchProvider, configure routes, and restart the profile. Requires Node 22.19+ and the DSH 0.1.1-rc.2 peer set.
Validation / package contents
The release includes compiled Host/client bundles, declarations, Cordis patch metadata, and product documentation. The tagged code adds picker-family, Plan transaction, popup dismissal, seat ownership, mobile pointer, style/geometry, routability, retry-boundary, and responsive-layout coverage. The existing declared package-consumer release gate is pnpm run check (build, Vitest, and reproducible pack verification).