feat(generate): optional OpenRouter pool R and the ox lanes - #47
Merged
Conversation
Pool R (OpenRouter) joins O/A as an optional third pool. Its presence in models.yml is the whole on/off switch: a full tiers-1..3 ladder generates two new lanes — ox-only (every role on the free pool) and ox-led (the free pool leads everything high-volume; plan/slow/designer/reviewer cross to Anthropic, and fable may still lead those) — while a half-declared ladder is refused and an absent one simply never surfaces a dial. A one-model family (Ox Alpha) declares the same id once per tier with ascending thinking ceilings, so the tier dial means thinking depth; the existing holed-scale clamps do the rest. genValid gates spark/fable/main per lane; comboID mirrors the clamps; repairConstraints enforces them on suggestions. TUI side: the lane dial carries the ox values and applyCatalog trims it to what the catalog serves (persisted selections on vanished lanes reset); prefixed() takes the provider from a new trailing __models__ pool column (name heuristic remains for old catalogs); modelRe matches provider-scoped ids; ox tokens and lanes read green; listW's cap yields to the wider lane row. Runtime selections now render in the same routing grammar as hosted profiles — every role the broker's profile routes, at the dialed thinking — with an honest free/local footer instead of meters.
This was referenced Aug 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Ox Alpha (
openrouter/stealth/ox-alpha) as the first member of an optional third pool,R(OpenRouter).Design
Rtiers-1..3 ladder inmodels.ymlgenerates two lanes —ox-only(every role on the free pool, advisor included) andox-led(the free pool leads default/task/utility/vision;plan/slow/designer/reviewercross to Anthropic;fablemay still lead those). NoRmodels → the lanes are never generated and the lane dial never offers them; a half-declared ladder is refused at load.low→low,low→high,low→max), so the tier dial means thinking depth. Existing holed-scale clamps (clampThrounds down) do the rest; validators accept the repetition unchanged.genValidgates spark/fable/main per lane;comboIDclamps identically so manual cycling can never land on a missing combo;repairConstraintsenforces the same rules onctrl+oproposals.__models__rows gain a trailingpoolcolumn;prefixed()uses it (R→openrouter/…) with the old name heuristic kept for catalogs that predate the column.modelRenow matches provider-scoped ids (stealth/ox-alpha:high, and localvendor/modelids too); ox tokens and lanes read green (#1f9d5b/#5fce96); rendered chains dedupe tokens that clamp to the sameid:level;listW's 80-cell cap yields to the wider lane row instead of clipping dial options.cost free · local inferencefooter line instead of meters. The broker boundary is untouched: acquisition, provisioning, and profile ownership stay with the runtime.Out of scope, deliberately
code generate initscaffolding of pool R (curated by hand;init --refreshrewrites wholesale and dropscost_in <= 0models).Verification
go vet,gofmt,go test), including new coverage: ladder all-or-nothing, lane gating, ox routing policy (structural, not golden), advisor ox context,modelRe/shortModel/prefixed/trimLanes.ox-onlyhides fast/spark/fable/main and routes every role toox-alphawith thinking-tier variation;ox-ledkeeps the free pool on high-volume roles with Claude on deliberative/advisor; ox tokens paint in the green family; frame bottom (usage footer + help rule) intact.code generateon an ox fixture: 127 combos, advisors table gains theoxcontext,__models__carries the pool column.Data (the
models.ymlentries) lands in atyrode/dotfiles after this ships and the pin bumps — today's pinned release rejects poolR.