feat(cli): Add /model command for interactive model selection (#8940)

Co-authored-by: Miguel Solorio <miguel.solorio07@gmail.com>
This commit is contained in:
Abhi
2025-09-23 12:50:09 -04:00
committed by GitHub
parent c96f8259c1
commit 5151bedf06
19 changed files with 743 additions and 1 deletions
@@ -59,6 +59,9 @@ vi.mock('../ui/commands/extensionsCommand.js', () => ({
}));
vi.mock('../ui/commands/helpCommand.js', () => ({ helpCommand: {} }));
vi.mock('../ui/commands/memoryCommand.js', () => ({ memoryCommand: {} }));
vi.mock('../ui/commands/modelCommand.js', () => ({
modelCommand: { name: 'model' },
}));
vi.mock('../ui/commands/privacyCommand.js', () => ({ privacyCommand: {} }));
vi.mock('../ui/commands/quitCommand.js', () => ({ quitCommand: {} }));
vi.mock('../ui/commands/statsCommand.js', () => ({ statsCommand: {} }));
@@ -81,6 +84,7 @@ describe('BuiltinCommandLoader', () => {
vi.clearAllMocks();
mockConfig = {
getFolderTrust: vi.fn().mockReturnValue(true),
getUseModelRouter: () => false,
} as unknown as Config;
restoreCommandMock.mockReturnValue({
@@ -150,4 +154,26 @@ describe('BuiltinCommandLoader', () => {
const permissionsCmd = commands.find((c) => c.name === 'permissions');
expect(permissionsCmd).toBeUndefined();
});
it('should include modelCommand when getUseModelRouter is true', async () => {
const mockConfigWithModelRouter = {
...mockConfig,
getUseModelRouter: () => true,
} as unknown as Config;
const loader = new BuiltinCommandLoader(mockConfigWithModelRouter);
const commands = await loader.loadCommands(new AbortController().signal);
const modelCmd = commands.find((c) => c.name === 'model');
expect(modelCmd).toBeDefined();
});
it('should not include modelCommand when getUseModelRouter is false', async () => {
const mockConfigWithoutModelRouter = {
...mockConfig,
getUseModelRouter: () => false,
} as unknown as Config;
const loader = new BuiltinCommandLoader(mockConfigWithoutModelRouter);
const commands = await loader.loadCommands(new AbortController().signal);
const modelCmd = commands.find((c) => c.name === 'model');
expect(modelCmd).toBeUndefined();
});
});