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

205 lines • 8.79 kB
/** * Framework Detection Module * Handles detection of meta-frameworks and their configurations */ export class MetaFrameworkDetection { /** * Detect which meta-framework is running on the page */ async detectMetaFramework(page) { return await page.evaluate(() => { const info = { framework: null, features: [] }; try { // Check for Remix if (window.__remixContext || window.__remixRouter || document.querySelector('[data-remix-router]') || document.querySelector('[data-remix-root]')) { info.framework = 'remix'; info.features.push('router', 'loader', 'action'); // Try to get version if (window.__remixContext?.manifest?.version) { info.version = window.__remixContext.manifest.version; } if (window.__remixContext?.routeData) { info.features.push('data-loading'); } if (document.querySelector('[data-remix-outlet]')) { info.features.push('outlet'); } } // Check for Astro else if (window.__astro || document.querySelector('[data-astro-component]') || document.querySelector('astro-island') || document.querySelector('[astro\\:component]')) { info.framework = 'astro'; info.features.push('islands'); if (window.__astro?.version) { info.version = window.__astro.version; } if (document.querySelectorAll('astro-island').length > 0) { info.features.push('hydration'); } if (window.__astro?.ssr !== false) { info.features.push('ssr'); } } // Check for Nuxt else if (window.__NUXT__ || window.$nuxt || document.querySelector('#__nuxt') || document.querySelector('[data-server-rendered="true"]')) { info.framework = 'nuxt'; info.features.push('ssr', 'router'); if (window.__NUXT__?.version) { info.version = window.__NUXT__.version; } if (window.__NUXT__?.data) { info.features.push('payload'); } if (window.$nuxt?.$router) { info.features.push('vue-router'); } } // Check for Qwik else if (window.__qwik || document.querySelector('[q\\:container]') || document.querySelector('[q\\:version]')) { info.framework = 'qwik'; info.features.push('resumability', 'signals'); const qContainer = document.querySelector('[q\\:version]'); if (qContainer) { info.version = qContainer.getAttribute('q:version') || undefined; } if (document.querySelector('[q\\:obj]')) { info.features.push('serialization'); } } // Check for SolidJS else if (window.__solid || window.Solid || document.querySelector('[data-solid]') || document.querySelector('[data-hk]') // Solid's hydration key ) { info.framework = 'solidjs'; info.features.push('signals', 'fine-grained-reactivity'); if (window.Solid?.version) { info.version = window.Solid.version; } if (document.querySelector('[data-hk]')) { info.features.push('hydration'); } } // Check for SvelteKit else if (window.__sveltekit || window.__svelte || document.querySelector('[data-sveltekit]') || document.querySelector('[data-svelte-kit]')) { info.framework = 'sveltekit'; info.features.push('ssr', 'routing'); if (window.__sveltekit?.version) { info.version = window.__sveltekit.version; } if (window.__sveltekit?.updated) { info.features.push('hot-reload'); } } // Detect build tool if (window.__vite_plugin_react || window.__vite__ || document.querySelector('[data-vite-dev-id]')) { info.buildTool = 'vite'; } else if (window.__webpack_require__ || window.webpackChunkName) { info.buildTool = 'webpack'; } else if (window.__esbuild__) { info.buildTool = 'esbuild'; } else if (window.__rollup__) { info.buildTool = 'rollup'; } } catch (error) { console.debug('Framework detection error:', error); } return info; }); } /** * Get detailed framework information including advanced features */ async getFrameworkCapabilities(page, framework) { return await page.evaluate((fw) => { const capabilities = []; switch (fw) { case 'remix': if (window.__remixContext?.matches) capabilities.push('nested-routing'); if (window.fetch) capabilities.push('fetch-polyfill'); if (document.querySelector('[data-remix-error]')) capabilities.push('error-boundaries'); break; case 'astro': if (document.querySelector('[data-astro-rerender]')) capabilities.push('partial-hydration'); if (window.__astro?.prefetch) capabilities.push('prefetching'); break; case 'nuxt': if (window.__NUXT__?.asyncData) capabilities.push('async-data'); if (window.__NUXT__?.fetch) capabilities.push('universal-fetch'); break; case 'qwik': if (document.querySelector('[q\\:func]')) capabilities.push('serializable-functions'); if (window.__qwik?.prefetch) capabilities.push('speculative-loading'); break; case 'solidjs': if (window.Solid?.createStore) capabilities.push('stores'); if (window.Solid?.createResource) capabilities.push('resources'); break; case 'sveltekit': if (window.__sveltekit?.prefetch) capabilities.push('link-prefetching'); if (window.__sveltekit?.goto) capabilities.push('programmatic-navigation'); break; } return capabilities; }, framework); } /** * Check if framework is in development or production mode */ async getFrameworkMode(page) { return await page.evaluate(() => { // Check common development indicators if (window.__DEV__ === true || window.process?.env?.NODE_ENV === 'development' || window.__vite__ || document.querySelector('[data-vite-dev-id]')) { return 'development'; } // Check production indicators if (window.process?.env?.NODE_ENV === 'production' || document.querySelector('[data-production]') || !window.__DEV__) { return 'production'; } return 'unknown'; }); } } //# sourceMappingURL=meta-framework-detection.js.map