Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
6804970
[core,cli] ✨ feat: implement models.dev integration with registry and…
sogoiii Jan 12, 2026
9b075a2
[core,cli] ✅ test: fix unused variable lint errors in test files
sogoiii Jan 12, 2026
4ca44cd
[cli] feat: integrate models.dev support with provider aliases and in…
sogoiii Jan 12, 2026
7fa8ef5
[cli] ✨ feat: replace /model command with models.dev registry dialog
sogoiii Jan 12, 2026
f0cd731
[core,cli] 🐛 fix: correct model property access and filtering in mode…
sogoiii Jan 13, 2026
5de1dad
[core] ✨ feat: implement unified model hydration with models.dev regi…
sogoiii Jan 13, 2026
a7f5dd1
[core,cli] 🔧 refactor: remove provider-level models.dev registry inte…
sogoiii Jan 13, 2026
49822c5
[cli] ✨ feat: auto-switch provider when selecting model from differen…
sogoiii Jan 14, 2026
2d07033
Merge main into feat/models-dev-integration
sogoiii Jan 14, 2026
63ade44
fix: remove duplicate Config import in DialogManager
sogoiii Jan 14, 2026
04358dd
[core,cli] 🐛 fix: address 14 PR review issues from models.dev integra…
sogoiii Jan 14, 2026
8a1c6ca
[core,cli] 💚 fix: revert barrel imports to direct imports and allow g…
sogoiii Jan 14, 2026
2976aed
[core] 🗑️ chore: remove fallback-models.json generation and usage
sogoiii Jan 14, 2026
4e624a0
[core,cli] 🐛 fix: address PR review issues - HydratedModel types and …
sogoiii Jan 14, 2026
5271dcf
[core,cli] 🚚 refactor: rename Models* to Model* for singular consistency
sogoiii Jan 14, 2026
f7402f2
[core] 🏗️ refactor: unify provider ID lookup fallback behavior
sogoiii Jan 14, 2026
bf18cf0
[core] 🩹 fix: correct comment and remove hardcoded tool formats
sogoiii Jan 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ export default tseslint.config(
'memfs/lib/volume.js',
'yargs/**',
'@anthropic-ai/sdk/**',
'**/generated/**',
],
},
],
Expand Down
9 changes: 9 additions & 0 deletions packages/cli/src/providers/aliases/anthropic.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "anthropic",
"modelsDevProviderId": "anthropic",
"description": "Anthropic Claude API",
"baseProvider": "anthropic",
"baseUrl": "https://api.anthropic.com/v1",
"defaultModel": "claude-sonnet-4-20250514",
"apiKeyEnv": "ANTHROPIC_API_KEY"
}
4 changes: 3 additions & 1 deletion packages/cli/src/providers/aliases/cerebras-code.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"name": "Cerebras Code",
"modelsDevProviderId": "cerebras",
"baseProvider": "openai",
"baseUrl": "https://api.cerebras.ai/v1/",
"defaultModel": "qwen-3-coder-480b",
"description": "Cerebras Code compatibility profile"
"description": "Cerebras Code compatibility profile",
"apiKeyEnv": "CEREBRAS_API_KEY"
}
6 changes: 4 additions & 2 deletions packages/cli/src/providers/aliases/chutes-ai.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"name": "Chutes.ai",
"modelsDevProviderId": "chutes",
"baseProvider": "openai",
"baseUrl": "https://llm.chutes.ai/v1/",
"baseUrl": "https://llm.chutes.ai/v1",
"defaultModel": "zai-org/GLM-4.5-Air",
"description": "Chutes.ai compatibility profile"
"description": "Chutes.ai compatibility profile",
"apiKeyEnv": "CHUTES_API_KEY"
}
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/codex.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "codex",
"modelsDevProviderId": "openai",
"baseProvider": "openai-responses",
"baseUrl": "https://chatgpt.com/backend-api/codex",
"defaultModel": "gpt-5.2",
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/providers/aliases/fireworks.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"name": "Fireworks",
"modelsDevProviderId": "fireworks-ai",
"baseProvider": "openai",
"baseUrl": "https://api.fireworks.ai/inference/v1/",
"defaultModel": "accounts/fireworks/models/llama-v3p3-70b-instruct",
"description": "Fireworks AI compatibility profile"
"description": "Fireworks AI compatibility profile",
"apiKeyEnv": "FIREWORKS_API_KEY"
}
9 changes: 9 additions & 0 deletions packages/cli/src/providers/aliases/gemini.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "gemini",
"modelsDevProviderId": "google",
"description": "Google Gemini API",
"baseProvider": "gemini",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
"defaultModel": "gemini-2.0-flash",
"apiKeyEnv": "GEMINI_API_KEY"
}
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/kimi.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "kimi",
"modelsDevProviderId": "kimi-for-coding",
"baseProvider": "openai",
"baseUrl": "https://api.kimi.com/coding/v1",
"defaultModel": "kimi-for-coding",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/llama-cpp.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "llama.cpp",
"modelsDevProviderId": "llama",
"baseProvider": "openai",
"baseUrl": "http://localhost:8080/v1/",
"defaultModel": "local-model",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/lm-studio.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "LM Studio",
"modelsDevProviderId": "lmstudio",
"baseProvider": "openai",
"baseUrl": "http://127.0.0.1:1234/v1/",
"defaultModel": "gemma-3b-it",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/mistral.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "mistral",
"modelsDevProviderId": "mistral",
"baseProvider": "openai",
"baseUrl": "https://api.mistral.ai/v1",
"defaultModel": "mistral-large-latest",
Expand Down
9 changes: 9 additions & 0 deletions packages/cli/src/providers/aliases/openai-responses.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "openai-responses",
"modelsDevProviderId": "openai",
"description": "OpenAI Responses API",
"baseProvider": "openai-responses",
"baseUrl": "https://api.openai.com/v1",
"defaultModel": "gpt-4o",
"apiKeyEnv": "OPENAI_API_KEY"
}
9 changes: 9 additions & 0 deletions packages/cli/src/providers/aliases/openai-vercel.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "openai-vercel",
"modelsDevProviderId": "openai",
"description": "OpenAI via Vercel AI SDK",
"baseProvider": "openai-vercel",
"baseUrl": "https://api.openai.com/v1",
"defaultModel": "gpt-4o",
"apiKeyEnv": "OPENAI_API_KEY"
}
9 changes: 9 additions & 0 deletions packages/cli/src/providers/aliases/openai.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "openai",
"modelsDevProviderId": "openai",
"description": "OpenAI API",
"baseProvider": "openai",
"baseUrl": "https://api.openai.com/v1",
"defaultModel": "gpt-4o",
"apiKeyEnv": "OPENAI_API_KEY"
}
4 changes: 3 additions & 1 deletion packages/cli/src/providers/aliases/openrouter.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"name": "OpenRouter",
"modelsDevProviderId": "openrouter",
"baseProvider": "openai",
"baseUrl": "https://openrouter.ai/api/v1/",
"defaultModel": "nvidia/nemotron-nano-9b-v2:free",
"description": "OpenRouter compatibility profile"
"description": "OpenRouter compatibility profile",
"apiKeyEnv": "OPENROUTER_API_KEY"
}
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/qwen.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "qwen",
"modelsDevProviderId": "alibaba",
"baseProvider": "openai",
"baseUrl": "https://portal.qwen.ai/v1",
"defaultModel": "qwen3-coder-plus",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/qwenvercel.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "qwenvercel",
"modelsDevProviderId": "alibaba",
"baseProvider": "openaivercel",
"baseUrl": "https://portal.qwen.ai/v1",
"defaultModel": "qwen3-coder-plus",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/providers/aliases/synthetic.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"name": "Synthetic",
"modelsDevProviderId": "synthetic",
"baseProvider": "openai",
"baseUrl": "https://api.synthetic.new/openai/v1",
"defaultModel": "hf:zai-org/GLM-4.6",
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/providers/aliases/xai.config
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"name": "xAI",
"modelsDevProviderId": "xai",
"baseProvider": "openai",
"baseUrl": "https://api.x.ai/v1/",
"defaultModel": "grok-3",
"description": "xAI compatibility profile"
"description": "xAI compatibility profile",
"apiKeyEnv": "XAI_API_KEY"
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { describe, expect, it } from 'vitest';
import { describe, expect, it, vi } from 'vitest';

