import { cli, Strategy } from '@jackwener/opencli/registry'; export const modelCommand = cli({ site: 'cursor', name: 'model', access: 'read', description: 'Get or switch the currently active AI model in Cursor', domain: 'localhost', strategy: Strategy.UI, browser: true, args: [ { name: 'model-name', required: false, positional: true, help: 'The ID of the model to switch to (e.g. claude-3.5-sonnet)' } ], columns: ['Status', 'Model'], func: async (page, kwargs) => { const desiredModel = kwargs['model-name']; if (!desiredModel) { // Just read the current model const currentModel = await page.evaluate(` (function() { const m = document.querySelector('.composer-unified-dropdown-model span, [class*="unifiedmodeldropdown"] span'); return m ? m.textContent.trim() : 'Unknown or Not Found'; })() `); return [ { Status: 'Active', Model: currentModel, }, ]; } else { // Try to switch model (click dropdown, type/select model) const success = await page.evaluate(` (function(targetModel) { const dropdown = document.querySelector('.composer-unified-dropdown-model, [class*="unifiedmodeldropdown"]'); if (!dropdown) return 'Dropdown not found'; dropdown.click(); // After clicking, the DOM usually spawns a popup list. // Because it's hard to predict exactly how the list renders, // a simple scriptable approach is just to click it, and hope we can select it via UI. // In many React apps, clicking it opens a menu, and clicking the item works. return 'Dropdown opened. Automated switching is not fully generic. Please implement precise list navigation depending on DOM.'; })(${JSON.stringify(desiredModel)}) `); return [ { Status: success, Model: desiredModel, }, ]; } }, });