dev3000 0.0.101 → 0.0.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +2 -0
  2. package/dist/dev-environment.d.ts +1 -0
  3. package/dist/dev-environment.d.ts.map +1 -1
  4. package/dist/dev-environment.js +52 -8
  5. package/dist/dev-environment.js.map +1 -1
  6. package/dist/screencast-manager.d.ts.map +1 -1
  7. package/dist/screencast-manager.js +3 -4
  8. package/dist/screencast-manager.js.map +1 -1
  9. package/dist/src/tui-interface-impl.tsx +7 -1
  10. package/dist/tui-interface-impl.d.ts.map +1 -1
  11. package/dist/tui-interface-impl.js +4 -1
  12. package/dist/tui-interface-impl.js.map +1 -1
  13. package/mcp-server/.next/BUILD_ID +1 -1
  14. package/mcp-server/.next/build-manifest.json +2 -2
  15. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  16. package/mcp-server/.next/prerender-manifest.json +3 -3
  17. package/mcp-server/.next/server/app/_global-error.html +2 -2
  18. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  19. package/mcp-server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/mcp-server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/mcp-server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/mcp-server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/mcp-server/.next/server/app/_not-found.html +1 -1
  24. package/mcp-server/.next/server/app/_not-found.rsc +1 -1
  25. package/mcp-server/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  26. package/mcp-server/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  27. package/mcp-server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/mcp-server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/mcp-server/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/mcp-server/.next/server/app/index.html +1 -1
  31. package/mcp-server/.next/server/app/index.rsc +1 -1
  32. package/mcp-server/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  33. package/mcp-server/.next/server/app/index.segments/_full.segment.rsc +1 -1
  34. package/mcp-server/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/mcp-server/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/mcp-server/.next/server/chunks/[root-of-the-server]__0691849a._.js +1 -1
  37. package/mcp-server/.next/server/chunks/[root-of-the-server]__0691849a._.js.map +1 -1
  38. package/mcp-server/.next/server/chunks/[root-of-the-server]__ae49815f._.js +78 -15
  39. package/mcp-server/.next/server/chunks/[root-of-the-server]__ae49815f._.js.map +1 -1
  40. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  41. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  42. package/mcp-server/app/mcp/route.ts +28 -2
  43. package/mcp-server/app/mcp/tools.ts +486 -3
  44. package/package.json +2 -1
  45. package/src/tui-interface-impl.tsx +7 -1
  46. /package/mcp-server/.next/static/{eVcHKbTsqk-_vUXyVOoaO → I_0vbzGzd9Y9Tse-yfGKd}/_buildManifest.js +0 -0
  47. /package/mcp-server/.next/static/{eVcHKbTsqk-_vUXyVOoaO → I_0vbzGzd9Y9Tse-yfGKd}/_clientMiddlewareManifest.json +0 -0
  48. /package/mcp-server/.next/static/{eVcHKbTsqk-_vUXyVOoaO → I_0vbzGzd9Y9Tse-yfGKd}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- <!DOCTYPE html><!--eVcHKbTsqk__vUXyVOoaO--><html lang="en" class="h-full"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/465696cd26c2a481.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0813054680c4b8d9.js"/><script src="/_next/static/chunks/541301cb5662b97b.js" async=""></script><script src="/_next/static/chunks/9713888fedfe1db9.js" async=""></script><script src="/_next/static/chunks/9eca4842d04ce395.js" async=""></script><script src="/_next/static/chunks/turbopack-e3cd7a89396f3bb3.js" async=""></script><script src="/_next/static/chunks/edae37866d6cb029.js" async=""></script><script src="/_next/static/chunks/b8b614e19f1e5f19.js" async=""></script><script src="/_next/static/chunks/e0fc2c1c8371dd31.js" async=""></script><script src="/_next/static/chunks/e10632eea6a614ec.js" async=""></script><title>🎯 dev3000</title><link rel="icon" href="/favicon.ico" type="image/x-icon"/><link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="32x32"/><link rel="icon" href="/favicon-16.svg" type="image/svg+xml" sizes="16x16"/><link rel="icon" href="/favicon-64.svg" type="image/svg+xml" sizes="64x64"/><link rel="apple-touch-icon" href="/favicon-180.png"/><link rel="shortcut icon" href="/favicon.svg"/><meta name="theme-color" content="#1f2937"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="h-full"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-background text-foreground"><header class="bg-muted/30 border-b border-border"><div class="max-w-7xl mx-auto px-6 py-8"><div class="flex items-center justify-between"><div><div class="flex items-center gap-4 mb-3"><div class="w-12 h-12 bg-foreground rounded flex items-center justify-center"><span class="text-background font-mono font-bold">d3k</span></div><div><h1 class="text-3xl font-bold">dev3000 MCP Server</h1><div class="flex items-center gap-3 mt-2"><span class="inline-flex items-center gap-2 text-sm text-green-600 font-medium"><span class="w-2 h-2 bg-green-500 rounded-full"></span>Server Running</span><span class="text-muted-foreground">•</span><span class="text-sm text-muted-foreground">Port <!-- -->3684</span></div></div></div></div><div class="flex items-center gap-4"><a href="https://github.com/vercel-labs/dev3000#setup" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 px-5 py-3 border border-border text-foreground text-sm font-medium rounded hover:bg-accent hover:text-accent-foreground transition-colors">📖 Setup Guide</a><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-9" aria-label="Switch to dark mode"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon h-5 w-5 transition-all" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></button></div></div></div></header><main class="max-w-7xl mx-auto px-6 py-8"><section class="bg-accent/10 border border-accent/20 rounded p-8"><h2 class="text-xl font-semibold mb-4">🛠️ dev3000 Tools</h2><div class="text-center py-16"><div class="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div><p class="mt-6 text-muted-foreground">Loading tool documentation...</p></div></section><section class="mt-20 bg-gradient-to-r from-primary/10 to-secondary/10 border border-border rounded-lg p-10"><h2 class="text-2xl font-semibold mb-6 flex items-center gap-3">🪄 The Magic Workflow</h2><div class="grid md:grid-cols-3 gap-8"><div class="text-center"><div class="w-16 h-16 bg-primary/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md"><span class="text-primary font-bold text-2xl">1</span></div><h3 class="font-semibold mb-3 text-lg">AI Finds Issues</h3><p class="text-muted-foreground leading-relaxed">fix_my_app automatically detects all types of errors and problems in your app</p></div><div class="text-center"><div class="w-16 h-16 bg-accent/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md"><span class="text-accent-foreground font-bold text-2xl">2</span></div><h3 class="font-semibold mb-3 text-lg">AI Fixes Code</h3><p class="text-muted-foreground leading-relaxed">AI analyzes errors and edits your code files to resolve issues</p></div><div class="text-center"><div class="w-16 h-16 bg-green-500/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md"><span class="text-green-600 dark:text-green-400 font-bold text-2xl">3</span></div><h3 class="font-semibold mb-3 text-lg">AI Verifies Fixes</h3><p class="text-muted-foreground leading-relaxed">execute_browser_action tests the fixes in real-time with screenshots</p></div></div></section></main><footer class="border-t border-border mt-20"><div class="max-w-7xl mx-auto px-6 py-8"><div class="flex items-center justify-between text-sm text-muted-foreground"><div><span class="font-semibold">dev3000 MCP Server</span> - AI-powered development monitoring</div><div class="flex items-center gap-8"><a href="https://github.com/vercel-labs/dev3000" target="_blank" rel="noopener noreferrer" class="hover:text-foreground transition-colors">GitHub</a><a href="https://dev3000.ai" target="_blank" rel="noopener noreferrer" class="hover:text-foreground transition-colors">Homepage</a></div></div></div></footer></div><!--$--><!--/$--><script src="/_next/static/chunks/0813054680c4b8d9.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[89847,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"default\"]\n3:I[38771,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"default\"]\n4:I[48042,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"ClientPageRoot\"]\n5:I[41449,[\"/_next/static/chunks/e0fc2c1c8371dd31.js\",\"/_next/static/chunks/e10632eea6a614ec.js\"],\"default\"]\n8:I[80267,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[80267,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"ViewportBoundary\"]\nd:I[80267,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"MetadataBoundary\"]\nf:I[53649,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"default\"]\n:HL[\"/_next/static/chunks/465696cd26c2a481.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"eVcHKbTsqk-_vUXyVOoaO\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/465696cd26c2a481.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"🎯 dev3000\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"32x32\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-16.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"16x16\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-64.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"64x64\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon-180.png\"}],[\"$\",\"link\",null,{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#1f2937\"}]]}],[\"$\",\"body\",null,{\"className\":\"h-full\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/e0fc2c1c8371dd31.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/e10632eea6a614ec.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$@c\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$@e\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:[]\na:null\n"])</script></body></html>
