UNPKG

ai-debug-local-mcp

Version:

๐ŸŽฏ ENHANCED AI GUIDANCE v4.1.2: Dramatically improved tool descriptions help AI users choose the right tools instead of 'close enough' options. Ultra-fast keyboard automation (10x speed), universal recording, multi-ecosystem debugging support, and compreh

123 lines โ€ข 4.21 kB
/** * Playwright Browser Manager for V2 Architecture * * Manages browser instances and pages for debugging sessions */ import { chromium } from 'playwright'; export class PlaywrightBrowserManager { browser = null; context = null; pages = new Map(); initialized = false; async initialize() { if (this.initialized) return; try { this.browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); this.context = await this.browser.newContext({ viewport: { width: 1280, height: 720 }, userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }); this.initialized = true; console.error('๐ŸŒ Playwright Browser Manager initialized'); } catch (error) { console.error('โŒ Failed to initialize Playwright Browser Manager:', error.message); throw error; } } async getOrCreatePage(sessionId) { if (!this.initialized) { await this.initialize(); } if (this.pages.has(sessionId)) { return this.pages.get(sessionId); } if (!this.context) { throw new Error('Browser context not initialized'); } try { const page = await this.context.newPage(); // Set up common page configurations await page.setDefaultTimeout(30000); // Enable console logging page.on('console', (msg) => { console.log(`[Page Console]: ${msg.text()}`); }); // Handle page errors page.on('pageerror', (error) => { console.error(`[Page Error]: ${error.message}`); }); this.pages.set(sessionId, page); console.error(`๐Ÿ“„ Created new page for session: ${sessionId}`); return page; } catch (error) { console.error(`โŒ Failed to create page for session ${sessionId}:`, error.message); throw error; } } async getPage(sessionId) { return this.pages.get(sessionId) || null; } async closePage(sessionId) { const page = this.pages.get(sessionId); if (page) { try { await page.close(); this.pages.delete(sessionId); console.error(`๐Ÿ—‘๏ธ Closed page for session: ${sessionId}`); } catch (error) { console.error(`โŒ Error closing page for session ${sessionId}:`, error.message); } } } async cleanup() { console.error('๐Ÿงน Cleaning up Playwright Browser Manager...'); // Close all pages for (const [sessionId, page] of this.pages) { try { await page.close(); console.error(`๐Ÿ—‘๏ธ Closed page for session: ${sessionId}`); } catch (error) { console.error(`โŒ Error closing page for session ${sessionId}:`, error.message); } } this.pages.clear(); // Close context if (this.context) { try { await this.context.close(); console.error('๐Ÿ—‘๏ธ Closed browser context'); } catch (error) { console.error('โŒ Error closing browser context:', error.message); } this.context = null; } // Close browser if (this.browser) { try { await this.browser.close(); console.error('๐Ÿ—‘๏ธ Closed browser'); } catch (error) { console.error('โŒ Error closing browser:', error.message); } this.browser = null; } this.initialized = false; } isInitialized() { return this.initialized; } getActiveSessionCount() { return this.pages.size; } } //# sourceMappingURL=playwright-browser-manager.js.map