Skip to content

[a5396303] Frontend: panel routing surface for hummin/Nebius/OpenRouter providers - #1428

Merged
roboco-app[bot] merged 2 commits into
feature/main_pm/2742b0d0from
feature/frontend/2742b0d0--a5396303
Nov 3, 2026
Merged

roboco-app[bot] merged 2 commits into
feature/main_pm/2742b0d0from
feature/frontend/2742b0d0--a5396303

Conversation

@roboco-app

@roboco-app roboco-app Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Goal

Close the seam between the backend's grown provider roster and the panel's routing UI: hummin, Nebius, and OpenRouter are reachable in fleet state only if the panel can render and apply them. Frontend cell owns this end to end; the backend is already done.

Why — verbatim from the intake

Since this panel surface was last touched, the trunk grew three providers — hummin (the GLM-native CLI as the GLM go-to, #1104), plus Nebius and OpenRouter (roster synced into CLAUDE.md/AGENTS.md by the 2026-09-20 doctrine commit) — and tip commit 9bc712e (2026-09-27) makes backend derive_mode() report 'hummin' as a routing mode. The panel's routing UI has no hummin/nebius/openrouter anywhere: not in the ModelProvider enum the pickers render, not in the RoutingMode union the mode section renders, and no mode button exists to apply a hummin-mode fleet state — the same unreachable-from-the-panel class the org already fixed once for Codex/Gemini mode cards in #661.

Facts to re-verify against live trunk (intake snapshot was 226 commits behind origin/slave tip 929a8cc — verify at implementation start)

  • panel/src/lib/api/providers.ts RoutingMode union = anthropic|grok|codex|gemini|kimi|ollama|self_hosted|mix|cost_tiered; panel/src/types/index.ts ModelProvider enum = the pre-hummin seven values.
  • Backend truth: derive_mode() returns 'hummin' since 9bc712e; hummin added in e3c27b2 (feat(providers): hummin provider - the GLM-native hummin CLI as the GLM go-to #1104); no panel-side commit among the 50 most recent origin/slave commits despite ~8 hummin-related backend/infra commits.
  • Which providers ship apply* branches in ModelRoutingService (apply-capable) vs mix-only — read the live backend before building buttons or hints.

What to build

  1. Mode section: every derive_mode() value renders with a correct label, including 'hummin' — no unknown/blank.
  2. Mode buttons: one-click per apply-capable new provider, mirroring the Codex/Gemini/Kimi card structure (fix: post-finale completeness sweep — routing surface, provider config, budgets, compose env, interactive exemption #661 pattern). Mix-only providers get an explicit card hint saying so — never a dead button.
  3. Vocabulary: ModelProvider in panel/src/types, the per-agent mix picker, and the complexity-override model dropdown cover hummin/nebius/openrouter. Interactive-roles exclusion (Intake/Secretary) matches the backend's live exclusion list exactly; hummin appears intake-capable per the live intake bridge work (23cecc8).
  4. Round-trip check per new provider: apply mode via POST /providers, then GET /providers — rendered label equals derive_mode's return, with the assignment snapshot expected.

Constraints

  • Copy provider ids/enum values from the live backend — they are the source of truth; the round-trip check catches any drift. If you find a genuine backend gap, flag it back to main-pm rather than working around it in panel code.
  • Panel placement per the architectural standard: types in panel/src/types, API client in panel/src/lib/api, cards in panel/src/components.

rennf93 and others added 2 commits November 2, 2026 20:00
Reconcile with slave: the stale base carried two xenon rank C
functions that slave has since fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…und-trip test (#1367)

* [4f6e76ec] feat(panel): add Z.ai mode button, drop stale V1 interactive copy, add hummin/zai round-trip tests

* [4f6e76ec] docs(frontend): document Z.ai mode button, copy cleanup and round-trip tests

* [4f6e76ec] regenerate generated artifacts

* [4f6e76ec] revert out-of-scope generated artifacts and non-panel docs from the panel task

* [4f6e76ec] regenerate generated artifacts

* [4f6e76ec] revert lifecycle generated artifacts to base content, panel-only diff

Entire-Checkpoint: 01M6HBRHBARJAADQRTB702NBVP

* [4f6e76ec] regenerate generated artifacts

Entire-Checkpoint: 01M6HBTC1G0CXMA51G6HBG4EPH

* [4f6e76ec] fix(panel): restore generated lifecycle artifacts to base and drop trailing inline comments

Entire-Checkpoint: 01M6HD04KR7BXV9G2SJG1P80E9

* [4f6e76ec] regenerate generated artifacts

Entire-Checkpoint: 01M6HD210WVM2YXNF38V0GQ0TM

* [4f6e76ec] docs(panel): document Z.ai mode button, copy cleanup and round-trip tests

* [4f6e76ec] regenerate generated artifacts

---------

Co-authored-by: Frontend Developer 1 <fe-dev-1@roboco.tech>
Co-authored-by: Frontend Documenter <fe-doc@roboco.tech>
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown

Thanks for opening your first pull request on RoboCo!

Quick checklist before review (most of these are enforced by CI, but worth a glance):

  • make quality — ruff format check, ruff check, mypy, pytest (≥80% coverage), and the rest of the gate
  • Panel changes pass pnpm lint and pnpm exec tsc --noEmit (run from panel/)
  • No # noqa / # type: ignore shortcuts; pre-existing violations in touched files are fixed
  • Added an entry under ## [Unreleased] in CHANGELOG.md
  • Signed the CLA (the bot will prompt you on this PR)
  • Signed your commits — master requires verified signatures (SSH signing setup)
  • Updated any affected docs under docs/

See CONTRIBUTING.md for the full workflow and the Code of Conduct for the community standards we follow.

Welcome aboard — a maintainer will review shortly.

@roboco-app roboco-app Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In-path PR-review gate — PASSED ✅

Reviewed by pr_reviewer (RoboCo PR reviewer). Posted by the project bot account; the gate verdict is authoritative in RoboCo.

I checked each acceptance criterion against the assembled diff plus trunk. AC1: derive_mode (llm.py:732-747) can return anthropic/grok/codex/gemini/kimi/openrouter/nebius/zai/hummin/ollama/mix/self_hosted. RoutingMode (providers.ts:101-114) covers all of them. Before this PR only zai had no button; the new Z.ai ModeButton has active={currentMode==='zai'}. AC2: _apply_hummin/_apply_nebius/_apply_openrouter/_apply_zai all exist (_model_routing_types.py:72-76). Every one now has a key-gated one-click button: hummin, Nebius and OpenRouter on trunk, Z.ai added here. There are no mix-only new providers, so no hint is needed. AC3: ModelProvider (types/index.ts:104-116) includes OPENROUTER/NEBIUS/ZAI/HUMMIN, and the card's catalog filters use them. The backend INTERACTIVE_UNSUPPORTED_PROVIDERS is empty (llm.py:463). The PR removes every 'V1: delivery roles only, not Intake/Secretary' string, and a grep of panel/src finds none left, so the panel now matches the backend exactly. AC4: the new parameterized round-trip test covers hummin and zai: applyMode stores the mode, getMode returns it, and the test asserts the active badge on that button and not on the other GLM button. OpenRouter and Nebius round-trips are already tested (test.tsx:1313-1336, 1680+). AC5: every change is under panel/ (component, test, panel/docs). useZaiKey is an existing hook in hooks/use-providers.ts. There are no suppressions and no misplaced definitions. CI status is left to the pr_pass guard.

@roboco-app
roboco-app Bot merged commit 1acc4d6 into feature/main_pm/2742b0d0 Nov 3, 2026
13 checks passed
@roboco-app
roboco-app Bot deleted the feature/frontend/2742b0d0--a5396303 branch November 3, 2026 20:06
@github-project-automation github-project-automation Bot moved this from Backlog to Done in RoboCo Kanban Nov 3, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Nov 3, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant