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
JavaScript
/**
* 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