1
+ <!DOCTYPE html><!--I_0vbzGzd9Y9Tse_yfGKd--><html lang="en" class="h-full"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/465696cd26c2a481.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0813054680c4b8d9.js"/><script src="/_next/static/chunks/541301cb5662b97b.js" async=""></script><script src="/_next/static/chunks/9713888fedfe1db9.js" async=""></script><script src="/_next/static/chunks/9eca4842d04ce395.js" async=""></script><script src="/_next/static/chunks/turbopack-e3cd7a89396f3bb3.js" async=""></script><script src="/_next/static/chunks/edae37866d6cb029.js" async=""></script><script src="/_next/static/chunks/b8b614e19f1e5f19.js" async=""></script><script src="/_next/static/chunks/e0fc2c1c8371dd31.js" async=""></script><script src="/_next/static/chunks/e10632eea6a614ec.js" async=""></script><title>🎯 dev3000</title><link rel="icon" href="/favicon.ico" type="image/x-icon"/><link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="32x32"/><link rel="icon" href="/favicon-16.svg" type="image/svg+xml" sizes="16x16"/><link rel="icon" href="/favicon-64.svg" type="image/svg+xml" sizes="64x64"/><link rel="apple-touch-icon" href="/favicon-180.png"/><link rel="shortcut icon" href="/favicon.svg"/><meta name="theme-color" content="#1f2937"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="h-full"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-background text-foreground"><header class="bg-muted/30 border-b border-border"><div class="max-w-7xl mx-auto px-6 py-8"><div class="flex items-center justify-between"><div><div class="flex items-center gap-4 mb-3"><div class="w-12 h-12 bg-foreground rounded flex items-center justify-center"><span class="text-background font-mono font-bold">d3k</span></div><div><h1 class="text-3xl font-bold">dev3000 MCP Server</h1><div class="flex items-center gap-3 mt-2"><span class="inline-flex items-center gap-2 text-sm text-green-600 font-medium"><span class="w-2 h-2 bg-green-500 rounded-full"></span>Server Running</span><span class="text-muted-foreground">•</span><span class="text-sm text-muted-foreground">Port <!-- -->3684</span></div></div></div></div><div class="flex items-center gap-4"><a href="https://github.com/vercel-labs/dev3000#setup" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 px-5 py-3 border border-border text-foreground text-sm font-medium rounded hover:bg-accent hover:text-accent-foreground transition-colors">📖 Setup Guide</a><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-9" aria-label="Switch to dark mode"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon h-5 w-5 transition-all" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></button></div></div></div></header><main class="max-w-7xl mx-auto px-6 py-8"><section class="bg-accent/10 border border-accent/20 rounded p-8"><h2 class="text-xl font-semibold mb-4">🛠️ dev3000 Tools</h2><div class="text-center py-16"><div class="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div><p class="mt-6 text-muted-foreground">Loading tool documentation...</p></div></section><section class="mt-20 bg-gradient-to-r from-primary/10 to-secondary/10 border border-border rounded-lg p-10"><h2 class="text-2xl font-semibold mb-6 flex items-center gap-3">🪄 The Magic Workflow</h2><div class="grid md:grid-cols-3 gap-8"><div class="text-center"><div class="w-16 h-16 bg-primary/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md"><span class="text-primary font-bold text-2xl">1</span></div><h3 class="font-semibold mb-3 text-lg">AI Finds Issues</h3><p class="text-muted-foreground leading-relaxed">fix_my_app automatically detects all types of errors and problems in your app</p></div><div class="text-center"><div class="w-16 h-16 bg-accent/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md"><span class="text-accent-foreground font-bold text-2xl">2</span></div><h3 class="font-semibold mb-3 text-lg">AI Fixes Code</h3><p class="text-muted-foreground leading-relaxed">AI analyzes errors and edits your code files to resolve issues</p></div><div class="text-center"><div class="w-16 h-16 bg-green-500/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md"><span class="text-green-600 dark:text-green-400 font-bold text-2xl">3</span></div><h3 class="font-semibold mb-3 text-lg">AI Verifies Fixes</h3><p class="text-muted-foreground leading-relaxed">execute_browser_action tests the fixes in real-time with screenshots</p></div></div></section></main><footer class="border-t border-border mt-20"><div class="max-w-7xl mx-auto px-6 py-8"><div class="flex items-center justify-between text-sm text-muted-foreground"><div><span class="font-semibold">dev3000 MCP Server</span> - AI-powered development monitoring</div><div class="flex items-center gap-8"><a href="https://github.com/vercel-labs/dev3000" target="_blank" rel="noopener noreferrer" class="hover:text-foreground transition-colors">GitHub</a><a href="https://dev3000.ai" target="_blank" rel="noopener noreferrer" class="hover:text-foreground transition-colors">Homepage</a></div></div></div></footer></div><!--$--><!--/$--><script src="/_next/static/chunks/0813054680c4b8d9.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[89847,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"default\"]\n3:I[38771,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"default\"]\n4:I[48042,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"ClientPageRoot\"]\n5:I[41449,[\"/_next/static/chunks/e0fc2c1c8371dd31.js\",\"/_next/static/chunks/e10632eea6a614ec.js\"],\"default\"]\n8:I[80267,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"OutletBoundary\"]\n9:\"$Sreact.suspense\"\nb:I[80267,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"ViewportBoundary\"]\nd:I[80267,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"MetadataBoundary\"]\nf:I[53649,[\"/_next/static/chunks/edae37866d6cb029.js\",\"/_next/static/chunks/b8b614e19f1e5f19.js\"],\"default\"]\n:HL[\"/_next/static/chunks/465696cd26c2a481.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"I_0vbzGzd9Y9Tse-yfGKd\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/465696cd26c2a481.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"h-full\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"🎯 dev3000\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"32x32\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-16.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"16x16\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon-64.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"64x64\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon-180.png\"}],[\"$\",\"link\",null,{\"rel\":\"shortcut icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#1f2937\"}]]}],[\"$\",\"body\",null,{\"className\":\"h-full\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/e0fc2c1c8371dd31.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/e10632eea6a614ec.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L8\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@a\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$@c\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$9\",null,{\"name\":\"Next.Metadata\",\"children\":\"$@e\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:[]\na:null\n"])</script></body></html>
@@ -9,7 +9,7 @@ b:I[80267,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b6
9
9
  d:I[80267,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"MetadataBoundary"]
10
10
  f:I[53649,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"default"]
11
11
  :HL["/_next/static/chunks/465696cd26c2a481.css","style"]
12
- 0:{"P":null,"b":"eVcHKbTsqk-_vUXyVOoaO","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/465696cd26c2a481.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full","children":[["$","head",null,{"children":[["$","title",null,{"children":"🎯 dev3000"}],["$","link",null,{"rel":"icon","href":"/favicon.ico","type":"image/x-icon"}],["$","link",null,{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml","sizes":"32x32"}],["$","link",null,{"rel":"icon","href":"/favicon-16.svg","type":"image/svg+xml","sizes":"16x16"}],["$","link",null,{"rel":"icon","href":"/favicon-64.svg","type":"image/svg+xml","sizes":"64x64"}],["$","link",null,{"rel":"apple-touch-icon","href":"/favicon-180.png"}],["$","link",null,{"rel":"shortcut icon","href":"/favicon.svg"}],["$","meta",null,{"name":"theme-color","content":"#1f2937"}]]}],["$","body",null,{"className":"h-full","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/e0fc2c1c8371dd31.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/e10632eea6a614ec.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$@c"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$@e"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[]],"s":false,"S":true}
12
+ 0:{"P":null,"b":"I_0vbzGzd9Y9Tse-yfGKd","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/465696cd26c2a481.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full","children":[["$","head",null,{"children":[["$","title",null,{"children":"🎯 dev3000"}],["$","link",null,{"rel":"icon","href":"/favicon.ico","type":"image/x-icon"}],["$","link",null,{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml","sizes":"32x32"}],["$","link",null,{"rel":"icon","href":"/favicon-16.svg","type":"image/svg+xml","sizes":"16x16"}],["$","link",null,{"rel":"icon","href":"/favicon-64.svg","type":"image/svg+xml","sizes":"64x64"}],["$","link",null,{"rel":"apple-touch-icon","href":"/favicon-180.png"}],["$","link",null,{"rel":"shortcut icon","href":"/favicon.svg"}],["$","meta",null,{"name":"theme-color","content":"#1f2937"}]]}],["$","body",null,{"className":"h-full","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/e0fc2c1c8371dd31.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/e10632eea6a614ec.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$@c"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$@e"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[]],"s":false,"S":true}
13
13
  6:{}
14
14
  7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
15
15
  c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -3,7 +3,7 @@
3
3
  3:I[41449,["/_next/static/chunks/e0fc2c1c8371dd31.js","/_next/static/chunks/e10632eea6a614ec.js"],"default"]
4
4
  6:I[80267,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"OutletBoundary"]
5
5
  7:"$Sreact.suspense"
6
- 0:{"buildId":"eVcHKbTsqk-_vUXyVOoaO","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/e0fc2c1c8371dd31.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/e10632eea6a614ec.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
6
+ 0:{"buildId":"I_0vbzGzd9Y9Tse-yfGKd","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/e0fc2c1c8371dd31.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/e10632eea6a614ec.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
7
7
  4:{}
8
8
  5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
9
9
  8:null
@@ -9,7 +9,7 @@ b:I[80267,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b6
9
9
  d:I[80267,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"MetadataBoundary"]
10
10
  f:I[53649,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"default"]
11
11
  :HL["/_next/static/chunks/465696cd26c2a481.css","style"]
12
- 0:{"P":null,"b":"eVcHKbTsqk-_vUXyVOoaO","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/465696cd26c2a481.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full","children":[["$","head",null,{"children":[["$","title",null,{"children":"🎯 dev3000"}],["$","link",null,{"rel":"icon","href":"/favicon.ico","type":"image/x-icon"}],["$","link",null,{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml","sizes":"32x32"}],["$","link",null,{"rel":"icon","href":"/favicon-16.svg","type":"image/svg+xml","sizes":"16x16"}],["$","link",null,{"rel":"icon","href":"/favicon-64.svg","type":"image/svg+xml","sizes":"64x64"}],["$","link",null,{"rel":"apple-touch-icon","href":"/favicon-180.png"}],["$","link",null,{"rel":"shortcut icon","href":"/favicon.svg"}],["$","meta",null,{"name":"theme-color","content":"#1f2937"}]]}],["$","body",null,{"className":"h-full","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/e0fc2c1c8371dd31.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/e10632eea6a614ec.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$@c"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$@e"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[]],"s":false,"S":true}
12
+ 0:{"P":null,"b":"I_0vbzGzd9Y9Tse-yfGKd","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/465696cd26c2a481.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"h-full","children":[["$","head",null,{"children":[["$","title",null,{"children":"🎯 dev3000"}],["$","link",null,{"rel":"icon","href":"/favicon.ico","type":"image/x-icon"}],["$","link",null,{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml","sizes":"32x32"}],["$","link",null,{"rel":"icon","href":"/favicon-16.svg","type":"image/svg+xml","sizes":"16x16"}],["$","link",null,{"rel":"icon","href":"/favicon-64.svg","type":"image/svg+xml","sizes":"64x64"}],["$","link",null,{"rel":"apple-touch-icon","href":"/favicon-180.png"}],["$","link",null,{"rel":"shortcut icon","href":"/favicon.svg"}],["$","meta",null,{"name":"theme-color","content":"#1f2937"}]]}],["$","body",null,{"className":"h-full","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/e0fc2c1c8371dd31.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/e10632eea6a614ec.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$@c"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$@e"}]}]}],null]}],false]],"m":"$undefined","G":["$f",[]],"s":false,"S":true}
13
13
  6:{}
14
14
  7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
15
15
  c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -2,4 +2,4 @@
2
2
  2:I[89847,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"default"]
3
3
  3:I[38771,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"default"]
4
4
  :HL["/_next/static/chunks/465696cd26c2a481.css","style"]
5
- 0:{"buildId":"eVcHKbTsqk-_vUXyVOoaO","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/465696cd26c2a481.css","precedence":"next"}]],["$","html",null,{"lang":"en","className":"h-full","children":[["$","head",null,{"children":[["$","title",null,{"children":"🎯 dev3000"}],["$","link",null,{"rel":"icon","href":"/favicon.ico","type":"image/x-icon"}],["$","link",null,{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml","sizes":"32x32"}],["$","link",null,{"rel":"icon","href":"/favicon-16.svg","type":"image/svg+xml","sizes":"16x16"}],["$","link",null,{"rel":"icon","href":"/favicon-64.svg","type":"image/svg+xml","sizes":"64x64"}],["$","link",null,{"rel":"apple-touch-icon","href":"/favicon-180.png"}],["$","link",null,{"rel":"shortcut icon","href":"/favicon.svg"}],["$","meta",null,{"name":"theme-color","content":"#1f2937"}]]}],["$","body",null,{"className":"h-full","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"loading":null,"isPartial":false}
5
+ 0:{"buildId":"I_0vbzGzd9Y9Tse-yfGKd","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/465696cd26c2a481.css","precedence":"next"}]],["$","html",null,{"lang":"en","className":"h-full","children":[["$","head",null,{"children":[["$","title",null,{"children":"🎯 dev3000"}],["$","link",null,{"rel":"icon","href":"/favicon.ico","type":"image/x-icon"}],["$","link",null,{"rel":"icon","href":"/favicon.svg","type":"image/svg+xml","sizes":"32x32"}],["$","link",null,{"rel":"icon","href":"/favicon-16.svg","type":"image/svg+xml","sizes":"16x16"}],["$","link",null,{"rel":"icon","href":"/favicon-64.svg","type":"image/svg+xml","sizes":"64x64"}],["$","link",null,{"rel":"apple-touch-icon","href":"/favicon-180.png"}],["$","link",null,{"rel":"shortcut icon","href":"/favicon.svg"}],["$","meta",null,{"name":"theme-color","content":"#1f2937"}]]}],["$","body",null,{"className":"h-full","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}],"loading":null,"isPartial":false}
@@ -3,6 +3,6 @@
3
3
  4:I[80267,["/_next/static/chunks/edae37866d6cb029.js","/_next/static/chunks/b8b614e19f1e5f19.js"],"MetadataBoundary"]
4
4
  5:"$Sreact.suspense"
5
5
  :HL["/_next/static/chunks/465696cd26c2a481.css","style"]
6
- 0:{"buildId":"eVcHKbTsqk-_vUXyVOoaO","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"head":["$","$1","h",{"children":[null,["$","$L2",null,{"children":"$@3"}],["$","div",null,{"hidden":true,"children":["$","$L4",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$@6"}]}]}],null]}],"isHeadPartial":false,"staleTime":300}
6
+ 0:{"buildId":"I_0vbzGzd9Y9Tse-yfGKd","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"head":["$","$1","h",{"children":[null,["$","$L2",null,{"children":"$@3"}],["$","div",null,{"hidden":true,"children":["$","$L4",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$@6"}]}]}],null]}],"isHeadPartial":false,"staleTime":300}
7
7
  3:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
8
8
  6:[]
@@ -12,6 +12,6 @@ data: ${JSON.stringify(e)}
12
12
  `;return r&&(s+=`id: ${r}
13
13
  `),s+=`data: ${JSON.stringify(t)}
14
14
 
15
- `,e.write(s)}async handleUnsupportedRequest(e){e.writeHead(405,{Allow:"GET, POST, DELETE"}).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}))}async handlePostRequest(e,t,r){var s,n,i,o,a;try{let a,u,l=e.headers.accept;if(!(null==l?void 0:l.includes("application/json"))||!l.includes("text/event-stream"))return void t.writeHead(406).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Not Acceptable: Client must accept both application/json and text/event-stream"},id:null}));let c=e.headers["content-type"];if(!c||!c.includes("application/json"))return void t.writeHead(415).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Unsupported Media Type: Content-Type must be application/json"},id:null}));let f=e.auth,d={headers:e.headers};if(void 0!==r)a=r;else{let t=eP.default.parse(c),r=await (0,eO.default)(e,{limit:"4mb",encoding:null!=(s=t.parameters.charset)?s:"utf-8"});a=JSON.parse(r.toString())}let m=(u=Array.isArray(a)?a.map(e=>j.JSONRPCMessageSchema.parse(e)):[j.JSONRPCMessageSchema.parse(a)]).some(j.isInitializeRequest);if(m){if(this._initialized&&void 0!==this.sessionId)return void t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32600,message:"Invalid Request: Server already initialized"},id:null}));if(u.length>1)return void t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32600,message:"Invalid Request: Only one initialization request is allowed"},id:null}));this.sessionId=null==(n=this.sessionIdGenerator)?void 0:n.call(this),this._initialized=!0,this.sessionId&&this._onsessioninitialized&&await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!m&&(!this.validateSession(e,t)||!this.validateProtocolVersion(e,t)))return;let p=u.some(j.isJSONRPCRequest);if(p){if(p){let e=(0,eN.randomUUID)();if(!this._enableJsonResponse){let e={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};void 0!==this.sessionId&&(e["mcp-session-id"]=this.sessionId),t.writeHead(200,e)}for(let r of u)(0,j.isJSONRPCRequest)(r)&&(this._streamMapping.set(e,t),this._requestToStreamMapping.set(r.id,e));for(let r of(t.on("close",()=>{this._streamMapping.delete(e)}),t.on("error",e=>{var t;null==(t=this.onerror)||t.call(this,e)}),u))null==(o=this.onmessage)||o.call(this,r,{authInfo:f,requestInfo:d})}}else for(let e of(t.writeHead(202).end(),u))null==(i=this.onmessage)||i.call(this,e,{authInfo:f,requestInfo:d})}catch(e){t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32700,message:"Parse error",data:String(e)},id:null})),null==(a=this.onerror)||a.call(this,e)}}async handleDeleteRequest(e,t){var r;!this.validateSession(e,t)||this.validateProtocolVersion(e,t)&&(await Promise.resolve(null==(r=this._onsessionclosed)?void 0:r.call(this,this.sessionId)),await this.close(),t.writeHead(200).end())}validateSession(e,t){if(void 0===this.sessionIdGenerator)return!0;if(!this._initialized)return t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: Server not initialized"},id:null})),!1;let r=e.headers["mcp-session-id"];return r?Array.isArray(r)?(t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: Mcp-Session-Id header must be a single value"},id:null})),!1):r===this.sessionId||(t.writeHead(404).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32001,message:"Session not found"},id:null})),!1):(t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: Mcp-Session-Id header is required"},id:null})),!1)}validateProtocolVersion(e,t){var r;let s=null!=(r=e.headers["mcp-protocol-version"])?r:j.DEFAULT_NEGOTIATED_PROTOCOL_VERSION;return Array.isArray(s)&&(s=s[s.length-1]),!!j.SUPPORTED_PROTOCOL_VERSIONS.includes(s)||(t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:`Bad Request: Unsupported protocol version (supported versions: ${j.SUPPORTED_PROTOCOL_VERSIONS.join(", ")})`},id:null})),!1)}async close(){var e;this._streamMapping.forEach(e=>{e.end()}),this._streamMapping.clear(),this._requestResponseMap.clear(),null==(e=this.onclose)||e.call(this)}async send(e,t){let r=null==t?void 0:t.relatedRequestId;if(((0,j.isJSONRPCResponse)(e)||(0,j.isJSONRPCError)(e))&&(r=e.id),void 0===r){let t;if((0,j.isJSONRPCResponse)(e)||(0,j.isJSONRPCError)(e))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let r=this._streamMapping.get(this._standaloneSseStreamId);if(void 0===r)return;this._eventStore&&(t=await this._eventStore.storeEvent(this._standaloneSseStreamId,e)),this.writeSSEEvent(r,e,t);return}let s=this._requestToStreamMapping.get(r),n=this._streamMapping.get(s);if(!s)throw Error(`No connection established for request ID: ${String(r)}`);if(!this._enableJsonResponse){let t;this._eventStore&&(t=await this._eventStore.storeEvent(s,e)),n&&this.writeSSEEvent(n,e,t)}if((0,j.isJSONRPCResponse)(e)||(0,j.isJSONRPCError)(e)){this._requestResponseMap.set(r,e);let t=Array.from(this._requestToStreamMapping.entries()).filter(([e,t])=>this._streamMapping.get(t)===n).map(([e])=>e);if(t.every(e=>this._requestResponseMap.has(e))){if(!n)throw Error(`No connection established for request ID: ${String(r)}`);if(this._enableJsonResponse){let e={"Content-Type":"application/json"};void 0!==this.sessionId&&(e["mcp-session-id"]=this.sessionId);let r=t.map(e=>this._requestResponseMap.get(e));n.writeHead(200,e),1===r.length?n.end(JSON.stringify(r[0])):n.end(JSON.stringify(r))}else n.end();for(let e of t)this._requestResponseMap.delete(e),this._requestToStreamMapping.delete(e)}}}}var ej=e.i(49719),eX=e.i(10430),eK=e.i(27699);e.i(43477);var ex=class extends eL.ServerResponse{constructor(e,t,r){super(e),this.onEvent=t,this.sessionId=r,this.requestId=crypto.randomUUID(),this.startTime=Date.now()}emitEvent(e){var t;this.onEvent&&this.onEvent((t=O(Y({},e),P({sessionId:this.sessionId,requestId:this.requestId})),O(Y({},t),P({timestamp:Date.now()}))))}startSession(e,t){this.emitEvent({type:"SESSION_STARTED",transport:e,clientInfo:t})}endSession(e){this.emitEvent({type:"SESSION_ENDED",transport:e})}requestReceived(e,t){this.emitEvent({type:"REQUEST_RECEIVED",method:e,parameters:t,status:"success"})}requestCompleted(e,t,r){this.emitEvent({type:"REQUEST_COMPLETED",method:e,result:t,duration:Date.now()-this.startTime,status:r?"error":"success"}),r&&this.error(r,`Error executing request ${e}`,"request")}error(e,t,r="system",s="error"){this.emitEvent({type:"ERROR",error:e,context:t,source:r,severity:s})}end(e,t,r){let s=e,n=t,i=r;return"function"==typeof e?(i=e,s=void 0,n=void 0):"function"==typeof t&&(i=t,n=void 0),super.end(s,n,i)}},eB=new eX.AsyncLocalStorage,eU=new WeakMap,ek=null;function eG(e){return w(this,arguments,function*({redisUrl:e,logger:t}){if(i&&n)return{redis:i,redisPublisher:n};if(!e)throw Error("redisUrl is required");return i=(0,eC.createClient)({url:e}),n=(0,eC.createClient)({url:e}),i.on("error",e=>{t.error("Redis error",e)}),n.on("error",e=>{t.error("Redis error",e)}),yield Promise.all([i.connect(),n.connect()]),{redis:i,redisPublisher:n}})}function eH(e={}){let{method:t="GET",url:r="/",headers:s={},body:n=null,socket:i=new eY.Socket}=e,o=new ew.Readable;if(o._read=()=>{},n){if("string"==typeof n)o.push(n);else if(Buffer.isBuffer(n))o.push(n);else{let e=JSON.stringify(n);o.push(e)}o.push(null)}else o.push(null);let a=new eL.IncomingMessage(i);a.method=t,a.url=r,a.headers=s;let u=e.auth||eB.getStore();return u&&(a.auth=u),a.push=o.push.bind(o),a.read=o.read.bind(o),a.on=o.on.bind(o),a.pipe=o.pipe.bind(o),a}var eq=e.i(20539),eV=e.i(56891);let eW=()=>{try{let{execSync:t}=e.r(74533);try{return t("bunx --version",{stdio:"ignore"}),{command:"bunx",args:[]}}catch{}try{return t("npx --version",{stdio:"ignore"}),{command:"npx",args:["-y"]}}catch{}try{return t("pnpm --version",{stdio:"ignore"}),{command:"pnpm",args:["dlx"]}}catch{}return console.error("[MCP Orchestrator] No package runner found (bunx, npx, or pnpm) - cannot spawn MCP servers"),null}catch(e){return console.error("[MCP Orchestrator] Failed to detect package runner:",e),null}},ez=(async()=>{let t=(0,eq.getMCPClientManager)(),r=()=>{let t={},r=(0,T.join)((0,v.homedir)(),".d3k");try{let{readdirSync:s,existsSync:n}=e.r(2157);if(!n(r))return t;for(let e of s(r).filter(e=>e.endsWith(".json")))try{let s=(0,T.join)(r,e),n=JSON.parse((0,A.readFileSync)(s,"utf-8"));if(n.cdpUrl&&!t.chromeDevtools){let e=n.cdpUrl.replace("ws://","http://"),r=eW();r?t.chromeDevtools={command:r.command,args:[...r.args,"chrome-devtools-mcp@latest","--browserUrl",e],enabled:!0}:console.warn("[MCP Orchestrator] Cannot configure chrome-devtools MCP: no package runner available")}if(t.chromeDevtools)break}catch{}}catch(e){console.warn("[MCP Orchestrator] Failed to read session files:",e)}if(!t.nextjsDev&&!t.svelteDev){let e=eW(),s=null;try{for(let e of(0,A.readdirSync)(r).filter(e=>e.endsWith(".json")))try{let t=(0,T.join)(r,e),n=JSON.parse((0,A.readFileSync)(t,"utf-8"));if(n.framework){s=n.framework;break}}catch{}}catch{}e?"nextjs"===s?(t.nextjsDev={command:e.command,args:[...e.args,"next-devtools-mcp@latest"],enabled:!0},console.log("[MCP Orchestrator] Detected Next.js framework, configuring next-devtools-mcp")):"svelte"===s&&(t.svelteDev={command:e.command,args:[...e.args,"@sveltejs/mcp-server-svelte"],enabled:!0},console.log("[MCP Orchestrator] Detected Svelte framework, configuring @sveltejs/mcp-server-svelte")):console.warn("[MCP Orchestrator] Cannot configure framework MCP: no package runner available")}return t},s=async(e=1e4,t=250)=>{let s=Date.now(),n=!1,i=r();for(;0===Object.keys(i).length&&Date.now()-s<e;)n||(console.log("[MCP Orchestrator] Waiting for session info before connecting downstream MCPs..."),n=!0),await new Promise(e=>setTimeout(e,t)),i=r();return{config:i,waited:n}};try{let{config:e,waited:n}=await s();Object.keys(e).length>0?(await t.initialize(e),console.log(`[MCP Orchestrator] Initialized with ${Object.keys(e).join(", ")}`)):n?console.log("[MCP Orchestrator] No downstream MCPs detected after waiting for session info (will retry)"):console.log("[MCP Orchestrator] No downstream MCPs found yet (will retry)");let i=0,o=setInterval(async()=>{i++;let e=r(),s=!!e.chromeDevtools,n=!!e.nextjsDev,a=!!e.svelteDev,u=t.isConnected("chrome-devtools"),l=t.isConnected("nextjs-dev"),c=t.isConnected("svelte-dev"),f=s&&!u,d=n&&!l,m=a&&!c;if(f||d||m){let r=[f&&"chrome-devtools",d&&"nextjs-dev",m&&"svelte-dev"].filter(Boolean);console.log(`[MCP Orchestrator] Retry ${i}: Attempting to connect to ${r.join(", ")}`);try{await t.initialize(e),console.log("[MCP Orchestrator] Successfully connected to downstream MCPs")}catch(e){console.warn(`[MCP Orchestrator] Retry ${i} failed:`,e)}}if(i>=10||u&&(!n||l)&&(!a||c)){clearInterval(o);let e=t.getConnectedMCPs();console.log(`[MCP Orchestrator] Stopped retry loop (connected: ${e.join(", ")||"none"})`)}},2e3)}catch(e){console.warn("[MCP Orchestrator] Failed to initialize downstream MCPs:",e)}})().catch(e=>{console.error("[MCP Orchestrator] Failed to initialize downstream MCPs:",e)});process.on("SIGTERM",async()=>{console.log("[MCP Orchestrator] Received SIGTERM, cleaning up...");try{await (0,eq.getMCPClientManager)().disconnect(),console.log("[MCP Orchestrator] Cleanup complete")}catch(e){console.error("[MCP Orchestrator] Error during cleanup:",e)}process.exit(0)}),process.on("SIGINT",async()=>{console.log("[MCP Orchestrator] Received SIGINT, cleaning up...");try{await (0,eq.getMCPClientManager)().disconnect(),console.log("[MCP Orchestrator] Cleanup complete")}catch(e){console.error("[MCP Orchestrator] Error during cleanup:",e)}process.exit(0)});let eZ=(r=function(e,t={},r={redisUrl:process.env.REDIS_URL||process.env.KV_URL,streamableHttpEndpoint:"/mcp",sseEndpoint:"/sse",sseMessageEndpoint:"/message",basePath:"",maxDuration:60,verboseLogs:!1,disableSse:!1}){let s,{redisUrl:n,basePath:i,streamableHttpEndpoint:o,sseEndpoint:a,sseMessageEndpoint:u,maxDuration:l,verboseLogs:c,disableSse:f}=r,{serverInfo:d={name:"mcp-typescript server on vercel",version:"0.1.0"}}=t,m=((e,t)=>{var r={};for(var s in e)M.call(e,s)&&0>t.indexOf(s)&&(r[s]=e[s]);if(null!=e&&D)for(var s of D(e))0>t.indexOf(s)&&L.call(e,s)&&(r[s]=e[s]);return r})(t,["serverInfo"]),{streamableHttpEndpoint:p,sseEndpoint:h,sseMessageEndpoint:_}=function({basePath:e,streamableHttpEndpoint:t="/mcp",sseEndpoint:r="/sse",sseMessageEndpoint:s="/message"}){let n,{streamableHttpEndpoint:i,sseEndpoint:o,sseMessageEndpoint:a}=null!=e?(n=e.replace(/\/$/,""),{streamableHttpEndpoint:`${n}/mcp`,sseEndpoint:`${n}/sse`,sseMessageEndpoint:`${n}/message`}):{streamableHttpEndpoint:t,sseEndpoint:r,sseMessageEndpoint:s};return{streamableHttpEndpoint:i,sseEndpoint:o,sseMessageEndpoint:a}}({basePath:i,streamableHttpEndpoint:o,sseEndpoint:a,sseMessageEndpoint:u}),g=function(e=!1){return{log:(...t)=>{e&&console.log(...t)},error:(...t)=>{e&&console.error(...t)},warn:(...t)=>{e&&console.warn(...t)},info:(...t)=>{e&&console.info(...t)},debug:(...t)=>{e&&console.debug(...t)}}}(c),E=[],S=new eF({sessionIdGenerator:void 0});return ek||(ek=setInterval(()=>{let e=Date.now();E=E.filter(t=>{var r;let s=eU.get(t);if(!s){g.log("Removing orphaned server without metadata");try{(null==t?void 0:t.server)&&t.server.close()}catch(e){g.error("Error closing orphaned server:",e)}return!1}let n=e-s.createdAt.getTime();if(n>3e5){g.log(`Removing stale server (session ${s.sessionId}, age: ${n}ms)`);try{(null==t?void 0:t.server)&&t.server.close(),(null==(r=s.transport)?void 0:r.close)&&s.transport.close()}catch(e){g.error("Error closing stale server:",e)}return eU.delete(t),!1}return!0})},3e4)),function(i,o){return w(this,null,function*(){var a,u,c;let y=new URL(i.url||"","https://example.com");if(y.pathname===p){if("GET"===i.method){g.log("Received GET MCP request"),o.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}));return}if("DELETE"===i.method){g.log("Received DELETE MCP request"),o.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}));return}if("POST"===i.method){let t,n=new ex(eH(),r.onEvent);s||(s=new eb(d,m),yield e(s),yield s.connect(S)),t=(i.headers.get("content-type")||"").includes("application/json")?yield i.json():yield i.text();let a=eH({method:i.method,url:i.url,headers:Object.fromEntries(i.headers),body:t,auth:i.auth}),u=new ex(a,r.onEvent);Object.assign(u,o);try{yield S.handleRequest(a,u),"object"==typeof t&&t&&"method"in t&&n.requestCompleted(t.method,t)}catch(e){throw"object"==typeof t&&t&&"method"in t&&n.requestCompleted(t.method,void 0,e instanceof Error?e:String(e)),e}}}else if(y.pathname===h){if(f){o.statusCode=404,o.end("Not found");return}if("GET"!==i.method){g.log(`Rejected SSE connection with method ${i.method}`),o.writeHead(405,{"Content-Type":"text/plain"}).end("Method Not Allowed");return}let s=i.headers.get("accept")||i.headers.get("Accept");if(s&&!s.includes("text/event-stream")&&!s.includes("*/*")&&!s.includes("text/*")){g.log(`Rejected SSE connection with incompatible Accept header: ${s}`),o.writeHead(406,{"Content-Type":"text/plain"}).end("Not Acceptable");return}let{redis:m,redisPublisher:p}=yield eG({redisUrl:n,logger:g});g.log("Got new SSE connection"),(0,ej.default)(_,"sseMessageEndpoint is required");let h=new eM(_,o),S=h.sessionId,y=new ex(eH(),r.onEvent,S);y.startSession("SSE",{userAgent:null!=(a=i.headers.get("user-agent"))?a:void 0,ip:null!=(c=null!=(u=i.headers.get("x-forwarded-for"))?u:i.headers.get("x-real-ip"))?c:void 0});let b=new eb(d,t),I=!1,R=null,A=null,v=null,T=null,N=[],O=e=>w(this,null,function*(){if(!I){if(I=!0,g.log(`Cleaning up SSE connection: ${e}`),A&&(clearTimeout(A),A=null),R&&(clearInterval(R),R=null),v&&(i.signal.removeEventListener("abort",v),v=null),T)try{yield m.unsubscribe(`requests:${S}`,T),g.log(`Unsubscribed from requests:${S}`)}catch(e){g.error("Error unsubscribing from Redis:",e)}try{(null==b?void 0:b.server)&&(yield b.server.close()),(null==h?void 0:h.close)&&(yield h.close())}catch(e){g.error("Error closing server/transport:",e)}E=E.filter(e=>e!==b),eU.delete(b),y.endSession("SSE"),N=[],o.headersSent||(o.statusCode=200,o.end())}});try{let t,s=function(e,...t){N.push({type:e,messages:t})};yield e(b),E.push(b),eU.set(b,{sessionId:S,createdAt:new Date,transport:h}),b.server.onclose=()=>{O("server closed")},T=e=>w(this,null,function*(){g.log("Received message from Redis",e),s("log","Received message from Redis",e);let t=JSON.parse(e),n=eH({method:t.method,url:t.url,headers:t.headers,body:t.body}),i=new ex(n,r.onEvent,S),o=100,a="";i.writeHead=e=>(o=e,i),i.end=e=>(a=e,i);try{if(yield h.handlePostMessage(n,i),"object"==typeof t.body&&t.body&&"method"in t.body)try{let e=JSON.parse(a);y.requestCompleted(t.body.method,e)}catch(e){y.requestCompleted(t.body.method,a)}}catch(e){throw y.error(e instanceof Error?e:String(e),"Error handling SSE message","session"),e}yield p.publish(`responses:${S}:${t.requestId}`,JSON.stringify({status:o,body:a})),o>=200&&o<300?s("log",`Request ${S}:${t.requestId} succeeded: ${a}`):(s("error",`Message for ${S}:${t.requestId} failed with status ${o}: ${a}`),y.error(`Request failed with status ${o}`,a,"session"))}),R=setInterval(()=>{for(let e of N)g[e.type](...e.messages);N=[]},100),yield m.subscribe(`requests:${S}`,T),g.log(`Subscribed to requests:${S}`);let n=new Promise(e=>{t=e,A=setTimeout(()=>{e("max duration reached")},(null!=l?l:60)*1e3)});v=()=>t("client hang up"),i.signal.addEventListener("abort",v),o.on("close",()=>{O("response closed")}),o.on("error",e=>{g.error("Response error:",e),O("response error")}),yield b.connect(h);let a=yield n;g.log(a),yield O(String(a))}catch(e){throw g.error("Error in SSE handler:",e),yield O("error during setup"),e}}else if(y.pathname===_){let e;if(f){o.statusCode=404,o.end("Not found");return}let{redis:t,redisPublisher:r}=yield eG({redisUrl:n,logger:g});g.log("Received message");let s=yield i.text();try{e=JSON.parse(s)}catch(t){e=s}let a=y.searchParams.get("sessionId")||"";if(!a){o.statusCode=400,o.end("No sessionId provided");return}let u=crypto.randomUUID(),l={requestId:u,url:i.url||"",method:i.method||"",body:e,headers:Object.fromEntries(i.headers.entries())},c=null,d=!1,m=!1,p=()=>w(this,null,function*(){if(!m){m=!0,c&&(clearTimeout(c),c=null);try{yield t.unsubscribe(`responses:${a}:${u}`)}catch(e){g.error("Error unsubscribing from Redis response channel:",e)}}}),h=(e,t)=>w(this,null,function*(){d||(d=!0,o.statusCode=e,o.end(t),yield p())}),_=e=>w(this,null,function*(){try{let t=JSON.parse(e);yield h(t.status,t.body)}catch(e){g.error("Failed to parse response message:",e),yield h(500,"Internal server error")}});try{yield t.subscribe(`responses:${a}:${u}`,_),yield r.publish(`requests:${a}`,JSON.stringify(l)),g.log(`Published requests:${a}`,l),c=setTimeout(()=>w(this,null,function*(){yield h(408,"Request timed out")}),1e4),o.on("close",()=>w(this,null,function*(){d||(d=!0,yield p())})),o.on("error",e=>w(this,null,function*(){g.error("Response error in message handler:",e),d||(d=!0,yield p())}))}catch(e){g.error("Error in message handler:",e),yield p(),d||(o.statusCode=500,o.end("Internal server error"))}}else o.statusCode=404,o.end("Not found")})}}(async t=>{let r=(0,eq.getMCPClientManager)();await ez,await r.waitForInitialTools();let s=new Map,n=(e,n)=>{let i=`${e}_${n.name}`,o=s.get(i),a=`[${e}] ${n.description||""}`,u={...n.annotations??{},proxiedFrom:e,originalInputSchema:n.inputSchema};if(o)return o.registered.update({description:a,annotations:u}),!1;try{let o=t.tool(i,a,{},async t=>r.callTool(e,n.name,t));return o.inputSchema=eE.z.object({}).passthrough(),o.update({annotations:u}),s.set(i,{mcpName:e,toolName:n.name,registered:o}),console.log(`[MCP Orchestrator] Registered proxied tool ${i}`),!0}catch(e){return console.warn(`[MCP Orchestrator] Failed to register proxied tool ${i}:`,e),!1}},i=r.getAllTools();0===i.length?console.log("[MCP Orchestrator] No downstream MCP tools available during initial registration"):console.log(`[MCP Orchestrator] Registering ${i.length} downstream MCP tools`);let o=0;for(let{mcpName:e,tool:t}of i)n(e,t)&&o++;o>0&&t.sendToolListChanged(),r.onToolsUpdated(({mcpName:e,tools:r})=>{if(0===r.length){(e=>{let t=0;for(let[r,n]of s.entries())if(n.mcpName===e)try{n.registered.remove(),s.delete(r),t++,console.log(`[MCP Orchestrator] Removed proxied tool ${r}`)}catch(e){console.warn(`[MCP Orchestrator] Failed to remove proxied tool ${r}:`,e)}return t})(e)>0&&t.sendToolListChanged();return}let i=0;for(let t of r)n(e,t)&&i++;i>0&&t.sendToolListChanged()}),t.tool("fix_my_app",eV.TOOL_DESCRIPTIONS.fix_my_app,{projectName:eE.z.string().optional().describe("Project name to debug (if multiple dev3000 instances are running)"),focusArea:eE.z.string().optional().describe("Specific area: 'build', 'runtime', 'network', 'ui', 'all' (default: 'all')"),mode:eE.z.enum(["snapshot","bisect","monitor"]).optional().describe("Fix mode: 'snapshot' (fix now), 'bisect' (fix regression), 'monitor' (fix continuously)"),waitForUserInteraction:eE.z.boolean().optional().describe("In bisect mode: capture timestamp, wait for user testing, then analyze (default: false)"),timeRangeMinutes:eE.z.number().optional().describe("Minutes to analyze back from now (default: 10)"),includeTimestampInstructions:eE.z.boolean().optional().describe("Show timestamp-based debugging instructions for manual workflow (default: true)"),integrateNextjs:eE.z.boolean().optional().describe("Auto-detected based on available MCPs - enables Next.js-specific analysis"),integrateChromeDevtools:eE.z.boolean().optional().describe("Auto-detected based on available MCPs - enables Chrome DevTools integration"),returnRawData:eE.z.boolean().optional().describe("Return structured data for Claude orchestration instead of formatted text")},async e=>(0,eV.fixMyApp)(e)),t.tool("fix_my_jank","🎯 **JANK & PERFORMANCE FIXER** - Specialized alias for detecting and fixing layout shifts, CLS issues, and performance problems. Automatically focuses on performance analysis and jank detection from passive screencast captures.\n\n💡 This is an alias for fix_my_app with focusArea='performance', perfect for 'fix my jank' or 'why is my page janky' requests!",{projectName:eE.z.string().optional().describe("Project name to debug (if multiple dev3000 instances are running)"),timeRangeMinutes:eE.z.number().optional().describe("Minutes to analyze back from now (default: 10)")},async e=>(0,eV.fixMyApp)({...e,focusArea:"performance"})),t.tool("execute_browser_action",eV.TOOL_DESCRIPTIONS.execute_browser_action,{action:eE.z.enum(["click","navigate","screenshot","evaluate","scroll","type"]).describe("The browser action to perform"),params:eE.z.record(eE.z.unknown()).optional().describe("Parameters for the action (e.g., {x: 100, y: 200} for click, {url: 'https://...'} for navigate)")},async e=>(0,eV.executeBrowserAction)(e)),t.tool("analyze_visual_diff","🔍 **VISUAL DIFF ANALYZER** - Analyzes two screenshots and provides a verbal description of the visual differences. Perfect for understanding what changed between before/after frames in layout shift detection.\n\n💡 This tool loads both images and describes what elements appeared, moved, or changed that could have caused the layout shift.",{beforeImageUrl:eE.z.string().describe("URL of the 'before' screenshot"),afterImageUrl:eE.z.string().describe("URL of the 'after' screenshot"),context:eE.z.string().optional().describe("Optional context about what to look for (e.g., 'navigation header shift')")},async t=>{let{analyzeVisualDiff:r}=await e.A(2603);return r(t)}),t.tool("find_component_source",eV.TOOL_DESCRIPTIONS.find_component_source,{selector:eE.z.string().describe("CSS selector for the DOM element (e.g., 'nav', '.header', '#main'). Use lowercase for tag names."),projectName:eE.z.string().optional().describe("Project name (if multiple dev3000 instances are running)")},async e=>(0,eV.findComponentSource)(e)),t.tool("restart_dev_server",eV.TOOL_DESCRIPTIONS.restart_dev_server,{projectName:eE.z.string().optional().describe("Project name (if multiple dev3000 instances are running)")},async e=>(0,eV.restartDevServer)(e))},{},{basePath:"/",maxDuration:60,verboseLogs:!0}),e=>(function(e,t){let r,s=new Promise(e=>{r=e});return new Promise(n=>{let i,o,a=!1,u=!1,l=200,c=(e,t)=>{if("string"==typeof t)throw Error("Status message of writeHead not supported");return u=!0,r({statusCode:l=e,headers:o=t}),p},f=[],d=(e,t)=>{if(t)throw Error("Encoding not supported");if(e instanceof Buffer)throw Error("Buffer not supported");return(u||c(l,o),i)?i.enqueue(new TextEncoder().encode(e)):f.push(new TextEncoder().encode(e)),!0},m=new eK.EventEmitter,p={writeHead:c,write:d,end:e=>{if(e&&d(e),!i)return a=!0,p;try{i.close()}catch(e){}return p},on:(e,t)=>(m.on(e,t),p),get statusCode(){return l},set statusCode(code){l=code,u&&r({statusCode:l,headers:o})}};e.addEventListener("abort",()=>{m.emit("close")}),t(p),w(this,null,function*(){let e=yield s;n(new Response(new ReadableStream({start(e){for(let t of(i=e,f))i.enqueue(t);a&&i.close()}}),{status:e.statusCode,headers:e.headers}))})})})(e.signal,t=>{r(e,t)}));e.s(["GET",()=>eZ,"POST",()=>eZ],47164);var e$=e.i(47164);let eJ=new o.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/mcp/route",pathname:"/mcp",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/mcp-server/app/mcp/route.ts",nextConfigOutput:"",userland:e$}),{workAsyncStorage:eQ,workUnitAsyncStorage:e0,serverHooks:e1}=eJ;function e4(){return(0,u.patchFetch)({workAsyncStorage:eQ,workUnitAsyncStorage:e0})}async function e8(e,t,r){eJ.isDev&&(0,l.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/mcp/route";s=s.replace(/\/index$/,"")||"/";let n=await eJ.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!n)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:i,params:o,nextConfig:u,parsedUrl:A,isDraftMode:v,prerenderManifest:T,routerServerContext:N,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,resolvedPathname:D,clientReferenceManifest:M,serverActionsManifest:L}=n,C=(0,m.normalizeAppPath)(s),Y=!!(T.dynamicRoutes[C]||T.routes[D]),w=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,A,!1):t.end("This page could not be found"),null);if(Y&&!v){let e=!!T.routes[D],t=T.dynamicRoutes[C];if(t&&!1===t.fallback&&!e){if(u.experimental.adapterPath)return await w();throw new I.NoFallbackError}}let F=null;!Y||eJ.isDev||v||(F="/index"===(F=D)?"/":F);let j=!0===eJ.isDev||!Y,X=Y&&!j;L&&M&&(0,f.setReferenceManifestsSingleton)({page:s,clientReferenceManifest:M,serverActionsManifest:L,serverModuleMap:(0,d.createServerModuleMap)({serverActionsManifest:L})});let K=e.method||"GET",x=(0,c.getTracer)(),B=x.getActiveScopeSpan(),U={params:o,prerenderManifest:T,renderOpts:{experimental:{authInterrupts:!!u.experimental.authInterrupts},cacheComponents:!!u.cacheComponents,supportsDynamicResponse:j,incrementalCache:(0,l.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:u.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s)=>eJ.onRequestError(e,t,s,N)},sharedContext:{buildId:i}},k=new p.NodeNextRequest(e),G=new p.NodeNextResponse(t),H=h.NextRequestAdapter.fromNodeNextRequest(k,(0,h.signalFromNodeResponse)(t));try{let n=async e=>eJ.handle(H,U).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=x.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==_.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${K} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${K} ${s}`)}),i=!!(0,l.getRequestMeta)(e,"minimalMode"),o=async o=>{var l,c;let f=async({previousCacheEntry:a})=>{try{if(!i&&O&&P&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(o);e.fetchMetrics=U.renderOpts.fetchMetrics;let u=U.renderOpts.pendingWaitUntil;u&&r.waitUntil&&(r.waitUntil(u),u=void 0);let l=U.renderOpts.collectedTags;if(!Y)return await (0,E.sendResponse)(k,G,s,U.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,S.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[b.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=b.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,n=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=b.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==a?void 0:a.isStale)&&await eJ.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:X,isOnDemandRevalidate:O})},N),t}},d=await eJ.handleResponse({req:e,nextConfig:u,cacheKey:F,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,responseGenerator:f,waitUntil:r.waitUntil,isMinimalMode:i});if(!Y)return null;if((null==d||null==(l=d.value)?void 0:l.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(c=d.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",O?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),v&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,S.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&Y||m.delete(b.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,E.sendResponse)(k,G,new Response(d.value.body,{headers:m,status:d.value.status||200})),null};B?await o(B):await x.withPropagatedContext(e.headers,()=>x.trace(_.BaseServerSpan.handleRequest,{spanName:`${K} ${s}`,kind:c.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},o))}catch(t){if(t instanceof I.NoFallbackError||await eJ.onRequestError(e,t,{routerKind:"App Router",routePath:C,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:X,isOnDemandRevalidate:O})}),Y)throw t;return await (0,E.sendResponse)(k,G,new Response(null,{status:500})),null}}e.s(["handler",()=>e8,"patchFetch",()=>e4,"routeModule",()=>eJ,"serverHooks",()=>e1,"workAsyncStorage",()=>eQ,"workUnitAsyncStorage",()=>e0],58891)}];
15
+ `,e.write(s)}async handleUnsupportedRequest(e){e.writeHead(405,{Allow:"GET, POST, DELETE"}).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}))}async handlePostRequest(e,t,r){var s,n,i,o,a;try{let a,u,l=e.headers.accept;if(!(null==l?void 0:l.includes("application/json"))||!l.includes("text/event-stream"))return void t.writeHead(406).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Not Acceptable: Client must accept both application/json and text/event-stream"},id:null}));let c=e.headers["content-type"];if(!c||!c.includes("application/json"))return void t.writeHead(415).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Unsupported Media Type: Content-Type must be application/json"},id:null}));let f=e.auth,d={headers:e.headers};if(void 0!==r)a=r;else{let t=eP.default.parse(c),r=await (0,eO.default)(e,{limit:"4mb",encoding:null!=(s=t.parameters.charset)?s:"utf-8"});a=JSON.parse(r.toString())}let m=(u=Array.isArray(a)?a.map(e=>j.JSONRPCMessageSchema.parse(e)):[j.JSONRPCMessageSchema.parse(a)]).some(j.isInitializeRequest);if(m){if(this._initialized&&void 0!==this.sessionId)return void t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32600,message:"Invalid Request: Server already initialized"},id:null}));if(u.length>1)return void t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32600,message:"Invalid Request: Only one initialization request is allowed"},id:null}));this.sessionId=null==(n=this.sessionIdGenerator)?void 0:n.call(this),this._initialized=!0,this.sessionId&&this._onsessioninitialized&&await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!m&&(!this.validateSession(e,t)||!this.validateProtocolVersion(e,t)))return;let p=u.some(j.isJSONRPCRequest);if(p){if(p){let e=(0,eN.randomUUID)();if(!this._enableJsonResponse){let e={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};void 0!==this.sessionId&&(e["mcp-session-id"]=this.sessionId),t.writeHead(200,e)}for(let r of u)(0,j.isJSONRPCRequest)(r)&&(this._streamMapping.set(e,t),this._requestToStreamMapping.set(r.id,e));for(let r of(t.on("close",()=>{this._streamMapping.delete(e)}),t.on("error",e=>{var t;null==(t=this.onerror)||t.call(this,e)}),u))null==(o=this.onmessage)||o.call(this,r,{authInfo:f,requestInfo:d})}}else for(let e of(t.writeHead(202).end(),u))null==(i=this.onmessage)||i.call(this,e,{authInfo:f,requestInfo:d})}catch(e){t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32700,message:"Parse error",data:String(e)},id:null})),null==(a=this.onerror)||a.call(this,e)}}async handleDeleteRequest(e,t){var r;!this.validateSession(e,t)||this.validateProtocolVersion(e,t)&&(await Promise.resolve(null==(r=this._onsessionclosed)?void 0:r.call(this,this.sessionId)),await this.close(),t.writeHead(200).end())}validateSession(e,t){if(void 0===this.sessionIdGenerator)return!0;if(!this._initialized)return t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: Server not initialized"},id:null})),!1;let r=e.headers["mcp-session-id"];return r?Array.isArray(r)?(t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: Mcp-Session-Id header must be a single value"},id:null})),!1):r===this.sessionId||(t.writeHead(404).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32001,message:"Session not found"},id:null})),!1):(t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: Mcp-Session-Id header is required"},id:null})),!1)}validateProtocolVersion(e,t){var r;let s=null!=(r=e.headers["mcp-protocol-version"])?r:j.DEFAULT_NEGOTIATED_PROTOCOL_VERSION;return Array.isArray(s)&&(s=s[s.length-1]),!!j.SUPPORTED_PROTOCOL_VERSIONS.includes(s)||(t.writeHead(400).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:`Bad Request: Unsupported protocol version (supported versions: ${j.SUPPORTED_PROTOCOL_VERSIONS.join(", ")})`},id:null})),!1)}async close(){var e;this._streamMapping.forEach(e=>{e.end()}),this._streamMapping.clear(),this._requestResponseMap.clear(),null==(e=this.onclose)||e.call(this)}async send(e,t){let r=null==t?void 0:t.relatedRequestId;if(((0,j.isJSONRPCResponse)(e)||(0,j.isJSONRPCError)(e))&&(r=e.id),void 0===r){let t;if((0,j.isJSONRPCResponse)(e)||(0,j.isJSONRPCError)(e))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let r=this._streamMapping.get(this._standaloneSseStreamId);if(void 0===r)return;this._eventStore&&(t=await this._eventStore.storeEvent(this._standaloneSseStreamId,e)),this.writeSSEEvent(r,e,t);return}let s=this._requestToStreamMapping.get(r),n=this._streamMapping.get(s);if(!s)throw Error(`No connection established for request ID: ${String(r)}`);if(!this._enableJsonResponse){let t;this._eventStore&&(t=await this._eventStore.storeEvent(s,e)),n&&this.writeSSEEvent(n,e,t)}if((0,j.isJSONRPCResponse)(e)||(0,j.isJSONRPCError)(e)){this._requestResponseMap.set(r,e);let t=Array.from(this._requestToStreamMapping.entries()).filter(([e,t])=>this._streamMapping.get(t)===n).map(([e])=>e);if(t.every(e=>this._requestResponseMap.has(e))){if(!n)throw Error(`No connection established for request ID: ${String(r)}`);if(this._enableJsonResponse){let e={"Content-Type":"application/json"};void 0!==this.sessionId&&(e["mcp-session-id"]=this.sessionId);let r=t.map(e=>this._requestResponseMap.get(e));n.writeHead(200,e),1===r.length?n.end(JSON.stringify(r[0])):n.end(JSON.stringify(r))}else n.end();for(let e of t)this._requestResponseMap.delete(e),this._requestToStreamMapping.delete(e)}}}}var ej=e.i(49719),eX=e.i(10430),eK=e.i(27699);e.i(43477);var ex=class extends eL.ServerResponse{constructor(e,t,r){super(e),this.onEvent=t,this.sessionId=r,this.requestId=crypto.randomUUID(),this.startTime=Date.now()}emitEvent(e){var t;this.onEvent&&this.onEvent((t=O(Y({},e),P({sessionId:this.sessionId,requestId:this.requestId})),O(Y({},t),P({timestamp:Date.now()}))))}startSession(e,t){this.emitEvent({type:"SESSION_STARTED",transport:e,clientInfo:t})}endSession(e){this.emitEvent({type:"SESSION_ENDED",transport:e})}requestReceived(e,t){this.emitEvent({type:"REQUEST_RECEIVED",method:e,parameters:t,status:"success"})}requestCompleted(e,t,r){this.emitEvent({type:"REQUEST_COMPLETED",method:e,result:t,duration:Date.now()-this.startTime,status:r?"error":"success"}),r&&this.error(r,`Error executing request ${e}`,"request")}error(e,t,r="system",s="error"){this.emitEvent({type:"ERROR",error:e,context:t,source:r,severity:s})}end(e,t,r){let s=e,n=t,i=r;return"function"==typeof e?(i=e,s=void 0,n=void 0):"function"==typeof t&&(i=t,n=void 0),super.end(s,n,i)}},eB=new eX.AsyncLocalStorage,eU=new WeakMap,ek=null;function eG(e){return w(this,arguments,function*({redisUrl:e,logger:t}){if(i&&n)return{redis:i,redisPublisher:n};if(!e)throw Error("redisUrl is required");return i=(0,eC.createClient)({url:e}),n=(0,eC.createClient)({url:e}),i.on("error",e=>{t.error("Redis error",e)}),n.on("error",e=>{t.error("Redis error",e)}),yield Promise.all([i.connect(),n.connect()]),{redis:i,redisPublisher:n}})}function eH(e={}){let{method:t="GET",url:r="/",headers:s={},body:n=null,socket:i=new eY.Socket}=e,o=new ew.Readable;if(o._read=()=>{},n){if("string"==typeof n)o.push(n);else if(Buffer.isBuffer(n))o.push(n);else{let e=JSON.stringify(n);o.push(e)}o.push(null)}else o.push(null);let a=new eL.IncomingMessage(i);a.method=t,a.url=r,a.headers=s;let u=e.auth||eB.getStore();return u&&(a.auth=u),a.push=o.push.bind(o),a.read=o.read.bind(o),a.on=o.on.bind(o),a.pipe=o.pipe.bind(o),a}var eq=e.i(20539),eV=e.i(56891);let eW=()=>{try{let{execSync:t}=e.r(74533);try{return t("bunx --version",{stdio:"ignore"}),{command:"bunx",args:[]}}catch{}try{return t("npx --version",{stdio:"ignore"}),{command:"npx",args:["-y"]}}catch{}try{return t("pnpm --version",{stdio:"ignore"}),{command:"pnpm",args:["dlx"]}}catch{}return console.error("[MCP Orchestrator] No package runner found (bunx, npx, or pnpm) - cannot spawn MCP servers"),null}catch(e){return console.error("[MCP Orchestrator] Failed to detect package runner:",e),null}},ez=(async()=>{let t=(0,eq.getMCPClientManager)(),r=()=>{let t={},r=(0,T.join)((0,v.homedir)(),".d3k");try{let{readdirSync:s,existsSync:n}=e.r(2157);if(!n(r))return t;for(let e of s(r).filter(e=>e.endsWith(".json")))try{let s=(0,T.join)(r,e),n=JSON.parse((0,A.readFileSync)(s,"utf-8"));if(n.cdpUrl&&!t.chromeDevtools){let e=n.cdpUrl.replace("ws://","http://"),r=eW();r?t.chromeDevtools={command:r.command,args:[...r.args,"chrome-devtools-mcp@latest","--browserUrl",e],enabled:!0}:console.warn("[MCP Orchestrator] Cannot configure chrome-devtools MCP: no package runner available")}if(t.chromeDevtools)break}catch{}}catch(e){console.warn("[MCP Orchestrator] Failed to read session files:",e)}if(!t.nextjsDev&&!t.svelteDev){let e=eW(),s=null;try{for(let e of(0,A.readdirSync)(r).filter(e=>e.endsWith(".json")))try{let t=(0,T.join)(r,e),n=JSON.parse((0,A.readFileSync)(t,"utf-8"));if(n.framework){s=n.framework;break}}catch{}}catch{}e?"nextjs"===s?(t.nextjsDev={command:e.command,args:[...e.args,"next-devtools-mcp@latest"],enabled:!0},console.log("[MCP Orchestrator] Detected Next.js framework, configuring next-devtools-mcp")):"svelte"===s&&(t.svelteDev={command:e.command,args:[...e.args,"@sveltejs/mcp-server-svelte"],enabled:!0},console.log("[MCP Orchestrator] Detected Svelte framework, configuring @sveltejs/mcp-server-svelte")):console.warn("[MCP Orchestrator] Cannot configure framework MCP: no package runner available")}return t},s=async(e=1e4,t=250)=>{let s=Date.now(),n=!1,i=r();for(;0===Object.keys(i).length&&Date.now()-s<e;)n||(console.log("[MCP Orchestrator] Waiting for session info before connecting downstream MCPs..."),n=!0),await new Promise(e=>setTimeout(e,t)),i=r();return{config:i,waited:n}};try{let{config:e,waited:n}=await s();Object.keys(e).length>0?(await t.initialize(e),console.log(`[MCP Orchestrator] Initialized with ${Object.keys(e).join(", ")}`)):n?console.log("[MCP Orchestrator] No downstream MCPs detected after waiting for session info (will retry)"):console.log("[MCP Orchestrator] No downstream MCPs found yet (will retry)");let i=0,o=setInterval(async()=>{i++;let e=r(),s=!!e.chromeDevtools,n=!!e.nextjsDev,a=!!e.svelteDev,u=t.isConnected("chrome-devtools"),l=t.isConnected("nextjs-dev"),c=t.isConnected("svelte-dev"),f=s&&!u,d=n&&!l,m=a&&!c;if(f||d||m){let r=[f&&"chrome-devtools",d&&"nextjs-dev",m&&"svelte-dev"].filter(Boolean);console.log(`[MCP Orchestrator] Retry ${i}: Attempting to connect to ${r.join(", ")}`);try{await t.initialize(e),console.log("[MCP Orchestrator] Successfully connected to downstream MCPs")}catch(e){console.warn(`[MCP Orchestrator] Retry ${i} failed:`,e)}}if(i>=10||u&&(!n||l)&&(!a||c)){clearInterval(o);let e=t.getConnectedMCPs();console.log(`[MCP Orchestrator] Stopped retry loop (connected: ${e.join(", ")||"none"})`)}},2e3)}catch(e){console.warn("[MCP Orchestrator] Failed to initialize downstream MCPs:",e)}})().catch(e=>{console.error("[MCP Orchestrator] Failed to initialize downstream MCPs:",e)});process.on("SIGTERM",async()=>{console.log("[MCP Orchestrator] Received SIGTERM, cleaning up...");try{await (0,eq.getMCPClientManager)().disconnect(),console.log("[MCP Orchestrator] Cleanup complete")}catch(e){console.error("[MCP Orchestrator] Error during cleanup:",e)}process.exit(0)}),process.on("SIGINT",async()=>{console.log("[MCP Orchestrator] Received SIGINT, cleaning up...");try{await (0,eq.getMCPClientManager)().disconnect(),console.log("[MCP Orchestrator] Cleanup complete")}catch(e){console.error("[MCP Orchestrator] Error during cleanup:",e)}process.exit(0)});let eZ=(r=function(e,t={},r={redisUrl:process.env.REDIS_URL||process.env.KV_URL,streamableHttpEndpoint:"/mcp",sseEndpoint:"/sse",sseMessageEndpoint:"/message",basePath:"",maxDuration:60,verboseLogs:!1,disableSse:!1}){let s,{redisUrl:n,basePath:i,streamableHttpEndpoint:o,sseEndpoint:a,sseMessageEndpoint:u,maxDuration:l,verboseLogs:c,disableSse:f}=r,{serverInfo:d={name:"mcp-typescript server on vercel",version:"0.1.0"}}=t,m=((e,t)=>{var r={};for(var s in e)M.call(e,s)&&0>t.indexOf(s)&&(r[s]=e[s]);if(null!=e&&D)for(var s of D(e))0>t.indexOf(s)&&L.call(e,s)&&(r[s]=e[s]);return r})(t,["serverInfo"]),{streamableHttpEndpoint:p,sseEndpoint:h,sseMessageEndpoint:_}=function({basePath:e,streamableHttpEndpoint:t="/mcp",sseEndpoint:r="/sse",sseMessageEndpoint:s="/message"}){let n,{streamableHttpEndpoint:i,sseEndpoint:o,sseMessageEndpoint:a}=null!=e?(n=e.replace(/\/$/,""),{streamableHttpEndpoint:`${n}/mcp`,sseEndpoint:`${n}/sse`,sseMessageEndpoint:`${n}/message`}):{streamableHttpEndpoint:t,sseEndpoint:r,sseMessageEndpoint:s};return{streamableHttpEndpoint:i,sseEndpoint:o,sseMessageEndpoint:a}}({basePath:i,streamableHttpEndpoint:o,sseEndpoint:a,sseMessageEndpoint:u}),g=function(e=!1){return{log:(...t)=>{e&&console.log(...t)},error:(...t)=>{e&&console.error(...t)},warn:(...t)=>{e&&console.warn(...t)},info:(...t)=>{e&&console.info(...t)},debug:(...t)=>{e&&console.debug(...t)}}}(c),E=[],S=new eF({sessionIdGenerator:void 0});return ek||(ek=setInterval(()=>{let e=Date.now();E=E.filter(t=>{var r;let s=eU.get(t);if(!s){g.log("Removing orphaned server without metadata");try{(null==t?void 0:t.server)&&t.server.close()}catch(e){g.error("Error closing orphaned server:",e)}return!1}let n=e-s.createdAt.getTime();if(n>3e5){g.log(`Removing stale server (session ${s.sessionId}, age: ${n}ms)`);try{(null==t?void 0:t.server)&&t.server.close(),(null==(r=s.transport)?void 0:r.close)&&s.transport.close()}catch(e){g.error("Error closing stale server:",e)}return eU.delete(t),!1}return!0})},3e4)),function(i,o){return w(this,null,function*(){var a,u,c;let y=new URL(i.url||"","https://example.com");if(y.pathname===p){if("GET"===i.method){g.log("Received GET MCP request"),o.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}));return}if("DELETE"===i.method){g.log("Received DELETE MCP request"),o.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}));return}if("POST"===i.method){let t,n=new ex(eH(),r.onEvent);s||(s=new eb(d,m),yield e(s),yield s.connect(S)),t=(i.headers.get("content-type")||"").includes("application/json")?yield i.json():yield i.text();let a=eH({method:i.method,url:i.url,headers:Object.fromEntries(i.headers),body:t,auth:i.auth}),u=new ex(a,r.onEvent);Object.assign(u,o);try{yield S.handleRequest(a,u),"object"==typeof t&&t&&"method"in t&&n.requestCompleted(t.method,t)}catch(e){throw"object"==typeof t&&t&&"method"in t&&n.requestCompleted(t.method,void 0,e instanceof Error?e:String(e)),e}}}else if(y.pathname===h){if(f){o.statusCode=404,o.end("Not found");return}if("GET"!==i.method){g.log(`Rejected SSE connection with method ${i.method}`),o.writeHead(405,{"Content-Type":"text/plain"}).end("Method Not Allowed");return}let s=i.headers.get("accept")||i.headers.get("Accept");if(s&&!s.includes("text/event-stream")&&!s.includes("*/*")&&!s.includes("text/*")){g.log(`Rejected SSE connection with incompatible Accept header: ${s}`),o.writeHead(406,{"Content-Type":"text/plain"}).end("Not Acceptable");return}let{redis:m,redisPublisher:p}=yield eG({redisUrl:n,logger:g});g.log("Got new SSE connection"),(0,ej.default)(_,"sseMessageEndpoint is required");let h=new eM(_,o),S=h.sessionId,y=new ex(eH(),r.onEvent,S);y.startSession("SSE",{userAgent:null!=(a=i.headers.get("user-agent"))?a:void 0,ip:null!=(c=null!=(u=i.headers.get("x-forwarded-for"))?u:i.headers.get("x-real-ip"))?c:void 0});let b=new eb(d,t),I=!1,R=null,A=null,v=null,T=null,N=[],O=e=>w(this,null,function*(){if(!I){if(I=!0,g.log(`Cleaning up SSE connection: ${e}`),A&&(clearTimeout(A),A=null),R&&(clearInterval(R),R=null),v&&(i.signal.removeEventListener("abort",v),v=null),T)try{yield m.unsubscribe(`requests:${S}`,T),g.log(`Unsubscribed from requests:${S}`)}catch(e){g.error("Error unsubscribing from Redis:",e)}try{(null==b?void 0:b.server)&&(yield b.server.close()),(null==h?void 0:h.close)&&(yield h.close())}catch(e){g.error("Error closing server/transport:",e)}E=E.filter(e=>e!==b),eU.delete(b),y.endSession("SSE"),N=[],o.headersSent||(o.statusCode=200,o.end())}});try{let t,s=function(e,...t){N.push({type:e,messages:t})};yield e(b),E.push(b),eU.set(b,{sessionId:S,createdAt:new Date,transport:h}),b.server.onclose=()=>{O("server closed")},T=e=>w(this,null,function*(){g.log("Received message from Redis",e),s("log","Received message from Redis",e);let t=JSON.parse(e),n=eH({method:t.method,url:t.url,headers:t.headers,body:t.body}),i=new ex(n,r.onEvent,S),o=100,a="";i.writeHead=e=>(o=e,i),i.end=e=>(a=e,i);try{if(yield h.handlePostMessage(n,i),"object"==typeof t.body&&t.body&&"method"in t.body)try{let e=JSON.parse(a);y.requestCompleted(t.body.method,e)}catch(e){y.requestCompleted(t.body.method,a)}}catch(e){throw y.error(e instanceof Error?e:String(e),"Error handling SSE message","session"),e}yield p.publish(`responses:${S}:${t.requestId}`,JSON.stringify({status:o,body:a})),o>=200&&o<300?s("log",`Request ${S}:${t.requestId} succeeded: ${a}`):(s("error",`Message for ${S}:${t.requestId} failed with status ${o}: ${a}`),y.error(`Request failed with status ${o}`,a,"session"))}),R=setInterval(()=>{for(let e of N)g[e.type](...e.messages);N=[]},100),yield m.subscribe(`requests:${S}`,T),g.log(`Subscribed to requests:${S}`);let n=new Promise(e=>{t=e,A=setTimeout(()=>{e("max duration reached")},(null!=l?l:60)*1e3)});v=()=>t("client hang up"),i.signal.addEventListener("abort",v),o.on("close",()=>{O("response closed")}),o.on("error",e=>{g.error("Response error:",e),O("response error")}),yield b.connect(h);let a=yield n;g.log(a),yield O(String(a))}catch(e){throw g.error("Error in SSE handler:",e),yield O("error during setup"),e}}else if(y.pathname===_){let e;if(f){o.statusCode=404,o.end("Not found");return}let{redis:t,redisPublisher:r}=yield eG({redisUrl:n,logger:g});g.log("Received message");let s=yield i.text();try{e=JSON.parse(s)}catch(t){e=s}let a=y.searchParams.get("sessionId")||"";if(!a){o.statusCode=400,o.end("No sessionId provided");return}let u=crypto.randomUUID(),l={requestId:u,url:i.url||"",method:i.method||"",body:e,headers:Object.fromEntries(i.headers.entries())},c=null,d=!1,m=!1,p=()=>w(this,null,function*(){if(!m){m=!0,c&&(clearTimeout(c),c=null);try{yield t.unsubscribe(`responses:${a}:${u}`)}catch(e){g.error("Error unsubscribing from Redis response channel:",e)}}}),h=(e,t)=>w(this,null,function*(){d||(d=!0,o.statusCode=e,o.end(t),yield p())}),_=e=>w(this,null,function*(){try{let t=JSON.parse(e);yield h(t.status,t.body)}catch(e){g.error("Failed to parse response message:",e),yield h(500,"Internal server error")}});try{yield t.subscribe(`responses:${a}:${u}`,_),yield r.publish(`requests:${a}`,JSON.stringify(l)),g.log(`Published requests:${a}`,l),c=setTimeout(()=>w(this,null,function*(){yield h(408,"Request timed out")}),1e4),o.on("close",()=>w(this,null,function*(){d||(d=!0,yield p())})),o.on("error",e=>w(this,null,function*(){g.error("Response error in message handler:",e),d||(d=!0,yield p())}))}catch(e){g.error("Error in message handler:",e),yield p(),d||(o.statusCode=500,o.end("Internal server error"))}}else o.statusCode=404,o.end("Not found")})}}(async t=>{let r=(0,eq.getMCPClientManager)();await ez,await r.waitForInitialTools();let s=new Map,n=(e,n)=>{let i=`${e}_${n.name}`,o=s.get(i),a=`[${e}] ${n.description||""}`,u={...n.annotations??{},proxiedFrom:e,originalInputSchema:n.inputSchema};if(o)return o.registered.update({description:a,annotations:u}),!1;try{let o=t.tool(i,a,{},async t=>r.callTool(e,n.name,t));return o.inputSchema=eE.z.object({}).passthrough(),o.update({annotations:u}),s.set(i,{mcpName:e,toolName:n.name,registered:o}),console.log(`[MCP Orchestrator] Registered proxied tool ${i}`),!0}catch(e){return console.warn(`[MCP Orchestrator] Failed to register proxied tool ${i}:`,e),!1}},i=r.getAllTools();0===i.length?console.log("[MCP Orchestrator] No downstream MCP tools available during initial registration"):console.log(`[MCP Orchestrator] Registering ${i.length} downstream MCP tools`);let o=0;for(let{mcpName:e,tool:t}of i)n(e,t)&&o++;o>0&&t.sendToolListChanged(),r.onToolsUpdated(({mcpName:e,tools:r})=>{if(0===r.length){(e=>{let t=0;for(let[r,n]of s.entries())if(n.mcpName===e)try{n.registered.remove(),s.delete(r),t++,console.log(`[MCP Orchestrator] Removed proxied tool ${r}`)}catch(e){console.warn(`[MCP Orchestrator] Failed to remove proxied tool ${r}:`,e)}return t})(e)>0&&t.sendToolListChanged();return}let i=0;for(let t of r)n(e,t)&&i++;i>0&&t.sendToolListChanged()}),t.tool("fix_my_app",eV.TOOL_DESCRIPTIONS.fix_my_app,{projectName:eE.z.string().optional().describe("Project name to debug (if multiple dev3000 instances are running)"),focusArea:eE.z.string().optional().describe("Specific area: 'build', 'runtime', 'network', 'ui', 'all' (default: 'all')"),mode:eE.z.enum(["snapshot","bisect","monitor"]).optional().describe("Fix mode: 'snapshot' (fix now), 'bisect' (fix regression), 'monitor' (fix continuously)"),waitForUserInteraction:eE.z.boolean().optional().describe("In bisect mode: capture timestamp, wait for user testing, then analyze (default: false)"),timeRangeMinutes:eE.z.number().optional().describe("Minutes to analyze back from now (default: 10)"),includeTimestampInstructions:eE.z.boolean().optional().describe("Show timestamp-based debugging instructions for manual workflow (default: true)"),integrateNextjs:eE.z.boolean().optional().describe("Auto-detected based on available MCPs - enables Next.js-specific analysis"),integrateChromeDevtools:eE.z.boolean().optional().describe("Auto-detected based on available MCPs - enables Chrome DevTools integration"),returnRawData:eE.z.boolean().optional().describe("Return structured data for Claude orchestration instead of formatted text"),createPR:eE.z.boolean().optional().describe("Create a PR for the highest priority issue (default: false)")},async e=>(0,eV.fixMyApp)(e)),t.tool("fix_my_jank","🎯 **JANK & PERFORMANCE FIXER** - Specialized alias for detecting and fixing layout shifts, CLS issues, and performance problems. Automatically focuses on performance analysis and jank detection from passive screencast captures.\n\n💡 This is an alias for fix_my_app with focusArea='performance', perfect for 'fix my jank' or 'why is my page janky' requests!",{projectName:eE.z.string().optional().describe("Project name to debug (if multiple dev3000 instances are running)"),timeRangeMinutes:eE.z.number().optional().describe("Minutes to analyze back from now (default: 10)")},async e=>(0,eV.fixMyApp)({...e,focusArea:"performance"})),t.tool("execute_browser_action",eV.TOOL_DESCRIPTIONS.execute_browser_action,{action:eE.z.enum(["click","navigate","screenshot","evaluate","scroll","type"]).describe("The browser action to perform"),params:eE.z.record(eE.z.unknown()).optional().describe("Parameters for the action (e.g., {x: 100, y: 200} for click, {url: 'https://...'} for navigate)")},async e=>(0,eV.executeBrowserAction)(e)),t.tool("analyze_visual_diff","🔍 **VISUAL DIFF ANALYZER** - Analyzes two screenshots and provides a verbal description of the visual differences. Perfect for understanding what changed between before/after frames in layout shift detection.\n\n💡 This tool loads both images and describes what elements appeared, moved, or changed that could have caused the layout shift.",{beforeImageUrl:eE.z.string().describe("URL of the 'before' screenshot"),afterImageUrl:eE.z.string().describe("URL of the 'after' screenshot"),context:eE.z.string().optional().describe("Optional context about what to look for (e.g., 'navigation header shift')")},async t=>{let{analyzeVisualDiff:r}=await e.A(2603);return r(t)}),t.tool("find_component_source",eV.TOOL_DESCRIPTIONS.find_component_source,{selector:eE.z.string().describe("CSS selector for the DOM element (e.g., 'nav', '.header', '#main'). Use lowercase for tag names."),projectName:eE.z.string().optional().describe("Project name (if multiple dev3000 instances are running)")},async e=>(0,eV.findComponentSource)(e)),t.tool("restart_dev_server",eV.TOOL_DESCRIPTIONS.restart_dev_server,{projectName:eE.z.string().optional().describe("Project name (if multiple dev3000 instances are running)")},async e=>(0,eV.restartDevServer)(e)),t.tool("crawl_app",eV.TOOL_DESCRIPTIONS.crawl_app,{depth:eE.z.union([eE.z.number().int().min(1),eE.z.literal("all")]).optional().describe("Crawl depth: number (1=homepage only, 2=homepage+next level, etc.) or 'all' for exhaustive (default: 1)"),projectName:eE.z.string().optional().describe("Project name (if multiple dev3000 instances are running)")},async e=>(0,eV.crawlApp)(e))},{},{basePath:"/",maxDuration:60,verboseLogs:!0}),e=>(function(e,t){let r,s=new Promise(e=>{r=e});return new Promise(n=>{let i,o,a=!1,u=!1,l=200,c=(e,t)=>{if("string"==typeof t)throw Error("Status message of writeHead not supported");return u=!0,r({statusCode:l=e,headers:o=t}),p},f=[],d=(e,t)=>{if(t)throw Error("Encoding not supported");if(e instanceof Buffer)throw Error("Buffer not supported");return(u||c(l,o),i)?i.enqueue(new TextEncoder().encode(e)):f.push(new TextEncoder().encode(e)),!0},m=new eK.EventEmitter,p={writeHead:c,write:d,end:e=>{if(e&&d(e),!i)return a=!0,p;try{i.close()}catch(e){}return p},on:(e,t)=>(m.on(e,t),p),get statusCode(){return l},set statusCode(code){l=code,u&&r({statusCode:l,headers:o})}};e.addEventListener("abort",()=>{m.emit("close")}),t(p),w(this,null,function*(){let e=yield s;n(new Response(new ReadableStream({start(e){for(let t of(i=e,f))i.enqueue(t);a&&i.close()}}),{status:e.statusCode,headers:e.headers}))})})})(e.signal,t=>{r(e,t)}));e.s(["GET",()=>eZ,"POST",()=>eZ],47164);var e$=e.i(47164);let eJ=new o.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/mcp/route",pathname:"/mcp",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/mcp-server/app/mcp/route.ts",nextConfigOutput:"",userland:e$}),{workAsyncStorage:eQ,workUnitAsyncStorage:e0,serverHooks:e1}=eJ;function e4(){return(0,u.patchFetch)({workAsyncStorage:eQ,workUnitAsyncStorage:e0})}async function e8(e,t,r){eJ.isDev&&(0,l.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let s="/mcp/route";s=s.replace(/\/index$/,"")||"/";let n=await eJ.prepare(e,t,{srcPage:s,multiZoneDraftMode:!1});if(!n)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:i,params:o,nextConfig:u,parsedUrl:A,isDraftMode:v,prerenderManifest:T,routerServerContext:N,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,resolvedPathname:D,clientReferenceManifest:M,serverActionsManifest:L}=n,C=(0,m.normalizeAppPath)(s),Y=!!(T.dynamicRoutes[C]||T.routes[D]),w=async()=>((null==N?void 0:N.render404)?await N.render404(e,t,A,!1):t.end("This page could not be found"),null);if(Y&&!v){let e=!!T.routes[D],t=T.dynamicRoutes[C];if(t&&!1===t.fallback&&!e){if(u.experimental.adapterPath)return await w();throw new I.NoFallbackError}}let F=null;!Y||eJ.isDev||v||(F="/index"===(F=D)?"/":F);let j=!0===eJ.isDev||!Y,X=Y&&!j;L&&M&&(0,f.setReferenceManifestsSingleton)({page:s,clientReferenceManifest:M,serverActionsManifest:L,serverModuleMap:(0,d.createServerModuleMap)({serverActionsManifest:L})});let K=e.method||"GET",x=(0,c.getTracer)(),B=x.getActiveScopeSpan(),U={params:o,prerenderManifest:T,renderOpts:{experimental:{authInterrupts:!!u.experimental.authInterrupts},cacheComponents:!!u.cacheComponents,supportsDynamicResponse:j,incrementalCache:(0,l.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:u.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s)=>eJ.onRequestError(e,t,s,N)},sharedContext:{buildId:i}},k=new p.NodeNextRequest(e),G=new p.NodeNextResponse(t),H=h.NextRequestAdapter.fromNodeNextRequest(k,(0,h.signalFromNodeResponse)(t));try{let n=async e=>eJ.handle(H,U).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=x.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==_.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${K} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${K} ${s}`)}),i=!!(0,l.getRequestMeta)(e,"minimalMode"),o=async o=>{var l,c;let f=async({previousCacheEntry:a})=>{try{if(!i&&O&&P&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await n(o);e.fetchMetrics=U.renderOpts.fetchMetrics;let u=U.renderOpts.pendingWaitUntil;u&&r.waitUntil&&(r.waitUntil(u),u=void 0);let l=U.renderOpts.collectedTags;if(!Y)return await (0,E.sendResponse)(k,G,s,U.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,S.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[b.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==U.renderOpts.collectedRevalidate&&!(U.renderOpts.collectedRevalidate>=b.INFINITE_CACHE)&&U.renderOpts.collectedRevalidate,n=void 0===U.renderOpts.collectedExpire||U.renderOpts.collectedExpire>=b.INFINITE_CACHE?void 0:U.renderOpts.collectedExpire;return{value:{kind:R.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==a?void 0:a.isStale)&&await eJ.onRequestError(e,t,{routerKind:"App Router",routePath:s,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:X,isOnDemandRevalidate:O})},N),t}},d=await eJ.handleResponse({req:e,nextConfig:u,cacheKey:F,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:T,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,responseGenerator:f,waitUntil:r.waitUntil,isMinimalMode:i});if(!Y)return null;if((null==d||null==(l=d.value)?void 0:l.kind)!==R.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(c=d.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",O?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),v&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,S.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&Y||m.delete(b.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,y.getCacheControlHeader)(d.cacheControl)),await (0,E.sendResponse)(k,G,new Response(d.value.body,{headers:m,status:d.value.status||200})),null};B?await o(B):await x.withPropagatedContext(e.headers,()=>x.trace(_.BaseServerSpan.handleRequest,{spanName:`${K} ${s}`,kind:c.SpanKind.SERVER,attributes:{"http.method":K,"http.target":e.url}},o))}catch(t){if(t instanceof I.NoFallbackError||await eJ.onRequestError(e,t,{routerKind:"App Router",routePath:C,routeType:"route",revalidateReason:(0,g.getRevalidateReason)({isStaticGeneration:X,isOnDemandRevalidate:O})}),Y)throw t;return await (0,E.sendResponse)(k,G,new Response(null,{status:500})),null}}e.s(["handler",()=>e8,"patchFetch",()=>e4,"routeModule",()=>eJ,"serverHooks",()=>e1,"workAsyncStorage",()=>eQ,"workUnitAsyncStorage",()=>e0],58891)}];
16
16
 
17
17
  //# sourceMappingURL=%5Broot-of-the-server%5D__0691849a._.js.map