dev3000 0.0.156 → 0.0.159
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.
- package/README.md +3 -1
- package/dist/cdp-monitor.d.ts +2 -3
- package/dist/cdp-monitor.d.ts.map +1 -1
- package/dist/cdp-monitor.js +5 -11
- package/dist/cdp-monitor.js.map +1 -1
- package/dist/cli.js +182 -161
- package/dist/cli.js.map +1 -1
- package/dist/commands/cloud-check-pr.js +2 -1
- package/dist/commands/cloud-check-pr.js.map +1 -1
- package/dist/commands/cloud-fix.d.ts +1 -2
- package/dist/commands/cloud-fix.d.ts.map +1 -1
- package/dist/commands/cloud-fix.js +49 -685
- package/dist/commands/cloud-fix.js.map +1 -1
- package/dist/components/PackageSelector.d.ts +3 -2
- package/dist/components/PackageSelector.d.ts.map +1 -1
- package/dist/components/PackageSelector.js +9 -4
- package/dist/components/PackageSelector.js.map +1 -1
- package/dist/dev-environment.d.ts +9 -40
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +245 -542
- package/dist/dev-environment.js.map +1 -1
- package/dist/skills/d3k/SKILL.md +35 -2
- package/dist/src/tui-interface-impl.tsx +2 -12
- package/dist/tui-interface-impl.d.ts +0 -1
- package/dist/tui-interface-impl.d.ts.map +1 -1
- package/dist/tui-interface-impl.js +3 -7
- package/dist/tui-interface-impl.js.map +1 -1
- package/dist/tui-interface-opentui.d.ts +0 -1
- package/dist/tui-interface-opentui.d.ts.map +1 -1
- package/dist/tui-interface-opentui.js +26 -10
- package/dist/tui-interface-opentui.js.map +1 -1
- package/dist/tui-interface.d.ts +0 -1
- package/dist/tui-interface.d.ts.map +1 -1
- package/dist/tui-interface.js.map +1 -1
- package/dist/utils/agent-browser.d.ts.map +1 -1
- package/dist/utils/agent-browser.js +18 -13
- package/dist/utils/agent-browser.js.map +1 -1
- package/dist/utils/agent-selection.d.ts +1 -0
- package/dist/utils/agent-selection.d.ts.map +1 -1
- package/dist/utils/agent-selection.js +26 -1
- package/dist/utils/agent-selection.js.map +1 -1
- package/dist/utils/d3k-dir.d.ts +3 -0
- package/dist/utils/d3k-dir.d.ts.map +1 -0
- package/dist/utils/d3k-dir.js +12 -0
- package/dist/utils/d3k-dir.js.map +1 -0
- package/dist/utils/skill-installer.d.ts +7 -7
- package/dist/utils/skill-installer.d.ts.map +1 -1
- package/dist/utils/skill-installer.js +131 -18
- package/dist/utils/skill-installer.js.map +1 -1
- package/dist/utils/user-config.d.ts +0 -1
- package/dist/utils/user-config.d.ts.map +1 -1
- package/dist/utils/user-config.js +0 -13
- package/dist/utils/user-config.js.map +1 -1
- package/package.json +9 -29
- package/src/tui-interface-impl.tsx +2 -12
- package/dist/commands/cloud-fix-workflow.d.ts +0 -16
- package/dist/commands/cloud-fix-workflow.d.ts.map +0 -1
- package/dist/commands/cloud-fix-workflow.js +0 -153
- package/dist/commands/cloud-fix-workflow.js.map +0 -1
- package/dist/commands/restart.d.ts +0 -8
- package/dist/commands/restart.d.ts.map +0 -1
- package/dist/commands/restart.js +0 -92
- package/dist/commands/restart.js.map +0 -1
- package/dist/utils/mcp-configs.d.ts +0 -6
- package/dist/utils/mcp-configs.d.ts.map +0 -1
- package/dist/utils/mcp-configs.js +0 -54
- package/dist/utils/mcp-configs.js.map +0 -1
- package/mcp-server/.next/BUILD_ID +0 -1
- package/mcp-server/.next/app-path-routes-manifest.json +0 -22
- package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js +0 -500
- package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js.map +0 -11
- package/mcp-server/.next/build/chunks/[root-of-the-server]__6e020478._.js +0 -441
- package/mcp-server/.next/build/chunks/[root-of-the-server]__6e020478._.js.map +0 -7
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js +0 -205
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js.map +0 -8
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +0 -500
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +0 -11
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_7988927e._.js +0 -13
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_7988927e._.js.map +0 -5
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_1efa112f._.js +0 -12
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_1efa112f._.js.map +0 -5
- package/mcp-server/.next/build/chunks/[turbopack]_runtime.js +0 -795
- package/mcp-server/.next/build/chunks/[turbopack]_runtime.js.map +0 -10
- package/mcp-server/.next/build/chunks/node_modules__bun_19755e4f._.js +0 -6758
- package/mcp-server/.next/build/chunks/node_modules__bun_19755e4f._.js.map +0 -47
- package/mcp-server/.next/build/package.json +0 -1
- package/mcp-server/.next/build/postcss.js +0 -6
- package/mcp-server/.next/build/postcss.js.map +0 -5
- package/mcp-server/.next/build/webpack-loaders.js +0 -6
- package/mcp-server/.next/build/webpack-loaders.js.map +0 -5
- package/mcp-server/.next/build-manifest.json +0 -20
- package/mcp-server/.next/export-marker.json +0 -6
- package/mcp-server/.next/fallback-build-manifest.json +0 -12
- package/mcp-server/.next/images-manifest.json +0 -66
- package/mcp-server/.next/next-minimal-server.js.nft.json +0 -1
- package/mcp-server/.next/next-server.js.nft.json +0 -1
- package/mcp-server/.next/package.json +0 -1
- package/mcp-server/.next/prerender-manifest.json +0 -85
- package/mcp-server/.next/required-server-files.js +0 -164
- package/mcp-server/.next/required-server-files.json +0 -164
- package/mcp-server/.next/routes-manifest.json +0 -171
- package/mcp-server/.next/server/app/_global-error/page/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/_global-error/page/build-manifest.json +0 -17
- package/mcp-server/.next/server/app/_global-error/page/next-font-manifest.json +0 -6
- package/mcp-server/.next/server/app/_global-error/page/react-loadable-manifest.json +0 -1
- package/mcp-server/.next/server/app/_global-error/page/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/_global-error/page.js +0 -10
- package/mcp-server/.next/server/app/_global-error/page.js.map +0 -5
- package/mcp-server/.next/server/app/_global-error/page.js.nft.json +0 -1
- package/mcp-server/.next/server/app/_global-error/page_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/_global-error.html +0 -2
- package/mcp-server/.next/server/app/_global-error.meta +0 -15
- package/mcp-server/.next/server/app/_global-error.rsc +0 -12
- package/mcp-server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +0 -5
- package/mcp-server/.next/server/app/_global-error.segments/_full.segment.rsc +0 -12
- package/mcp-server/.next/server/app/_global-error.segments/_head.segment.rsc +0 -5
- package/mcp-server/.next/server/app/_global-error.segments/_index.segment.rsc +0 -4
- package/mcp-server/.next/server/app/_global-error.segments/_tree.segment.rsc +0 -1
- package/mcp-server/.next/server/app/_not-found/page/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/_not-found/page/build-manifest.json +0 -17
- package/mcp-server/.next/server/app/_not-found/page/next-font-manifest.json +0 -6
- package/mcp-server/.next/server/app/_not-found/page/react-loadable-manifest.json +0 -1
- package/mcp-server/.next/server/app/_not-found/page/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/_not-found/page.js +0 -13
- package/mcp-server/.next/server/app/_not-found/page.js.map +0 -5
- package/mcp-server/.next/server/app/_not-found/page.js.nft.json +0 -1
- package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/_not-found.html +0 -1
- package/mcp-server/.next/server/app/_not-found.meta +0 -16
- package/mcp-server/.next/server/app/_not-found.rsc +0 -14
- package/mcp-server/.next/server/app/_not-found.segments/_full.segment.rsc +0 -14
- package/mcp-server/.next/server/app/_not-found.segments/_head.segment.rsc +0 -5
- package/mcp-server/.next/server/app/_not-found.segments/_index.segment.rsc +0 -6
- package/mcp-server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
- package/mcp-server/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -4
- package/mcp-server/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -2
- package/mcp-server/.next/server/app/api/jank/[session]/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/jank/[session]/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/jank/[session]/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/jank/[session]/route.js +0 -10
- package/mcp-server/.next/server/app/api/jank/[session]/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/jank/[session]/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/jank/[session]/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/logs/append/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/logs/append/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/logs/append/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/logs/append/route.js +0 -6
- package/mcp-server/.next/server/app/api/logs/append/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/logs/append/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/logs/append/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/logs/head/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/logs/head/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/logs/head/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/logs/head/route.js +0 -6
- package/mcp-server/.next/server/app/api/logs/head/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/logs/head/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/logs/head/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/logs/list/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/logs/list/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/logs/list/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/logs/list/route.js +0 -6
- package/mcp-server/.next/server/app/api/logs/list/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/logs/list/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/logs/rotate/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/logs/rotate/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/logs/rotate/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/logs/rotate/route.js +0 -8
- package/mcp-server/.next/server/app/api/logs/rotate/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/logs/rotate/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/logs/rotate/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/logs/stream/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/logs/stream/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/logs/stream/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/logs/stream/route.js +0 -6
- package/mcp-server/.next/server/app/api/logs/stream/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/logs/stream/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/logs/stream/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/logs/tail/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/logs/tail/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/logs/tail/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/logs/tail/route.js +0 -6
- package/mcp-server/.next/server/app/api/logs/tail/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/logs/tail/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/logs/tail/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/orchestrator/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/orchestrator/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/orchestrator/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/orchestrator/route.js +0 -9
- package/mcp-server/.next/server/app/api/orchestrator/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/orchestrator/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/orchestrator/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js +0 -8
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/screenshots/capture/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/screenshots/capture/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/screenshots/capture/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/screenshots/capture/route.js +0 -9
- package/mcp-server/.next/server/app/api/screenshots/capture/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/screenshots/capture/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/screenshots/capture/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/screenshots/clear/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/screenshots/clear/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/screenshots/clear/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/screenshots/clear/route.js +0 -8
- package/mcp-server/.next/server/app/api/screenshots/clear/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/screenshots/clear/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/screenshots/clear/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/screenshots/list/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/screenshots/list/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/screenshots/list/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/screenshots/list/route.js +0 -8
- package/mcp-server/.next/server/app/api/screenshots/list/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/screenshots/list/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/screenshots/list/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/teams/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/teams/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/teams/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/teams/route.js +0 -8
- package/mcp-server/.next/server/app/api/teams/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/teams/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/teams/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/api/tools/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/api/tools/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/api/tools/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/api/tools/route.js +0 -8
- package/mcp-server/.next/server/app/api/tools/route.js.map +0 -5
- package/mcp-server/.next/server/app/api/tools/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/api/tools/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/index.html +0 -1
- package/mcp-server/.next/server/app/index.meta +0 -14
- package/mcp-server/.next/server/app/index.rsc +0 -18
- package/mcp-server/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -9
- package/mcp-server/.next/server/app/index.segments/_full.segment.rsc +0 -18
- package/mcp-server/.next/server/app/index.segments/_head.segment.rsc +0 -5
- package/mcp-server/.next/server/app/index.segments/_index.segment.rsc +0 -6
- package/mcp-server/.next/server/app/index.segments/_tree.segment.rsc +0 -2
- package/mcp-server/.next/server/app/logs/page/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/logs/page/build-manifest.json +0 -17
- package/mcp-server/.next/server/app/logs/page/next-font-manifest.json +0 -6
- package/mcp-server/.next/server/app/logs/page/react-loadable-manifest.json +0 -1
- package/mcp-server/.next/server/app/logs/page/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/logs/page.js +0 -16
- package/mcp-server/.next/server/app/logs/page.js.map +0 -5
- package/mcp-server/.next/server/app/logs/page.js.nft.json +0 -1
- package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/mcp/route/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/mcp/route/build-manifest.json +0 -11
- package/mcp-server/.next/server/app/mcp/route/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/mcp/route.js +0 -11
- package/mcp-server/.next/server/app/mcp/route.js.map +0 -5
- package/mcp-server/.next/server/app/mcp/route.js.nft.json +0 -1
- package/mcp-server/.next/server/app/mcp/route_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/page/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/page/build-manifest.json +0 -17
- package/mcp-server/.next/server/app/page/next-font-manifest.json +0 -6
- package/mcp-server/.next/server/app/page/react-loadable-manifest.json +0 -1
- package/mcp-server/.next/server/app/page/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/page.js +0 -15
- package/mcp-server/.next/server/app/page.js.map +0 -5
- package/mcp-server/.next/server/app/page.js.nft.json +0 -1
- package/mcp-server/.next/server/app/page_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app/video/[session]/page/app-paths-manifest.json +0 -3
- package/mcp-server/.next/server/app/video/[session]/page/build-manifest.json +0 -17
- package/mcp-server/.next/server/app/video/[session]/page/next-font-manifest.json +0 -6
- package/mcp-server/.next/server/app/video/[session]/page/react-loadable-manifest.json +0 -1
- package/mcp-server/.next/server/app/video/[session]/page/server-reference-manifest.json +0 -4
- package/mcp-server/.next/server/app/video/[session]/page.js +0 -15
- package/mcp-server/.next/server/app/video/[session]/page.js.map +0 -5
- package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +0 -1
- package/mcp-server/.next/server/app/video/[session]/page_client-reference-manifest.js +0 -2
- package/mcp-server/.next/server/app-paths-manifest.json +0 -22
- package/mcp-server/.next/server/chunks/250ae__next-internal_server_app_api_screenshots_[filename]_route_actions_4f8d6e37.js +0 -3
- package/mcp-server/.next/server/chunks/250ae__next-internal_server_app_api_screenshots_[filename]_route_actions_4f8d6e37.js.map +0 -1
- package/mcp-server/.next/server/chunks/250ae__next-internal_server_app_api_screenshots_capture_route_actions_4034f26c.js +0 -3
- package/mcp-server/.next/server/chunks/250ae__next-internal_server_app_api_screenshots_capture_route_actions_4034f26c.js.map +0 -1
- package/mcp-server/.next/server/chunks/250ae__next-internal_server_app_api_screenshots_clear_route_actions_e26206f4.js +0 -3
- package/mcp-server/.next/server/chunks/250ae__next-internal_server_app_api_screenshots_clear_route_actions_e26206f4.js.map +0 -1
- package/mcp-server/.next/server/chunks/[externals]__0e1fd2ca._.js +0 -3
- package/mcp-server/.next/server/chunks/[externals]__0e1fd2ca._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[externals]_next_dist_2a398dc7._.js +0 -3
- package/mcp-server/.next/server/chunks/[externals]_next_dist_2a398dc7._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[externals]_node:crypto_c20cce38._.js +0 -3
- package/mcp-server/.next/server/chunks/[externals]_node:crypto_c20cce38._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__1dca9894._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__1dca9894._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__21541e6b._.js +0 -11
- package/mcp-server/.next/server/chunks/[root-of-the-server]__21541e6b._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__2f95edf0._.js +0 -17
- package/mcp-server/.next/server/chunks/[root-of-the-server]__2f95edf0._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__377f76d7._.js +0 -7
- package/mcp-server/.next/server/chunks/[root-of-the-server]__377f76d7._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__454b0d3c._.js +0 -7
- package/mcp-server/.next/server/chunks/[root-of-the-server]__454b0d3c._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__69e6dfb7._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__69e6dfb7._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__6baff21e._.js +0 -4
- package/mcp-server/.next/server/chunks/[root-of-the-server]__6baff21e._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__6f790e1f._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__6f790e1f._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__7049acd5._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__7049acd5._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__73c9cc46._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__73c9cc46._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__78991125._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__78991125._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__7ae828c6._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__7ae828c6._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__94946101._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__94946101._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__99274dd8._.js +0 -4
- package/mcp-server/.next/server/chunks/[root-of-the-server]__99274dd8._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__9c4c7095._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__9c4c7095._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__b56464d6._.js +0 -7
- package/mcp-server/.next/server/chunks/[root-of-the-server]__b56464d6._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__b698502d._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__b698502d._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__b86e20b6._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__b86e20b6._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__c8cf5b23._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__c8cf5b23._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__e6a83e60._.js +0 -4
- package/mcp-server/.next/server/chunks/[root-of-the-server]__e6a83e60._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__ee139f8a._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__ee139f8a._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[turbopack]_runtime.js +0 -795
- package/mcp-server/.next/server/chunks/[turbopack]_runtime.js.map +0 -10
- package/mcp-server/.next/server/chunks/edd96_next_80752ad3._.js +0 -3
- package/mcp-server/.next/server/chunks/edd96_next_80752ad3._.js.map +0 -1
- package/mcp-server/.next/server/chunks/edd96_next_dist_esm_build_templates_app-route_f51c5640.js +0 -3
- package/mcp-server/.next/server/chunks/edd96_next_dist_esm_build_templates_app-route_f51c5640.js.map +0 -1
- package/mcp-server/.next/server/chunks/edd96_next_dist_fa47e982._.js +0 -6
- package/mcp-server/.next/server/chunks/edd96_next_dist_fa47e982._.js.map +0 -1
- package/mcp-server/.next/server/chunks/edd96_next_ef93dda6._.js +0 -14
- package/mcp-server/.next/server/chunks/edd96_next_ef93dda6._.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server_70405c2f._.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server_70405c2f._.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_jank_[session]_route_actions_3b2b275b.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_jank_[session]_route_actions_3b2b275b.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_append_route_actions_bc66060f.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_append_route_actions_bc66060f.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_head_route_actions_1152480c.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_head_route_actions_1152480c.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_list_route_actions_b9e24400.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_list_route_actions_b9e24400.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_rotate_route_actions_76075d08.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_rotate_route_actions_76075d08.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_stream_route_actions_16e5c553.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_stream_route_actions_16e5c553.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_tail_route_actions_55440150.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_logs_tail_route_actions_55440150.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_orchestrator_route_actions_c6fba9ec.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_orchestrator_route_actions_c6fba9ec.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_screenshots_list_route_actions_acfa57bd.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_screenshots_list_route_actions_acfa57bd.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_teams_route_actions_aaa1c876.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_teams_route_actions_aaa1c876.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_tools_route_actions_007f3c7c.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_tools_route_actions_007f3c7c.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_mcp_route_actions_7f7b5be4.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_mcp_route_actions_7f7b5be4.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server_app_mcp_tools_ts_faf6d7df._.js +0 -185
- package/mcp-server/.next/server/chunks/mcp-server_app_mcp_tools_ts_faf6d7df._.js.map +0 -1
- package/mcp-server/.next/server/chunks/mcp-server_instrumentation_node_ts_32271e34._.js +0 -3
- package/mcp-server/.next/server/chunks/mcp-server_instrumentation_node_ts_32271e34._.js.map +0 -1
- package/mcp-server/.next/server/chunks/src_utils_agent-browser_ts_cc00e0d8._.js +0 -3
- package/mcp-server/.next/server/chunks/src_utils_agent-browser_ts_cc00e0d8._.js.map +0 -1
- package/mcp-server/.next/server/chunks/src_utils_project-name_ts_1fab1dd5._.js +0 -3
- package/mcp-server/.next/server/chunks/src_utils_project-name_ts_1fab1dd5._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__250a4cf3._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__250a4cf3._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__41e244ae._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__41e244ae._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__4a45fb1f._.js +0 -4
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__4a45fb1f._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__4feaccaf._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__4feaccaf._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__6d9fa861._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__6d9fa861._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9913ce94._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9913ce94._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9923da5e._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9923da5e._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__a8fcf205._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__a8fcf205._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b17d4048._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b17d4048._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__dcf84f77._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__dcf84f77._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__df4ed844._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__df4ed844._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[turbopack]_runtime.js +0 -795
- package/mcp-server/.next/server/chunks/ssr/[turbopack]_runtime.js.map +0 -10
- package/mcp-server/.next/server/chunks/ssr/_213c874b._.js +0 -4
- package/mcp-server/.next/server/chunks/ssr/_213c874b._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_69be9abe._.js +0 -4
- package/mcp-server/.next/server/chunks/ssr/_69be9abe._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_b38781f1._.js +0 -4
- package/mcp-server/.next/server/chunks/ssr/_b38781f1._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_edba94b0._.js +0 -8
- package/mcp-server/.next/server/chunks/ssr/_edba94b0._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_f478416d._.js +0 -8
- package/mcp-server/.next/server/chunks/ssr/_f478416d._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_22d4e869._.js +0 -4
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_22d4e869._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_329c4a9b._.js +0 -10
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_329c4a9b._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_6cceb2cd._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_6cceb2cd._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_861297ac._.js +0 -6
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_861297ac._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_85c7e922._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_85c7e922._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_builtin_forbidden_0eb1cacd.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_builtin_forbidden_0eb1cacd.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_builtin_global-error_e64e654b.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_builtin_global-error_e64e654b.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_builtin_unauthorized_06e7b5f5.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_client_components_builtin_unauthorized_06e7b5f5.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_esm_build_templates_app-page_f82c7ca4.js +0 -4
- package/mcp-server/.next/server/chunks/ssr/edd96_next_dist_esm_build_templates_app-page_f82c7ca4.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app__global-error_page_actions_404453e7.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app__global-error_page_actions_404453e7.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app__not-found_page_actions_c1864427.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app__not-found_page_actions_c1864427.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app_logs_page_actions_71542ba9.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app_logs_page_actions_71542ba9.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app_page_actions_a5ee4758.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app_page_actions_a5ee4758.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app_video_[session]_page_actions_a6aab323.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server__next-internal_server_app_video_[session]_page_actions_a6aab323.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_page_tsx_9fc46577._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_page_tsx_9fc46577._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server_components_dark-mode-toggle_tsx_f31dd15d._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/mcp-server_components_dark-mode-toggle_tsx_f31dd15d._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/node_modules__bun_39d5fbaf._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/node_modules__bun_39d5fbaf._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/node_modules__bun_d6d37386._.js +0 -5
- package/mcp-server/.next/server/chunks/ssr/node_modules__bun_d6d37386._.js.map +0 -1
- package/mcp-server/.next/server/functions-config-manifest.json +0 -4
- package/mcp-server/.next/server/instrumentation.js +0 -4
- package/mcp-server/.next/server/instrumentation.js.nft.json +0 -1
- package/mcp-server/.next/server/interception-route-rewrite-manifest.js +0 -1
- package/mcp-server/.next/server/middleware-build-manifest.js +0 -21
- package/mcp-server/.next/server/middleware-manifest.json +0 -6
- package/mcp-server/.next/server/next-font-manifest.js +0 -1
- package/mcp-server/.next/server/next-font-manifest.json +0 -6
- package/mcp-server/.next/server/pages/404.html +0 -1
- package/mcp-server/.next/server/pages/500.html +0 -2
- package/mcp-server/.next/server/pages-manifest.json +0 -4
- package/mcp-server/.next/server/server-reference-manifest.js +0 -1
- package/mcp-server/.next/server/server-reference-manifest.json +0 -5
- package/mcp-server/.next/static/HxwUjR9e01QAp7lf9kRjn/_buildManifest.js +0 -11
- package/mcp-server/.next/static/HxwUjR9e01QAp7lf9kRjn/_clientMiddlewareManifest.json +0 -1
- package/mcp-server/.next/static/HxwUjR9e01QAp7lf9kRjn/_ssgManifest.js +0 -1
- package/mcp-server/.next/static/chunks/10099c90a1ca89ea.js +0 -4
- package/mcp-server/.next/static/chunks/10c04cb580a9beec.js +0 -1
- package/mcp-server/.next/static/chunks/13606014ef33124c.js +0 -2
- package/mcp-server/.next/static/chunks/39e9bdcc541cc428.js +0 -1
- package/mcp-server/.next/static/chunks/3f3f8e7d16ba3bf4.js +0 -1
- package/mcp-server/.next/static/chunks/4785978304fb9e19.js +0 -1
- package/mcp-server/.next/static/chunks/59cdeaf92a780e96.css +0 -1
- package/mcp-server/.next/static/chunks/5df77c9395248155.js +0 -1
- package/mcp-server/.next/static/chunks/807aef58565dccb1.js +0 -1
- package/mcp-server/.next/static/chunks/a6dad97d9634a72d.js +0 -1
- package/mcp-server/.next/static/chunks/a6dad97d9634a72d.js.map +0 -1
- package/mcp-server/.next/static/chunks/b8eb42a9560f7980.js +0 -3
- package/mcp-server/.next/static/chunks/ea7b53054294e7bb.js +0 -3
- package/mcp-server/.next/static/chunks/ec58e1c556f5d0fa.js +0 -3
- package/mcp-server/.next/static/chunks/turbopack-b64e111cadf03885.js +0 -4
- package/mcp-server/app/api/jank/[session]/route.ts +0 -344
- package/mcp-server/app/api/logs/append/route.ts +0 -82
- package/mcp-server/app/api/logs/head/route.ts +0 -32
- package/mcp-server/app/api/logs/list/route.ts +0 -71
- package/mcp-server/app/api/logs/rotate/route.ts +0 -48
- package/mcp-server/app/api/logs/stream/route.ts +0 -61
- package/mcp-server/app/api/logs/tail/route.ts +0 -32
- package/mcp-server/app/api/orchestrator/route.ts +0 -73
- package/mcp-server/app/api/screenshots/[filename]/route.ts +0 -61
- package/mcp-server/app/api/screenshots/capture/route.ts +0 -137
- package/mcp-server/app/api/screenshots/clear/route.ts +0 -44
- package/mcp-server/app/api/screenshots/list/route.ts +0 -22
- package/mcp-server/app/api/teams/route.ts +0 -86
- package/mcp-server/app/api/tools/route.ts +0 -92
- package/mcp-server/app/globals.css +0 -124
- package/mcp-server/app/layout.tsx +0 -23
- package/mcp-server/app/logs/LogsClient.infinite-loop.test.tsx +0 -127
- package/mcp-server/app/logs/LogsClient.test.ts +0 -416
- package/mcp-server/app/logs/LogsClient.tsx +0 -1967
- package/mcp-server/app/logs/page.tsx +0 -150
- package/mcp-server/app/logs/utils.ts +0 -151
- package/mcp-server/app/mcp/client-manager.ts +0 -346
- package/mcp-server/app/mcp/route.ts +0 -765
- package/mcp-server/app/mcp/tools.ts +0 -4158
- package/mcp-server/app/page.tsx +0 -399
- package/mcp-server/app/video/[session]/page.tsx +0 -239
- package/mcp-server/next-env.d.ts +0 -6
- package/mcp-server/package.json +0 -48
- package/mcp-server/postcss.config.mjs +0 -5
- package/mcp-server/public/favicon-16.svg +0 -4
- package/mcp-server/public/favicon-180.png +0 -0
- package/mcp-server/public/favicon-64.svg +0 -4
- package/mcp-server/public/favicon-preview.html +0 -67
- package/mcp-server/public/favicon.ico +0 -0
- package/mcp-server/public/favicon.svg +0 -4
- package/mcp-server/public/screenshots/test.txt +0 -1
- package/mcp-server/start-production.mjs +0 -101
- package/mcp-server/tsconfig.json +0 -28
|
@@ -1,765 +0,0 @@
|
|
|
1
|
-
import { readdirSync, readFileSync } from "node:fs"
|
|
2
|
-
import { homedir } from "node:os"
|
|
3
|
-
import { join } from "node:path"
|
|
4
|
-
import type { Tool } from "@modelcontextprotocol/sdk/types.js"
|
|
5
|
-
import { createMcpHandler } from "mcp-handler"
|
|
6
|
-
import { z } from "zod"
|
|
7
|
-
import { getMCPClientManager } from "./client-manager"
|
|
8
|
-
import { crawlApp, findComponentSource, fixMyApp, getSkill, restartDevServer, TOOL_DESCRIPTIONS } from "./tools"
|
|
9
|
-
|
|
10
|
-
// Detect available package runner (bunx, npx, pnpm dlx, or fail)
|
|
11
|
-
const getPackageRunner = (): { command: string; args: string[] } | null => {
|
|
12
|
-
try {
|
|
13
|
-
const { execSync } = require("node:child_process")
|
|
14
|
-
|
|
15
|
-
// Try bunx first (fastest)
|
|
16
|
-
try {
|
|
17
|
-
execSync("bunx --version", { stdio: "ignore" })
|
|
18
|
-
return { command: "bunx", args: [] }
|
|
19
|
-
} catch {
|
|
20
|
-
// bunx not available
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Try npx (most common)
|
|
24
|
-
try {
|
|
25
|
-
execSync("npx --version", { stdio: "ignore" })
|
|
26
|
-
return { command: "npx", args: ["-y"] }
|
|
27
|
-
} catch {
|
|
28
|
-
// npx not available or is aliased to pnpm dlx
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Try pnpm dlx as fallback
|
|
32
|
-
try {
|
|
33
|
-
execSync("pnpm --version", { stdio: "ignore" })
|
|
34
|
-
return { command: "pnpm", args: ["dlx"] }
|
|
35
|
-
} catch {
|
|
36
|
-
// pnpm not available
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
console.error("[MCP Orchestrator] No package runner found (bunx, npx, or pnpm) - cannot spawn MCP servers")
|
|
40
|
-
return null
|
|
41
|
-
} catch (error) {
|
|
42
|
-
console.error("[MCP Orchestrator] Failed to detect package runner:", error)
|
|
43
|
-
return null
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Check if chrome-devtools-mcp is externally configured (e.g., in user's .mcp.json)
|
|
48
|
-
// This helps avoid spawning a duplicate that would cause CDP conflicts
|
|
49
|
-
const isExternalChromeDevtoolsConfigured = (): boolean => {
|
|
50
|
-
try {
|
|
51
|
-
const { existsSync, readFileSync } = require("node:fs")
|
|
52
|
-
const cwd = process.cwd()
|
|
53
|
-
|
|
54
|
-
// Check common MCP config locations
|
|
55
|
-
const configPaths = [
|
|
56
|
-
join(cwd, ".mcp.json"), // Claude Code / OpenAI
|
|
57
|
-
join(cwd, ".cursor", "mcp.json"), // Cursor
|
|
58
|
-
join(homedir(), ".claude", "settings.json") // Claude global settings
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
for (const configPath of configPaths) {
|
|
62
|
-
if (!existsSync(configPath)) continue
|
|
63
|
-
|
|
64
|
-
try {
|
|
65
|
-
const content = readFileSync(configPath, "utf-8")
|
|
66
|
-
const config = JSON.parse(content)
|
|
67
|
-
|
|
68
|
-
// Check mcpServers object for chrome-devtools variants
|
|
69
|
-
const servers = config.mcpServers || config.mcp || {}
|
|
70
|
-
for (const [name, serverConfig] of Object.entries(servers)) {
|
|
71
|
-
// Skip if this is dev3000's own entry
|
|
72
|
-
if (name === "dev3000") continue
|
|
73
|
-
|
|
74
|
-
// Check if it's chrome-devtools-mcp by name or command
|
|
75
|
-
const nameLower = name.toLowerCase()
|
|
76
|
-
if (nameLower.includes("chrome-devtools") || nameLower.includes("chromedevtools")) {
|
|
77
|
-
console.log(
|
|
78
|
-
`[MCP Orchestrator] Detected external chrome-devtools-mcp (${name}). ` +
|
|
79
|
-
"dev3000 will use its native CDP implementation instead of spawning a duplicate."
|
|
80
|
-
)
|
|
81
|
-
return true
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Also check the command/args if available
|
|
85
|
-
const cfg = serverConfig as Record<string, unknown>
|
|
86
|
-
const command = String(cfg.command || "")
|
|
87
|
-
const args = Array.isArray(cfg.args) ? cfg.args.join(" ") : ""
|
|
88
|
-
if (command.includes("chrome-devtools-mcp") || args.includes("chrome-devtools-mcp")) {
|
|
89
|
-
console.log(
|
|
90
|
-
`[MCP Orchestrator] Detected external chrome-devtools-mcp (${name}). ` +
|
|
91
|
-
"dev3000 will use its native CDP implementation instead of spawning a duplicate."
|
|
92
|
-
)
|
|
93
|
-
return true
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
} catch {
|
|
97
|
-
// Skip invalid config files
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return false
|
|
102
|
-
} catch {
|
|
103
|
-
return false
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Initialize MCP client manager for orchestration
|
|
108
|
-
// This will spawn and connect to chrome-devtools and next-devtools-mcp as stdio processes
|
|
109
|
-
const initializeOrchestration = async () => {
|
|
110
|
-
const clientManager = getMCPClientManager()
|
|
111
|
-
|
|
112
|
-
// Check if chrome-devtools is already configured externally
|
|
113
|
-
const externalChromeDevtools = isExternalChromeDevtoolsConfigured()
|
|
114
|
-
|
|
115
|
-
// Helper to get config from session files in ~/.d3k/ or CDP_URL env var
|
|
116
|
-
const getConfigFromSessions = () => {
|
|
117
|
-
const config: Parameters<typeof clientManager.initialize>[0] = {}
|
|
118
|
-
const sessionDir = join(homedir(), ".d3k")
|
|
119
|
-
|
|
120
|
-
// Helper to configure chrome-devtools from a CDP URL
|
|
121
|
-
const configureFromCdpUrl = (cdpUrl: string): boolean => {
|
|
122
|
-
if (config.chromeDevtools || externalChromeDevtools) return false
|
|
123
|
-
|
|
124
|
-
const runner = getPackageRunner()
|
|
125
|
-
if (!runner) {
|
|
126
|
-
console.warn("[MCP Orchestrator] Cannot configure chrome-devtools MCP: no package runner available")
|
|
127
|
-
return false
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
try {
|
|
131
|
-
const wsUrl = new URL(cdpUrl)
|
|
132
|
-
// Convert ws:// to http:// and use just the origin (no path)
|
|
133
|
-
const browserUrl = `http://${wsUrl.host}`
|
|
134
|
-
|
|
135
|
-
config.chromeDevtools = {
|
|
136
|
-
command: runner.command,
|
|
137
|
-
args: [...runner.args, "chrome-devtools-mcp@latest", "--browserUrl", browserUrl],
|
|
138
|
-
enabled: true
|
|
139
|
-
}
|
|
140
|
-
console.log(`[MCP Orchestrator] Configured chrome-devtools MCP with browserUrl: ${browserUrl}`)
|
|
141
|
-
return true
|
|
142
|
-
} catch {
|
|
143
|
-
console.warn("[MCP Orchestrator] Failed to parse CDP URL:", cdpUrl)
|
|
144
|
-
return false
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// PRIORITY 1: Use CDP_URL environment variable if set (passed by dev3000 parent process)
|
|
149
|
-
// This ensures we connect to the Chrome instance that THIS dev3000 instance spawned,
|
|
150
|
-
// avoiding port mismatches when multiple dev3000 instances are running
|
|
151
|
-
const envCdpUrl = process.env.CDP_URL
|
|
152
|
-
if (envCdpUrl) {
|
|
153
|
-
console.log(`[MCP Orchestrator] Using CDP_URL from environment: ${envCdpUrl}`)
|
|
154
|
-
configureFromCdpUrl(envCdpUrl)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// PRIORITY 2: Fall back to session files if CDP_URL env var is not set
|
|
158
|
-
if (!config.chromeDevtools) {
|
|
159
|
-
try {
|
|
160
|
-
// Read all *.json session files
|
|
161
|
-
const { readdirSync, existsSync, statSync } = require("node:fs")
|
|
162
|
-
if (!existsSync(sessionDir)) return config
|
|
163
|
-
|
|
164
|
-
const sessionFiles = readdirSync(sessionDir)
|
|
165
|
-
.filter((f: string) => f.endsWith(".json"))
|
|
166
|
-
// Sort by modification time (most recent first) to use the active session
|
|
167
|
-
.sort((a: string, b: string) => {
|
|
168
|
-
try {
|
|
169
|
-
const statA = statSync(join(sessionDir, a))
|
|
170
|
-
const statB = statSync(join(sessionDir, b))
|
|
171
|
-
return statB.mtimeMs - statA.mtimeMs
|
|
172
|
-
} catch {
|
|
173
|
-
return 0
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
// Use the most recent session with CDP URL
|
|
178
|
-
for (const file of sessionFiles) {
|
|
179
|
-
try {
|
|
180
|
-
const sessionPath = join(sessionDir, file)
|
|
181
|
-
const sessionData = JSON.parse(readFileSync(sessionPath, "utf-8"))
|
|
182
|
-
|
|
183
|
-
// Configure chrome-devtools MCP if CDP URL is available
|
|
184
|
-
// Skip if externally configured to avoid CDP conflicts
|
|
185
|
-
if (sessionData.cdpUrl && !config.chromeDevtools && !externalChromeDevtools) {
|
|
186
|
-
// Extract the HTTP endpoint from the WebSocket URL
|
|
187
|
-
// The cdpUrl is typically ws://localhost:9222/devtools/page/<targetId>
|
|
188
|
-
// chrome-devtools-mcp needs --browserUrl http://localhost:9222 to properly
|
|
189
|
-
// manage browser contexts (avoids "Target.getBrowserContexts: Not allowed" errors)
|
|
190
|
-
configureFromCdpUrl(sessionData.cdpUrl)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// Break early if we have chrome-devtools - only need one session for CDP URL
|
|
194
|
-
if (config.chromeDevtools) break
|
|
195
|
-
} catch {
|
|
196
|
-
// Skip invalid session files
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
} catch (error) {
|
|
200
|
-
console.warn("[MCP Orchestrator] Failed to read session files:", error)
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Configure framework-specific MCPs based on detected framework
|
|
205
|
-
// Read framework from session data
|
|
206
|
-
if (!config.nextjsDev && !config.svelteDev) {
|
|
207
|
-
const runner = getPackageRunner()
|
|
208
|
-
|
|
209
|
-
// Try to find framework from any session file
|
|
210
|
-
let framework: string | null = null
|
|
211
|
-
try {
|
|
212
|
-
const sessionFiles = readdirSync(sessionDir).filter((f: string) => f.endsWith(".json"))
|
|
213
|
-
for (const file of sessionFiles) {
|
|
214
|
-
try {
|
|
215
|
-
const sessionPath = join(sessionDir, file)
|
|
216
|
-
const sessionData = JSON.parse(readFileSync(sessionPath, "utf-8"))
|
|
217
|
-
if (sessionData.framework) {
|
|
218
|
-
framework = sessionData.framework
|
|
219
|
-
break
|
|
220
|
-
}
|
|
221
|
-
} catch {
|
|
222
|
-
// Skip invalid session files
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
} catch {
|
|
226
|
-
// Ignore errors reading framework
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (runner) {
|
|
230
|
-
// Configure framework-specific MCP based on detected framework
|
|
231
|
-
if (framework === "nextjs") {
|
|
232
|
-
config.nextjsDev = {
|
|
233
|
-
command: runner.command,
|
|
234
|
-
args: [...runner.args, "next-devtools-mcp@latest"],
|
|
235
|
-
enabled: true
|
|
236
|
-
}
|
|
237
|
-
console.log("[MCP Orchestrator] Detected Next.js framework, configuring next-devtools-mcp")
|
|
238
|
-
} else if (framework === "svelte") {
|
|
239
|
-
config.svelteDev = {
|
|
240
|
-
command: runner.command,
|
|
241
|
-
args: [...runner.args, "@sveltejs/mcp-server-svelte"],
|
|
242
|
-
enabled: true
|
|
243
|
-
}
|
|
244
|
-
console.log("[MCP Orchestrator] Detected Svelte framework, configuring @sveltejs/mcp-server-svelte")
|
|
245
|
-
}
|
|
246
|
-
// For "other" or null framework, don't configure any framework-specific MCP
|
|
247
|
-
} else {
|
|
248
|
-
console.warn("[MCP Orchestrator] Cannot configure framework MCP: no package runner available")
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
return config
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
const waitForInitialConfig = async (
|
|
256
|
-
timeoutMs: number = 10000,
|
|
257
|
-
pollIntervalMs: number = 250
|
|
258
|
-
): Promise<{ config: Parameters<typeof clientManager.initialize>[0]; waited: boolean }> => {
|
|
259
|
-
const startTime = Date.now()
|
|
260
|
-
let waited = false
|
|
261
|
-
let config = getConfigFromSessions()
|
|
262
|
-
|
|
263
|
-
while (Object.keys(config).length === 0 && Date.now() - startTime < timeoutMs) {
|
|
264
|
-
if (!waited) {
|
|
265
|
-
console.log("[MCP Orchestrator] Waiting for session info before connecting downstream MCPs...")
|
|
266
|
-
waited = true
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs))
|
|
270
|
-
config = getConfigFromSessions()
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return { config, waited }
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
try {
|
|
277
|
-
// Initial attempt to connect
|
|
278
|
-
const { config, waited } = await waitForInitialConfig()
|
|
279
|
-
if (Object.keys(config).length > 0) {
|
|
280
|
-
await clientManager.initialize(config)
|
|
281
|
-
console.log(`[MCP Orchestrator] Initialized with ${Object.keys(config).join(", ")}`)
|
|
282
|
-
} else {
|
|
283
|
-
if (waited) {
|
|
284
|
-
console.log("[MCP Orchestrator] No downstream MCPs detected after waiting for session info (will retry)")
|
|
285
|
-
} else {
|
|
286
|
-
console.log("[MCP Orchestrator] No downstream MCPs found yet (will retry)")
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Since MCP server starts before Chrome, periodically retry connection
|
|
291
|
-
// This allows late-binding to chrome-devtools MCP after Chrome launches
|
|
292
|
-
let retryCount = 0
|
|
293
|
-
const maxRetries = 10
|
|
294
|
-
const retryInterval = setInterval(async () => {
|
|
295
|
-
retryCount++
|
|
296
|
-
|
|
297
|
-
const newConfig = getConfigFromSessions()
|
|
298
|
-
const hasChromeDevtools = !!newConfig.chromeDevtools
|
|
299
|
-
const hasNextjs = !!newConfig.nextjsDev
|
|
300
|
-
const hasSvelte = !!newConfig.svelteDev
|
|
301
|
-
const alreadyConnectedChrome = clientManager.isConnected("chrome-devtools")
|
|
302
|
-
const alreadyConnectedNextjs = clientManager.isConnected("nextjs-dev")
|
|
303
|
-
const alreadyConnectedSvelte = clientManager.isConnected("svelte-dev")
|
|
304
|
-
|
|
305
|
-
// Check if we have new MCPs to connect to
|
|
306
|
-
const needsChrome = hasChromeDevtools && !alreadyConnectedChrome
|
|
307
|
-
const needsNextjs = hasNextjs && !alreadyConnectedNextjs
|
|
308
|
-
const needsSvelte = hasSvelte && !alreadyConnectedSvelte
|
|
309
|
-
|
|
310
|
-
if (needsChrome || needsNextjs || needsSvelte) {
|
|
311
|
-
const toConnect = [
|
|
312
|
-
needsChrome && "chrome-devtools",
|
|
313
|
-
needsNextjs && "nextjs-dev",
|
|
314
|
-
needsSvelte && "svelte-dev"
|
|
315
|
-
].filter(Boolean)
|
|
316
|
-
console.log(`[MCP Orchestrator] Retry ${retryCount}: Attempting to connect to ${toConnect.join(", ")}`)
|
|
317
|
-
try {
|
|
318
|
-
await clientManager.initialize(newConfig)
|
|
319
|
-
console.log("[MCP Orchestrator] Successfully connected to downstream MCPs")
|
|
320
|
-
} catch (error) {
|
|
321
|
-
console.warn(`[MCP Orchestrator] Retry ${retryCount} failed:`, error)
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// Stop retrying after max attempts or when all potential MCPs are connected
|
|
326
|
-
const allFrameworkMcpsConnected =
|
|
327
|
-
(hasNextjs ? alreadyConnectedNextjs : true) && (hasSvelte ? alreadyConnectedSvelte : true)
|
|
328
|
-
if (retryCount >= maxRetries || (alreadyConnectedChrome && allFrameworkMcpsConnected)) {
|
|
329
|
-
clearInterval(retryInterval)
|
|
330
|
-
const connected = clientManager.getConnectedMCPs()
|
|
331
|
-
console.log(`[MCP Orchestrator] Stopped retry loop (connected: ${connected.join(", ") || "none"})`)
|
|
332
|
-
}
|
|
333
|
-
}, 2000) // Retry every 2 seconds
|
|
334
|
-
} catch (error) {
|
|
335
|
-
console.warn("[MCP Orchestrator] Failed to initialize downstream MCPs:", error)
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// Initialize on module load
|
|
340
|
-
const orchestrationReady = initializeOrchestration().catch((error) => {
|
|
341
|
-
console.error("[MCP Orchestrator] Failed to initialize downstream MCPs:", error)
|
|
342
|
-
})
|
|
343
|
-
|
|
344
|
-
// Cleanup on shutdown
|
|
345
|
-
process.on("SIGTERM", async () => {
|
|
346
|
-
console.log("[MCP Orchestrator] Received SIGTERM, cleaning up...")
|
|
347
|
-
try {
|
|
348
|
-
await getMCPClientManager().disconnect()
|
|
349
|
-
console.log("[MCP Orchestrator] Cleanup complete")
|
|
350
|
-
} catch (error) {
|
|
351
|
-
console.error("[MCP Orchestrator] Error during cleanup:", error)
|
|
352
|
-
}
|
|
353
|
-
process.exit(0)
|
|
354
|
-
})
|
|
355
|
-
|
|
356
|
-
process.on("SIGINT", async () => {
|
|
357
|
-
console.log("[MCP Orchestrator] Received SIGINT, cleaning up...")
|
|
358
|
-
try {
|
|
359
|
-
await getMCPClientManager().disconnect()
|
|
360
|
-
console.log("[MCP Orchestrator] Cleanup complete")
|
|
361
|
-
} catch (error) {
|
|
362
|
-
console.error("[MCP Orchestrator] Error during cleanup:", error)
|
|
363
|
-
}
|
|
364
|
-
process.exit(0)
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
const handler = createMcpHandler(
|
|
368
|
-
async (server) => {
|
|
369
|
-
const clientManager = getMCPClientManager()
|
|
370
|
-
|
|
371
|
-
await orchestrationReady
|
|
372
|
-
await clientManager.waitForInitialTools()
|
|
373
|
-
|
|
374
|
-
const registeredProxiedTools = new Map<
|
|
375
|
-
string,
|
|
376
|
-
{
|
|
377
|
-
mcpName: string
|
|
378
|
-
toolName: string
|
|
379
|
-
registered: ReturnType<typeof server.tool>
|
|
380
|
-
}
|
|
381
|
-
>()
|
|
382
|
-
|
|
383
|
-
// Whitelist of tools to proxy from downstream MCPs
|
|
384
|
-
// This reduces token usage by only exposing commonly used tools
|
|
385
|
-
// NOTE: dev3000 already has CDP for basic automation (screenshot, click, navigate, etc.)
|
|
386
|
-
// so we only proxy advanced analysis tools that dev3000 doesn't provide natively
|
|
387
|
-
const PROXIED_TOOL_WHITELIST: Record<string, string[]> = {
|
|
388
|
-
"chrome-devtools": [
|
|
389
|
-
// Performance & CLS/Jank Analysis (actual tool names from chrome-devtools-mcp)
|
|
390
|
-
"performance_start_trace",
|
|
391
|
-
"performance_stop_trace",
|
|
392
|
-
"performance_analyze_insight",
|
|
393
|
-
// DOM/Page Analysis
|
|
394
|
-
"take_snapshot",
|
|
395
|
-
// Screenshot capture for verification (uses chrome-devtools-mcp's CDP connection)
|
|
396
|
-
"take_screenshot"
|
|
397
|
-
],
|
|
398
|
-
// nextjs-dev: Include most tools for framework-specific debugging
|
|
399
|
-
// NOTE: browser_eval is intentionally excluded - it spawns a separate headless
|
|
400
|
-
// Playwright browser that doesn't share cookies with the d3k Chrome browser.
|
|
401
|
-
// Use d3k CLI for browser automation: `d3k agent-browser --cdp 9222 <command>`
|
|
402
|
-
"nextjs-dev": [
|
|
403
|
-
"enable_cache_components",
|
|
404
|
-
"init",
|
|
405
|
-
"nextjs_docs",
|
|
406
|
-
"nextjs_index",
|
|
407
|
-
"nextjs_call",
|
|
408
|
-
"upgrade_nextjs_16"
|
|
409
|
-
]
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
const shouldProxyTool = (mcpName: string, toolName: string): boolean => {
|
|
413
|
-
const whitelist = PROXIED_TOOL_WHITELIST[mcpName]
|
|
414
|
-
if (!whitelist) {
|
|
415
|
-
// If MCP not in whitelist, proxy all its tools (for unknown MCPs)
|
|
416
|
-
return true
|
|
417
|
-
}
|
|
418
|
-
return whitelist.includes(toolName)
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
const registerOrUpdateProxiedTool = (mcpName: string, tool: Tool): boolean => {
|
|
422
|
-
// Filter tools based on whitelist
|
|
423
|
-
if (!shouldProxyTool(mcpName, tool.name)) {
|
|
424
|
-
console.log(`[MCP Orchestrator] Filtered out tool ${mcpName}:${tool.name} (not in whitelist)`)
|
|
425
|
-
return false
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
const proxiedToolName = `${mcpName}_${tool.name}`
|
|
429
|
-
const existing = registeredProxiedTools.get(proxiedToolName)
|
|
430
|
-
const description = `[${mcpName}] ${tool.description || ""}`
|
|
431
|
-
const annotations = {
|
|
432
|
-
...(tool.annotations ?? {}),
|
|
433
|
-
proxiedFrom: mcpName,
|
|
434
|
-
originalInputSchema: tool.inputSchema
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
if (existing) {
|
|
438
|
-
existing.registered.update({
|
|
439
|
-
description,
|
|
440
|
-
annotations
|
|
441
|
-
})
|
|
442
|
-
return false
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
try {
|
|
446
|
-
const proxiedTool = server.tool(proxiedToolName, description, {}, async (params: Record<string, unknown>) => {
|
|
447
|
-
return clientManager.callTool(mcpName, tool.name, params)
|
|
448
|
-
})
|
|
449
|
-
|
|
450
|
-
// Allow arbitrary argument objects to pass through to downstream MCPs
|
|
451
|
-
// NOTE: Cannot use JSON Schema directly here - mcp-handler expects Zod schemas
|
|
452
|
-
// and will error with "Cannot read properties of undefined (reading 'typeName')"
|
|
453
|
-
proxiedTool.inputSchema = z.object({}).passthrough()
|
|
454
|
-
|
|
455
|
-
proxiedTool.update({
|
|
456
|
-
annotations
|
|
457
|
-
})
|
|
458
|
-
|
|
459
|
-
registeredProxiedTools.set(proxiedToolName, {
|
|
460
|
-
mcpName,
|
|
461
|
-
toolName: tool.name,
|
|
462
|
-
registered: proxiedTool
|
|
463
|
-
})
|
|
464
|
-
|
|
465
|
-
console.log(`[MCP Orchestrator] Registered proxied tool ${proxiedToolName}`)
|
|
466
|
-
return true
|
|
467
|
-
} catch (error) {
|
|
468
|
-
console.warn(`[MCP Orchestrator] Failed to register proxied tool ${proxiedToolName}:`, error)
|
|
469
|
-
return false
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
const removeToolsForMcp = (mcpName: string): number => {
|
|
474
|
-
let removed = 0
|
|
475
|
-
for (const [proxiedToolName, entry] of registeredProxiedTools.entries()) {
|
|
476
|
-
if (entry.mcpName === mcpName) {
|
|
477
|
-
try {
|
|
478
|
-
entry.registered.remove()
|
|
479
|
-
registeredProxiedTools.delete(proxiedToolName)
|
|
480
|
-
removed++
|
|
481
|
-
console.log(`[MCP Orchestrator] Removed proxied tool ${proxiedToolName}`)
|
|
482
|
-
} catch (error) {
|
|
483
|
-
console.warn(`[MCP Orchestrator] Failed to remove proxied tool ${proxiedToolName}:`, error)
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
return removed
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
// Dynamically register proxied tools from downstream MCPs
|
|
491
|
-
const downstreamTools = clientManager.getAllTools()
|
|
492
|
-
|
|
493
|
-
if (downstreamTools.length === 0) {
|
|
494
|
-
console.log("[MCP Orchestrator] No downstream MCP tools available during initial registration")
|
|
495
|
-
} else {
|
|
496
|
-
console.log(`[MCP Orchestrator] Registering ${downstreamTools.length} downstream MCP tools`)
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
let initialNewTools = 0
|
|
500
|
-
for (const { mcpName, tool } of downstreamTools) {
|
|
501
|
-
if (registerOrUpdateProxiedTool(mcpName, tool)) {
|
|
502
|
-
initialNewTools++
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
if (initialNewTools > 0) {
|
|
507
|
-
server.sendToolListChanged()
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
clientManager.onToolsUpdated(({ mcpName, tools }) => {
|
|
511
|
-
if (tools.length === 0) {
|
|
512
|
-
const removed = removeToolsForMcp(mcpName)
|
|
513
|
-
if (removed > 0) {
|
|
514
|
-
server.sendToolListChanged()
|
|
515
|
-
}
|
|
516
|
-
return
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
let addedOrUpdated = 0
|
|
520
|
-
for (const tool of tools) {
|
|
521
|
-
if (registerOrUpdateProxiedTool(mcpName, tool)) {
|
|
522
|
-
addedOrUpdated++
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
if (addedOrUpdated > 0) {
|
|
527
|
-
server.sendToolListChanged()
|
|
528
|
-
}
|
|
529
|
-
})
|
|
530
|
-
|
|
531
|
-
// Dev3000's own tools below:
|
|
532
|
-
// Enhanced fix_my_app - the ultimate error fixing tool
|
|
533
|
-
server.tool(
|
|
534
|
-
"fix_my_app",
|
|
535
|
-
TOOL_DESCRIPTIONS.fix_my_app,
|
|
536
|
-
{
|
|
537
|
-
projectName: z
|
|
538
|
-
.string()
|
|
539
|
-
.optional()
|
|
540
|
-
.describe("Project name to debug (if multiple dev3000 instances are running)"),
|
|
541
|
-
focusArea: z
|
|
542
|
-
.string()
|
|
543
|
-
.optional()
|
|
544
|
-
.describe("Specific area: 'build', 'runtime', 'network', 'ui', 'all' (default: 'all')"),
|
|
545
|
-
mode: z
|
|
546
|
-
.enum(["snapshot", "bisect", "monitor"])
|
|
547
|
-
.optional()
|
|
548
|
-
.describe("Fix mode: 'snapshot' (fix now), 'bisect' (fix regression), 'monitor' (fix continuously)"),
|
|
549
|
-
waitForUserInteraction: z
|
|
550
|
-
.boolean()
|
|
551
|
-
.optional()
|
|
552
|
-
.describe("In bisect mode: capture timestamp, wait for user testing, then analyze (default: false)"),
|
|
553
|
-
timeRangeMinutes: z.number().optional().describe("Minutes to analyze back from now (default: 10)"),
|
|
554
|
-
includeTimestampInstructions: z
|
|
555
|
-
.boolean()
|
|
556
|
-
.optional()
|
|
557
|
-
.describe("Show timestamp-based debugging instructions for manual workflow (default: true)"),
|
|
558
|
-
integrateNextjs: z
|
|
559
|
-
.boolean()
|
|
560
|
-
.optional()
|
|
561
|
-
.describe("Auto-detected based on available MCPs - enables Next.js-specific analysis"),
|
|
562
|
-
integrateChromeDevtools: z
|
|
563
|
-
.boolean()
|
|
564
|
-
.optional()
|
|
565
|
-
.describe("Auto-detected based on available MCPs - enables Chrome DevTools integration"),
|
|
566
|
-
returnRawData: z
|
|
567
|
-
.boolean()
|
|
568
|
-
.optional()
|
|
569
|
-
.describe("Return structured data for Claude orchestration instead of formatted text"),
|
|
570
|
-
createPR: z.boolean().optional().describe("Create a PR for the highest priority issue (default: false)")
|
|
571
|
-
},
|
|
572
|
-
async (params) => {
|
|
573
|
-
return fixMyApp(params)
|
|
574
|
-
}
|
|
575
|
-
)
|
|
576
|
-
|
|
577
|
-
// NOTE: execute_browser_action was removed - use agent_browser_action instead
|
|
578
|
-
// agent_browser_action provides the same functionality with better reliability
|
|
579
|
-
// and persistent browser sessions via agent-browser CLI
|
|
580
|
-
|
|
581
|
-
// Visual diff analysis tool
|
|
582
|
-
server.tool(
|
|
583
|
-
"analyze_visual_diff",
|
|
584
|
-
"🔍 **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.",
|
|
585
|
-
{
|
|
586
|
-
beforeImageUrl: z.string().describe("URL of the 'before' screenshot"),
|
|
587
|
-
afterImageUrl: z.string().describe("URL of the 'after' screenshot"),
|
|
588
|
-
context: z
|
|
589
|
-
.string()
|
|
590
|
-
.optional()
|
|
591
|
-
.describe("Optional context about what to look for (e.g., 'navigation header shift')")
|
|
592
|
-
},
|
|
593
|
-
async (params) => {
|
|
594
|
-
const { analyzeVisualDiff } = await import("./tools")
|
|
595
|
-
return analyzeVisualDiff(params)
|
|
596
|
-
}
|
|
597
|
-
)
|
|
598
|
-
|
|
599
|
-
// Component source finder tool
|
|
600
|
-
server.tool(
|
|
601
|
-
"find_component_source",
|
|
602
|
-
TOOL_DESCRIPTIONS.find_component_source,
|
|
603
|
-
{
|
|
604
|
-
selector: z
|
|
605
|
-
.string()
|
|
606
|
-
.describe("CSS selector for the DOM element (e.g., 'nav', '.header', '#main'). Use lowercase for tag names."),
|
|
607
|
-
projectName: z.string().optional().describe("Project name (if multiple dev3000 instances are running)")
|
|
608
|
-
},
|
|
609
|
-
async (params) => {
|
|
610
|
-
return findComponentSource(params)
|
|
611
|
-
}
|
|
612
|
-
)
|
|
613
|
-
|
|
614
|
-
// Dev server restart tool
|
|
615
|
-
server.tool(
|
|
616
|
-
"restart_dev_server",
|
|
617
|
-
TOOL_DESCRIPTIONS.restart_dev_server,
|
|
618
|
-
{
|
|
619
|
-
projectName: z.string().optional().describe("Project name (if multiple dev3000 instances are running)")
|
|
620
|
-
},
|
|
621
|
-
async (params) => {
|
|
622
|
-
return restartDevServer(params)
|
|
623
|
-
}
|
|
624
|
-
)
|
|
625
|
-
|
|
626
|
-
// App crawler tool
|
|
627
|
-
server.tool(
|
|
628
|
-
"crawl_app",
|
|
629
|
-
TOOL_DESCRIPTIONS.crawl_app,
|
|
630
|
-
{
|
|
631
|
-
depth: z
|
|
632
|
-
.union([z.number().int().min(1), z.literal("all")])
|
|
633
|
-
.optional()
|
|
634
|
-
.describe(
|
|
635
|
-
"Crawl depth: number (1=homepage only, 2=homepage+next level, etc.) or 'all' for exhaustive (default: 1)"
|
|
636
|
-
),
|
|
637
|
-
projectName: z.string().optional().describe("Project name (if multiple dev3000 instances are running)")
|
|
638
|
-
},
|
|
639
|
-
async (params) => {
|
|
640
|
-
return crawlApp(params)
|
|
641
|
-
}
|
|
642
|
-
)
|
|
643
|
-
|
|
644
|
-
// Get skill content tool
|
|
645
|
-
server.tool(
|
|
646
|
-
"get_skill",
|
|
647
|
-
TOOL_DESCRIPTIONS.get_skill,
|
|
648
|
-
{
|
|
649
|
-
name: z.string().describe("The skill name (e.g., 'vercel-design-guidelines', 'd3k')")
|
|
650
|
-
},
|
|
651
|
-
async (params) => {
|
|
652
|
-
return getSkill(params)
|
|
653
|
-
}
|
|
654
|
-
)
|
|
655
|
-
|
|
656
|
-
// NOTE: agent_browser_action MCP tool removed to encourage CLI usage
|
|
657
|
-
// Claude should use `d3k agent-browser --cdp 9222 <command>` instead
|
|
658
|
-
// This avoids browser installation issues and connects to d3k's existing Chrome
|
|
659
|
-
|
|
660
|
-
// Tool that returns monitoring code for Claude to execute
|
|
661
|
-
// TODO: Commenting out for now - need to figure out the right approach for proactive monitoring
|
|
662
|
-
/*
|
|
663
|
-
server.tool(
|
|
664
|
-
"start_error_monitoring",
|
|
665
|
-
"🔍 **SIMPLE ERROR MONITORING** - Starts a lightweight background process that watches your app for errors and alerts you in real-time.\n\n⚡ **INSTANT ACTION:**\n• Claude will offer to run the monitoring script right away\n• No manual setup needed - just say yes!\n• Simple 15-line Python script\n• Alerts when errors appear in logs\n\n💡 **WHAT IT DOES:**\n• Watches for ERROR, FAIL, Exception, TypeError, CRASH keywords\n• Shows the error line when detected\n• Prompts you to let Claude debug\n• That's it - simple and effective!\n\n🎯 **PERFECT FOR:**\n• Quick error detection during development\n• Lightweight background monitoring\n• No complex features - just works",
|
|
666
|
-
{
|
|
667
|
-
projectName: z
|
|
668
|
-
.string()
|
|
669
|
-
.optional()
|
|
670
|
-
.describe("Project name to monitor (if multiple dev3000 instances are running)")
|
|
671
|
-
},
|
|
672
|
-
async ({ projectName }) => {
|
|
673
|
-
try {
|
|
674
|
-
const logPath = getLogPath(projectName)
|
|
675
|
-
if (!logPath) {
|
|
676
|
-
const sessions = findActiveSessions()
|
|
677
|
-
if (sessions.length === 0) {
|
|
678
|
-
return {
|
|
679
|
-
content: [
|
|
680
|
-
{
|
|
681
|
-
type: "text",
|
|
682
|
-
text: "❌ No active dev3000 sessions found. Make sure dev3000 is running!"
|
|
683
|
-
}
|
|
684
|
-
]
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
return {
|
|
689
|
-
content: [
|
|
690
|
-
{
|
|
691
|
-
type: "text",
|
|
692
|
-
text: `🔍 Multiple sessions found. Please specify projectName:\n${sessions
|
|
693
|
-
.map((s) => `• ${s.projectName} (started ${new Date(s.startTime).toLocaleString()})`)
|
|
694
|
-
.join("\n")}`
|
|
695
|
-
}
|
|
696
|
-
]
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
// Return simple Python monitoring code
|
|
701
|
-
const monitoringCode = `import time
|
|
702
|
-
|
|
703
|
-
log_file = "${logPath}"
|
|
704
|
-
pos = 0
|
|
705
|
-
|
|
706
|
-
print("🔍 Monitoring:", log_file)
|
|
707
|
-
print("Press Ctrl+C to stop\\n")
|
|
708
|
-
|
|
709
|
-
while True:
|
|
710
|
-
with open(log_file, 'r') as f:
|
|
711
|
-
f.seek(pos)
|
|
712
|
-
new = f.read()
|
|
713
|
-
pos = f.tell()
|
|
714
|
-
|
|
715
|
-
for line in new.split('\\n'):
|
|
716
|
-
if any(err in line for err in ['ERROR', 'FAIL', 'Exception', 'TypeError', 'CRASH']):
|
|
717
|
-
print(f"\\n🚨 ERROR DETECTED:\\n{line[:200]}\\n")
|
|
718
|
-
print("💡 Tell me: 'fix my app' or 'debug my app' to fix this!\\n")
|
|
719
|
-
|
|
720
|
-
time.sleep(2)
|
|
721
|
-
`
|
|
722
|
-
|
|
723
|
-
return {
|
|
724
|
-
content: [
|
|
725
|
-
{
|
|
726
|
-
type: "text",
|
|
727
|
-
text: `I'm ready to monitor your app for errors. I'll watch ${logPath} and alert you when errors occur.
|
|
728
|
-
|
|
729
|
-
Should I start monitoring now?`
|
|
730
|
-
},
|
|
731
|
-
{
|
|
732
|
-
type: "text",
|
|
733
|
-
text: `\`\`\`python
|
|
734
|
-
${monitoringCode}
|
|
735
|
-
\`\`\``
|
|
736
|
-
}
|
|
737
|
-
]
|
|
738
|
-
}
|
|
739
|
-
} catch (error) {
|
|
740
|
-
return {
|
|
741
|
-
content: [
|
|
742
|
-
{
|
|
743
|
-
type: "text",
|
|
744
|
-
text: `Error setting up monitoring: ${error instanceof Error ? error.message : String(error)}`
|
|
745
|
-
}
|
|
746
|
-
]
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
)
|
|
751
|
-
*/
|
|
752
|
-
},
|
|
753
|
-
{
|
|
754
|
-
// dev3000 MCP Server - Advanced development debugging tools
|
|
755
|
-
// Provides AI tools with comprehensive access to real-time development logs,
|
|
756
|
-
// browser monitoring data, and timestamp-based debugging workflows
|
|
757
|
-
},
|
|
758
|
-
{
|
|
759
|
-
basePath: "/",
|
|
760
|
-
maxDuration: 60,
|
|
761
|
-
verboseLogs: true
|
|
762
|
-
}
|
|
763
|
-
)
|
|
764
|
-
|
|
765
|
-
export { handler as GET, handler as POST }
|