forked from molecule-ai/molecule-core
The shared <ProviderModelSelector> component was authored on disk but never landed — three deploy/configure surfaces still rendered the legacy free-text "MODEL slug" input + provider-radio list. Tasks #239 and #243 closed at "component exists" rather than "user-visible behavior changed", and the integration sat in a working-tree stash that was never committed. This PR is the missing integration: - canvas/src/components/ProviderModelSelector.tsx (new, 509 lines): single-source-of-truth Provider→Model cascade. Builds a catalog from `template.models[].required_env` (groups by sorted+joined env names so two MiniMax models with the same auth land in one provider), exposes vendor detection helper + back-derivation. No per-template hardcoding — fully driven by the upstream payload. - canvas/src/components/MissingKeysModal.tsx: replaces the inline `<input type="text">` + `<fieldset>` of provider radios with one `<ProviderModelSelector>`. Same external contract (`onKeysAdded(model)`), so callers in useTemplateDeploy don't move. - canvas/src/components/tabs/ConfigTab.tsx: replaces ad-hoc Model text input + Provider radio with the same selector, fixing the display-vs-storage drift class that #190 first patched. Tests ===== - ProviderModelSelector.test.tsx (new, 269 lines): cascade behavior, vendor auto-snap, back-derivation from saved config. - MissingKeysModal.cascade.test.tsx: rewritten to assert dropdown shape (was asserting the legacy text-input shape). - ConfigTab.hermes.test.tsx + ConfigTab.provider.test.tsx: updated for the new selector shape. - 1208/1208 canvas tests pass locally. User-visible fix: clicking any deploy/configure surface from the sidebar now shows the cascade UX (Provider dropdown first, Model dropdown filtered) instead of the legacy free-text MODEL slug. Closes the integration gap behind #239 + #243. Builds on merged runtime PRs #2538 (universal MODEL_PROVIDER) + #32 + #38 (per-vendor audit). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| e2e | ||
| public | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| components.json | ||
| Dockerfile | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| playwright.staging.config.ts | ||
| postcss.config.js | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vitest.config.ts | ||