Skip to content

feat(desktop): surface model routing lanes - #67683

Open
joelbrilliant wants to merge 2 commits into
NousResearch:mainfrom
joelbrilliant:feat/desktop-provider-lanes
Open

feat(desktop): surface model routing lanes#67683
joelbrilliant wants to merge 2 commits into
NousResearch:mainfrom
joelbrilliant:feat/desktop-provider-lanes

Conversation

@joelbrilliant

Copy link
Copy Markdown
Contributor

Summary

  • add a read-only Model routing overview to Desktop model settings
  • show the resolved provider and model for main chat and every supported helper lane
  • distinguish primary, dedicated, and inherited routes at a glance
  • share one lane list between the overview, deep links, and the existing auxiliary editor
  • expose the backend-supported triage specifier, Kanban decomposer, and profile describer lanes in Desktop

Why

Hermes can route helper work through providers and models that differ from the main chat. The existing editor shows each assignment one row at a time, but automatic routes do not reveal the provider and model they currently resolve to.

This adds a compact configured-stack view similar to the operator visibility used in agents.brill. It makes hidden provider routing visible without changing any runtime selection or persistence contract.

Scope

The overview consumes the existing global model and auxiliary model responses. It adds no gateway method, config write, background task schema, session metadata, or model picker behaviour.

The shared list matches the current backend auxiliary slots. Plugin-defined tasks and helper types that are not returned by the Desktop auxiliary endpoint remain out of scope.

Existing PR overlap

This PR does not touch those surfaces. It adds a read-only routing overview to model settings.

Verification

  • focused routing and model settings tests passed, 19 tests
  • full settings test surface passed, 171 tests
  • Desktop typecheck passed
  • changed-file ESLint and Prettier checks passed
  • production Desktop build passed
  • Git whitespace check passed
  • browser verification passed at desktop and 393 px
  • all 12 routes rendered with no horizontal overflow

The full Desktop run passed 2,079 tests and skipped 2. One unrelated order-dependent ToolsetConfigPanel test failed. This PR does not touch that file, and the complete 25-test file passes in isolation.

@alt-glitch alt-glitch added type/feature New feature or request comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have labels Jul 19, 2026
@joelbrilliant
joelbrilliant marked this pull request as ready for review July 19, 2026 21:09
- ModelSettingsSkeleton: add a skeleton section for the model routing
  overview so the loading state mirrors the loaded layout (one row per
  lane, AUX_MODEL_TASK_KEYS.length + 1) instead of omitting the section
- model-routing-overview.test: derive the expected lane count from
  AUX_MODEL_TASK_KEYS.length + 1 rather than a hardcoded 12, so the
  assertion tracks the task-key source of truth

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@joelbrilliant

Copy link
Copy Markdown
Contributor Author

Pushed ccdb51d, two mechanical follow-ups from an internal review:

  • model-routing-overview.test.tsx no longer freezes the lane count at 12; it now asserts AUX_MODEL_TASK_KEYS.length + 1 against the exported const, so the test tracks the task-key source of truth instead of breaking on the next lane addition. The other count in the file (two Dedicated pills) is fixture-driven, not an enumeration count, so it stays literal.
  • ModelSettingsSkeleton now mirrors the routing overview section with one placeholder row per lane (derived from the same const), so the loading state keeps the page shape instead of popping the routing list in once the catalog loads, per the skeleton's own contract comment.

Evidence: settings suite 171/171, desktop typecheck, eslint and the full desktop build clean. Diff is 2 files, +21/-2.

@teknium1

Copy link
Copy Markdown
Contributor

Thanks for the focused Desktop visibility improvement. The current-main premise is verified: hermes_cli/web_server.py:6666-6677 exposes 11 canonical auxiliary slots, while apps/desktop/src/app/settings/model-settings.tsx:115-124 and :882 still render only the older eight-slot list. The PR's shared AUX_MODEL_TASK_KEYS list covers the backend set and is used by the overview, editor, deep-link validation, and loading skeleton.

The overview consumes the existing /api/model/info and /api/model/auxiliary responses; the latter already returns both the configured main route and every auxiliary assignment at hermes_cli/web_server.py:6803-6846. No new runtime routing, persistence, API, or core-tool surface is introduced. The PR's final commit also replaces the lane-count snapshot with a source-derived assertion.

Automated hermes-sweeper review.

@teknium1 teknium1 added the sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users label Jul 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants