[Feature]: Provider onboarding: allow editing/adding model IDs, reachable custom mode, and persist a config.yaml template when the test fails
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 48/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
- Domain
- cli, developer-experience
Research direction
Start with packages/local-runtime-v2/src/service/model-system/catalog/provider-presets/provider-presets.service.ts and packages/tui/src/tui/features/provider/onboarding.ts, tracing preset transport resolution, model selection, saveInput(), and save(). Verify the interactive flow against the listed acceptance criteria, including failed-test persistence and a validated OpenRouter openai-completions fixture.
Written by the indexing model from the issue text.
Description
Product or interface
CLI - interactive TUI
Use case and problem
The interactive "add third-party provider" flow is too rigid for aggregators like OpenRouter, and a failed connectivity test discards everything instead of leaving an editable config template. Concretely:
-
OpenRouter is not offered at all. Presets come from models.dev via
packages/local-runtime-v2/src/service/model-system/catalog/provider-presets/provider-presets.service.ts, butresolveTransport()only recognizes@ai-sdk/openai,@ai-sdk/openai-compatible, and@ai-sdk/anthropic. models.dev lists OpenRouter as@openrouter/ai-sdk-provider, so the OpenRouter preset is silently dropped from the picker. -
Known-provider models are locked to the preset list; only the URL can be edited. In
packages/tui/src/tui/features/provider/onboarding.ts, the known-provider flow liststhis.template.models, andCtrl+Eedits only the Base URL.saveInput()for a template sendsmodels: this.template.modelsandmodelId: this.selectedModelId. So if a user picks the DeepSeek preset (base URLhttps://api.deepseek.com, model IDdeepseek-flash) and changes the URL to OpenRouter, they cannot change the model ID todeepseek/deepseek-v4.1-flash— the test fails, and there is no model-ID field to fix it. (The generic "Custom provider" entry does let you type a model ID, but it is a separate path and does not carry the preset's base URL/format.) -
A failed test saves nothing.
onboarding.tssave()reportsChanges were not saved. ...and returns; nocustom_providerentry is written toconfig.yaml. The only recovery is to quit and hand-edit~/.minimax/config.yaml.
Net effect: adding OpenRouter requires knowing the models.dev npm quirk, hand-editing YAML, and guessing the custom_provider shape.
Desired behavior
Make the interactive flow flexible enough that a known aggregator/provider can be configured without hand-editing YAML:
- Recognize aggregator presets. Accept
@openrouter/ai-sdk-provider(map it toopenai-completions), or more generally treat OpenAI-compatible providers as addable. - Editable model ID in the known-provider flow. Allow adding/editing a model ID (and optionally capability/limit fields) for a selected preset, not just choosing from
template.models. A good UX: keep the preset list, but offer "Add model ID..." / an editable field alongsideCtrl+E edit URL. - Reachable custom mode prefilled from a preset. Entering a model ID manually should be possible without abandoning the preset's base URL and API format.
- Persist on failure. When the connection test fails, still write the provider entry (or a clearly-marked draft/template) to
config.yamland point the user at it, instead of discarding all input. The pre-save docs already say unsaved changes remain in the UI as a draft; persisting a template would make that usable across restarts.
Acceptance criteria:
- Picking OpenRouter (or a provider whose models.dev
npmis unknown) is possible from the picker, or results in an editable custom entry rather than a dropped preset. - From a known-provider entry, a user can change both the Base URL and the model ID before testing.
- After a failed test, the provider appears as an editable entry in
config.yaml(or the UI explicitly offers "Save anyway as template"). - A validated example fixture covers an OpenRouter
openai-completionsprovider added through the interactive flow.
Platform
Multiple platforms
Alternatives and additional context
- Workaround today: hand-edit
~/.minimax/config.yamland add thecustom_providerentry directly. - Related: #215 (generic OpenRouter support), #288 (runtime support for
compat.openRouterRouting, which is the other half of OpenRouter support). mcode --version: 0.5.1.
- Dominant language
- TypeScript
- Stars
- 1.3k
- Forks
- 141
- Avg merge
- 2h 26m
- Merged PRs (30d)
- 65
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from MiniMax-AI/minimax-code
-
bug cli needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
MiniMax-AI/minimax-code#128 · 2 comments ·
-
bug desktop
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
MiniMax-AI/minimax-code#87 · 2 comments · 2 reactions ·
-
bug desktop needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
MiniMax-AI/minimax-code#80 ·
-
bug desktop needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
MiniMax-AI/minimax-code#66 ·
-
desktop enhancement needs-triage
Difficulty 3/5 1-2 days Newbie friendliness 58/100
MiniMax-AI/minimax-code#292 ·
All issues in MiniMax-AI/minimax-code
Similar issues
-
Browser Waiting for: Product Owner
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
getsentry/sentry-javascript#24577 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
agilepathway/label-checker#640 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
copse-dev/agent-pane#2953 ·
-
agentic-workflows
Difficulty 1/5 Under an hour Newbie friendliness 85/100
githubnext/rig#534 ·
-
automation missing-model model-sync provider:pioneer
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
anomalyco/models.dev#7701 ·