Repository navigation
Aether 0.2.1
Aether now picks its own models, updates itself, and says hello properly. This is the stable release of the model-integration and onboarding work — updating from 0.2.0 is recommended.
Automatic model assignment
- No more dead models on a fresh install. Aether fetches the catalog, drops everything that can never answer a chat request, removes duplicates, probes what's left with per-provider throttling, and assigns a role only to a model that actually replied. On a brand-new data directory this replaces the previously hard-coded picks, which included providers with no credentials.
- It runs when it needs to, not on a schedule. Startup, a provider catalog change, the Re-check models now button in Settings, and the terminal-provider guard — which now repairs the broken role instead of just logging a warning.
- Your own choices are never overwritten. Roles record whether they were auto-assigned or picked by hand. A role you chose yourself is left alone in both directions, even when its model is dead, and is reported as
user-pinnedrather than silently replaced. - “Nothing connected” is a clear state, not a silent void. An empty catalog reports No models are connected — connect a provider in OmniRoute and writes nothing.
- One implementation, not two. The whole pipeline lives in
server/modelSweep.tsand runs fromserver/modelAssignments.ts; the operator CLI delegates to the same engine.
Agent task reliability
- Tool schemas are valid JSON Schema. The parameter builder emitted
type: "optional", which some providers reject outright — failing the entire request before the model ran. Optionality is now a separate flag from the type, and the registered tool surface is asserted provider-valid by test. - Verification runs the project's declared scripts. The verifier previously hardcoded
npm run build/npm test, so a workspace without a rootpackage.jsonfailed every task after correct work. It now runs only the scripts the project actually declares, and says so when there are none.
Desktop updates
- The auto-updater is live. It checks the release feed on boot after the window paints, exposes its full state to the UI, and installs only when you click.
AETHER_AUTO_UPDATE=0disables it for operators. - Settings → App updates shows the real state — not checked, available, downloading with progress, ready to install, up to date, or the failure — with the one action valid for each, plus a status-line chip that opens it.
- The installer carries its own release notes, and What's new announces them after an update, naming the version it replaced. Dismissing it is permanent for that version.
First-run setup
- The setup wizard is a real welcome. It is now a two-panel onboarding window with a brand rail (the app's own icon, the wordmark, and the four steps as a numbered list) and, on the first step, a proper hero with three highlight cards explaining what Aether is — models with zero config, your work in your own folder, agents rather than autocomplete.
- The layout adapts instead of collapsing. The mark scales fluidly with the window and the rail folds into a compact header on narrow windows, so the brand never shrinks to an unreadable speck.
Verification
- 222 unit tests passing, including new suites for the sweep engine, the assignment service, provider health, the update state machine, and the updater bridge contract.
- Model assignment validated end to end in a clean, independent data directory: 16/16 checks across six scenarios — a real gateway, a groq-only catalog, a gemini+mistral catalog, an empty catalog, a provider going terminal mid-session, and a user-pinned role — every assigned model confirmed by a real request, not just a liveness ping.
- Typecheck, Prettier, and the audit gate all clean.
Downloads
Aether-Setup-0.2.1.exe— 126.9 MB- SHA-256:
19b1ba03769479d717f1e7fbd829b7c62551773c476c9a32dadcbefb5558c994
- SHA-256:
Aether-Setup-latest.exe— the same bytes under a fixed name, so the website download link stays stable
Every release ships a .sha256 beside each installer, a .blockmap for delta updates, and latest.yml for the auto-update feed.