SYMBOL INDEX (110 symbols across 12 files) FILE: browser-tools-mcp/mcp-server.ts function getDefaultServerPort (line 20) | function getDefaultServerPort(): number { function getDefaultServerHost (line 47) | function getDefaultServerHost(): string { function discoverServer (line 58) | async function discoverServer(): Promise { function withServerConnection (line 116) | async function withServerConnection( type AuditCategory (line 343) | enum AuditCategory { FILE: browser-tools-server/browser-connector.ts function convertPathForCurrentPlatform (line 31) | function convertPathForCurrentPlatform(inputPath: string): string { function getDefaultDownloadsFolder (line 135) | function getDefaultDownloadsFolder(): string { type ScreenshotCallback (line 173) | interface ScreenshotCallback { function getAvailablePort (line 185) | async function getAvailablePort( constant REQUESTED_PORT (line 241) | const REQUESTED_PORT = parseInt(process.env.PORT || "3025", 10); constant PORT (line 242) | let PORT = REQUESTED_PORT; function truncateStringsInData (line 252) | function truncateStringsInData(data: any, maxLength: number): any { function processJsonString (line 275) | function processJsonString(jsonString: string, maxLength: number): string { function processLogsWithSettings (line 290) | function processLogsWithSettings(logs: any[]) { function calculateLogSize (line 309) | function calculateLogSize(log: any): number { function truncateLogsToQueryLimit (line 314) | function truncateLogsToQueryLimit(logs: any[]): any[] { function clearAllLogs (line 526) | function clearAllLogs() { type ScreenshotMessage (line 594) | interface ScreenshotMessage { class BrowserConnector (line 602) | class BrowserConnector { method constructor (line 609) | constructor(app: express.Application, server: any) { method handleScreenshot (line 815) | private async handleScreenshot(req: express.Request, res: express.Resp... method getUrlForAudit (line 894) | private async getUrlForAudit(): Promise { method hasActiveConnection (line 935) | public hasActiveConnection(): boolean { method captureScreenshot (line 940) | async captureScreenshot(req: express.Request, res: express.Response) { method shutdown (line 1252) | public shutdown() { method setupAccessibilityAudit (line 1298) | private setupAccessibilityAudit() { method setupPerformanceAudit (line 1307) | private setupPerformanceAudit() { method setupSEOAudit (line 1316) | private setupSEOAudit() { method setupBestPracticesAudit (line 1321) | private setupBestPracticesAudit() { method setupAuditEndpoint (line 1335) | private setupAuditEndpoint( FILE: browser-tools-server/lighthouse/accessibility.ts type AccessibilityReportContent (line 10) | interface AccessibilityReportContent { type AIOptimizedAccessibilityReport (line 34) | type AIOptimizedAccessibilityReport = type AIAccessibilityIssue (line 40) | interface AIAccessibilityIssue { type AIAccessibilityElement (line 52) | interface AIAccessibilityElement { type AccessibilityAudit (line 61) | interface AccessibilityAudit { type AuditDetails (line 71) | type AuditDetails = { constant DETAIL_LIMITS (line 88) | const DETAIL_LIMITS = { function runAccessibilityAudit (line 100) | async function runAccessibilityAudit( FILE: browser-tools-server/lighthouse/best-practices.ts type BestPracticesReportContent (line 10) | interface BestPracticesReportContent { type AIOptimizedBestPracticesReport (line 33) | type AIOptimizedBestPracticesReport = type AIBestPracticesIssue (line 39) | interface AIBestPracticesIssue { type BestPracticesAudit (line 54) | interface BestPracticesAudit { type BestPracticesAuditDetails (line 63) | interface BestPracticesAuditDetails { constant DETAIL_LIMITS (line 69) | const DETAIL_LIMITS: Record = { function runBestPracticesAudit (line 81) | async function runBestPracticesAudit( FILE: browser-tools-server/lighthouse/index.ts function createLighthouseConfig (line 14) | function createLighthouseConfig( function runLighthouseAudit (line 49) | async function runLighthouseAudit( FILE: browser-tools-server/lighthouse/performance.ts type PerformanceReportContent (line 10) | interface PerformanceReportContent { type AIOptimizedPerformanceReport (line 29) | type AIOptimizedPerformanceReport = type AIOptimizedMetric (line 33) | interface AIOptimizedMetric { type AIOptimizedOpportunity (line 45) | interface AIOptimizedOpportunity { type AIPageStats (line 59) | interface AIPageStats { constant DETAIL_LIMITS (line 75) | const DETAIL_LIMITS = { function runPerformanceAudit (line 89) | async function runPerformanceAudit( FILE: browser-tools-server/lighthouse/seo.ts type SEOReportContent (line 10) | interface SEOReportContent { type AIOptimizedSEOReport (line 33) | type AIOptimizedSEOReport = LighthouseReport; type AISEOIssue (line 38) | interface AISEOIssue { type SEOAudit (line 52) | interface SEOAudit { type SEOAuditDetails (line 62) | interface SEOAuditDetails { constant DETAIL_LIMITS (line 72) | const DETAIL_LIMITS = { function runSEOAudit (line 84) | async function runSEOAudit(url: string): Promise { FILE: browser-tools-server/lighthouse/types.ts type AuditCategory (line 4) | enum AuditCategory { type LighthouseReport (line 15) | interface LighthouseReport { type LighthouseConfig (line 39) | interface LighthouseConfig { FILE: browser-tools-server/puppeteer-service.ts type PuppeteerServiceConfig (line 12) | interface PuppeteerServiceConfig { constant DEFAULT_CONFIG (line 30) | const DEFAULT_CONFIG: PuppeteerServiceConfig = { constant BROWSER_CLEANUP_TIMEOUT (line 57) | let BROWSER_CLEANUP_TIMEOUT = 60000; function configurePuppeteerService (line 68) | function configurePuppeteerService( function getHeadlessBrowserInstance (line 90) | async function getHeadlessBrowserInstance(): Promise { function launchNewBrowser (line 121) | async function launchNewBrowser(): Promise { function createTempUserDataDir (line 184) | function createTempUserDataDir(): string { function configureLaunchOptions (line 200) | function configureLaunchOptions(userDataDir: string): any { function setCustomBrowserExecutable (line 231) | async function setCustomBrowserExecutable(launchOptions: any): Promise { function setupBrowserCleanupHandlers (line 599) | function setupBrowserCleanupHandlers( function cancelScheduledCleanup (line 638) | function cancelScheduledCleanup(): void { function scheduleBrowserCleanup (line 649) | function scheduleBrowserCleanup(): void { function connectToHeadlessBrowser (line 680) | async function connectToHeadlessBrowser( FILE: chrome-extension/background.js function validateServerIdentity (line 74) | async function validateServerIdentity(host, port) { function processTabForAudit (line 101) | function processTabForAudit(tab, tabId) { function getCurrentTabUrl (line 118) | async function getCurrentTabUrl(tabId) { function updateServerWithUrl (line 218) | async function updateServerWithUrl(tabId, url, source = "background_upda... function retestConnectionOnRefresh (line 300) | async function retestConnectionOnRefresh(tabId) { function captureAndSendScreenshot (line 343) | function captureAndSendScreenshot(message, settings, sendResponse) { FILE: chrome-extension/devtools.js constant MAX_ATTACH_RETRIES (line 21) | const MAX_ATTACH_RETRIES = 3; constant ATTACH_RETRY_DELAY (line 22) | const ATTACH_RETRY_DELAY = 1000; function truncateStringsInData (line 114) | function truncateStringsInData(data, maxLength, depth = 0, path = "") { function calculateObjectSize (line 166) | function calculateObjectSize(obj) { function processArrayWithSizeLimit (line 171) | function processArrayWithSizeLimit(array, maxTotalSize, processFunc) { function processJsonString (line 200) | function processJsonString(jsonString, maxLength) { function sendToBrowserConnector (line 242) | async function sendToBrowserConnector(logData) { function validateServerIdentity (line 354) | async function validateServerIdentity() { function wipeLogs (line 432) | function wipeLogs() { function attachDebugger (line 498) | async function attachDebugger() { function performAttach (line 523) | function performAttach() { function detachDebugger (line 554) | function detachDebugger() { function captureAndSendElement (line 690) | function captureAndSendElement() { constant WS_RECONNECT_DELAY (line 740) | const WS_RECONNECT_DELAY = 5000; constant HEARTBEAT_INTERVAL (line 741) | const HEARTBEAT_INTERVAL = 30000; function sendHeartbeat (line 748) | function sendHeartbeat() { function setupWebSocket (line 755) | async function setupWebSocket() { FILE: chrome-extension/panel.js function createConnectionBanner (line 159) | function createConnectionBanner() { function updateConnectionBanner (line 264) | function updateConnectionBanner(connected, serverInfo) { function updateUIFromSettings (line 348) | function updateUIFromSettings() { function saveSettings (line 362) | function saveSettings() { function cancelOngoingDiscovery (line 429) | function cancelOngoingDiscovery() { function testConnection (line 471) | async function testConnection(host, port) { function scheduleReconnectAttempt (line 547) | function scheduleReconnectAttempt() { function tryServerConnection (line 562) | async function tryServerConnection(host, port) { function discoverServer (line 656) | async function discoverServer(quietMode = false) {