Self-updating model lanes + family latest-model check (Opus 4.8 / Sonnet)#1
Merged
Merged
Conversation
….8 / Sonnet Stop shipping hard-coded, stale model ids. Models now self-update via <family>@latest and a session-start check flags any lane behind the newest priced model in its family — across ALL lane kinds, not just API. Core - prices.seed.json (×3): add claude-opus-4-8 ($5/$25, new frontier) and claude-sonnet-4-6 ($3/$15); keep older entries priced for back-compat. - registry.ts: allow <family>@latest on any lane kind (was API-only); still reject a malformed bare "@latest". - node.ts: makeCliExecutor substitutes a {model} placeholder in args with the resolved lane.model, so CLI lanes spawn the current model without a stale pin. - model-freshness.ts: add staleAgainstPriceTable() — pure, egress-free, all-lane-kinds "are the latest models in use?" check (family from @latest stem / model_family / price-table metadata; never guessed). MCP - summary-deps.ts: resolve @latest for display and merge the price-table staleness check into the session-start banner (covers the CLI Claude lanes the API-only live check never saw). - host-review.ts: resolve @latest (and drop unresolved aliases) on the review/Stop-gate path too — mirrors routing so a manager on an alias can never spawn `claude --model <family>@latest`. (Codex-found regression.) - lane-setup.ts/setup.ts + setup SKILL: surface each lane's billing and ASK subscription-vs-metered for every API lane — `api` is not assumed metered. Config - claude-native -> claude-opus@latest; claude-haiku/claude-sonnet -> @latest with `--model {model}`. Sonnet ships full-access via Claude Code (CLI subscription) as the default; an Anthropic API lane is a blocked opt-in. - minimax-api: costBasis subscription (flat-rate token), not metered. Tests: +unit coverage for staleAgainstPriceTable, {model} substitution, and @latest on cli/native lanes. 501/501 pass; typecheck clean; bundles rebuilt. Codex hard-reviewed: all findings addressed and re-verified. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Why
TokenMaxed was shipping stale, hard-coded model ids (Claude pinned to
claude-opus-4-7; price table had noclaude-opus-4-8/claude-sonnet-4-6), and CLI lanes were forced to hard-pin (@latestwas API-only) with no freshness signal at all.What
<family>@latestand self-update. CLI lanes pass--model {model}(resolved at spawn).@latestallowed on every lane kind (was API-only).staleAgainstPriceTable()(pure, egress-free, all lane kinds) flags any lane behind the newest priced model in its family; surfaced in the banner. Self-updating@latestlanes never false-flag.claude-opus-4-8(frontier, $5/$25) +claude-sonnet-4-6($3/$15); older entries kept priced.blockedopt-in template.api≠metered. MiniMax =costBasis: subscription;/tokenmaxed:setupnow asks subscription-vs-metered for every API lane and never assumes./tokenmaxed:review+ Stop gate now resolve@latestlike routing, so a manager on an alias can never spawnclaude --model <family>@latest.Verification
🤖 Generated with Claude Code