mirror of
https://github.com/tiennm99/ccs.git
synced 2026-08-17 02:22:46 +00:00
fix(ui): surface Claude Opus 4.7 in Claude picker (#1184)
This commit is contained in:
@@ -628,10 +628,22 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
|
|||||||
displayName: 'Claude (Anthropic)',
|
displayName: 'Claude (Anthropic)',
|
||||||
defaultModel: 'claude-sonnet-4-6',
|
defaultModel: 'claude-sonnet-4-6',
|
||||||
models: [
|
models: [
|
||||||
|
{
|
||||||
|
id: 'claude-opus-4-7',
|
||||||
|
name: 'Claude Opus 4.7',
|
||||||
|
description: 'Latest flagship model',
|
||||||
|
extendedContext: true,
|
||||||
|
presetMapping: {
|
||||||
|
default: 'claude-opus-4-7',
|
||||||
|
opus: 'claude-opus-4-7',
|
||||||
|
sonnet: 'claude-sonnet-4-6',
|
||||||
|
haiku: 'claude-haiku-4-5-20251001',
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'claude-opus-4-6',
|
id: 'claude-opus-4-6',
|
||||||
name: 'Claude Opus 4.6',
|
name: 'Claude Opus 4.6',
|
||||||
description: 'Latest flagship model',
|
description: 'Previous flagship model',
|
||||||
extendedContext: true,
|
extendedContext: true,
|
||||||
presetMapping: {
|
presetMapping: {
|
||||||
default: 'claude-opus-4-6',
|
default: 'claude-opus-4-6',
|
||||||
|
|||||||
@@ -70,6 +70,24 @@ describe('FlexibleModelSelector', () => {
|
|||||||
expect(screen.queryByText(/All Models \(/i)).not.toBeInTheDocument();
|
expect(screen.queryByText(/All Models \(/i)).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('surfaces Claude Opus 4.7 in the curated Claude picker', async () => {
|
||||||
|
render(
|
||||||
|
<FlexibleModelSelector
|
||||||
|
label="Primary model"
|
||||||
|
value={undefined}
|
||||||
|
onChange={vi.fn()}
|
||||||
|
catalog={MODEL_CATALOGS.claude}
|
||||||
|
allModels={[]}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
await userEvent.click(screen.getByRole('button', { name: /select model/i }));
|
||||||
|
|
||||||
|
expect(screen.getByRole('option', { name: /claude-opus-4-7/i })).toBeInTheDocument();
|
||||||
|
expect(screen.getByRole('option', { name: /claude-opus-4-6/i })).toBeInTheDocument();
|
||||||
|
expect(screen.getByRole('option', { name: /claude-sonnet-4-6/i })).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
it('preserves a filtered legacy value under the current-value fallback group', async () => {
|
it('preserves a filtered legacy value under the current-value fallback group', async () => {
|
||||||
render(
|
render(
|
||||||
<FlexibleModelSelector
|
<FlexibleModelSelector
|
||||||
|
|||||||
@@ -16,10 +16,11 @@ describe('claude preset utils', () => {
|
|||||||
vi.restoreAllMocks();
|
vi.restoreAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('keeps the claude catalog default on Sonnet 4.6', () => {
|
it('keeps the claude catalog default on Sonnet 4.6 while exposing Opus 4.7', () => {
|
||||||
const claudeCatalog = MODEL_CATALOGS.claude;
|
const claudeCatalog = MODEL_CATALOGS.claude;
|
||||||
|
|
||||||
expect(claudeCatalog.defaultModel).toBe('claude-sonnet-4-6');
|
expect(claudeCatalog.defaultModel).toBe('claude-sonnet-4-6');
|
||||||
|
expect(claudeCatalog.models.map((model) => model.id)).toContain('claude-opus-4-7');
|
||||||
expect(claudeCatalog.models.map((model) => model.id)).toContain('claude-sonnet-4-6');
|
expect(claudeCatalog.models.map((model) => model.id)).toContain('claude-sonnet-4-6');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user