import { cli, Strategy } from '@jackwener/opencli/registry'; import { selectorError } from '@jackwener/opencli/errors'; export const modelCommand = cli({ site: 'chatwise', name: 'model', access: 'read', description: 'Get or switch the active AI model in ChatWise', domain: 'localhost', strategy: Strategy.UI, browser: true, args: [ { name: 'model-name', required: false, positional: true, help: 'Model to switch to (e.g. gpt-4, claude-3)' }, ], columns: ['Status', 'Model'], func: async (page, kwargs) => { const desiredModel = kwargs['model-name']; if (!desiredModel) { // Read current model const currentModel = await page.evaluate(` (function() { // ChatWise is a multi-LLM client, it typically shows the model name in a dropdown or header const selectors = [ '[class*="model"] span', '[class*="Model"] span', '[data-testid*="model"]', 'button[class*="model"]', '[aria-label*="Model"]', '[aria-label*="model"]', ]; for (const sel of selectors) { const el = document.querySelector(sel); if (el) { const text = (el.textContent || el.getAttribute('title') || '').trim(); if (text) return text; } } return 'Unknown or Not Found'; })() `); return [{ Status: 'Active', Model: currentModel }]; } else { // Try to switch model const opened = await page.evaluate(` (function(target) { const selectors = [ '[class*="model"]', '[class*="Model"]', 'button[class*="model"]', ]; for (const sel of selectors) { const el = document.querySelector(sel); if (el) { el.click(); return true; } } return false; })(${JSON.stringify(desiredModel)}) `); if (!opened) throw selectorError('ChatWise model selector'); await page.wait(0.5); // Find and click the target model in the dropdown const found = await page.evaluate(` (function(target) { const options = document.querySelectorAll('[role="option"], [role="menuitem"], [class*="dropdown-item"], li'); for (const opt of options) { if ((opt.textContent || '').toLowerCase().includes(target.toLowerCase())) { opt.click(); return true; } } return false; })(${JSON.stringify(desiredModel)}) `); return [ { Status: found ? 'Switched' : 'Dropdown opened but model not found', Model: desiredModel, }, ]; } }, });