// This test needs real config files, not the global mock
vi.unmock('./providerAliases.js');

import { loadProviderAliasEntries } from './providerAliases.js';

describe('Built-in provider aliases (Qwen defaults)', () => {
Expand Down
6 changes: 5 additions & 1 deletion packages/cli/src/providers/providerAliases.codex.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { describe, it, expect } from 'vitest';
import { describe, it, expect, vi } from 'vitest';

// This test needs real config files, not the global mock
vi.unmock('./providerAliases.js');

import { loadProviderAliasEntries } from './providerAliases.js';
import * as fs from 'fs';
import * as path from 'path';
Expand Down
2 changes: 2 additions & 0 deletions packages/cli/src/providers/providerAliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ export interface ProviderAliasConfig {
description?: string;
providerConfig?: Record<string, unknown>;
apiKeyEnv?: string;
/** Provider ID from models.dev for filtering in ModelsDialog */
modelsDevProviderId?: string | null;
}

export interface ProviderAliasEntry {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { SettingsService } from '@vybestack/llxprt-code-core';
import type { Config } from '@vybestack/llxprt-code-core';

// This test tests provider registration behavior, needs real providerAliases
vi.unmock('./providerAliases.js');

describe('Anthropic OAuth registration with environment key', () => {
let ensureOAuthProviderRegisteredMock: ReturnType<typeof vi.fn>;
let anthropicCtor: ReturnType<typeof vi.fn>;
Expand Down
Loading
Loading