dev3000 0.0.84 → 0.0.85
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/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +31 -186
- package/dist/dev-environment.js.map +1 -1
- package/dist/src/tui-interface-impl.tsx +1 -1
- package/dist/tui-interface-impl.js +1 -1
- package/dist/tui-interface-impl.js.map +1 -1
- package/mcp-server/.next/BUILD_ID +1 -1
- package/mcp-server/.next/app-path-routes-manifest.json +1 -0
- package/mcp-server/.next/build-manifest.json +5 -6
- package/mcp-server/.next/fallback-build-manifest.json +2 -2
- package/mcp-server/.next/next-server.js.nft.json +1 -1
- package/mcp-server/.next/prerender-manifest.json +3 -3
- package/mcp-server/.next/server/app/_global-error/page/build-manifest.json +3 -4
- package/mcp-server/.next/server/app/_global-error/page.js +1 -1
- package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/_global-error.html +2 -2
- package/mcp-server/.next/server/app/_global-error.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found/page/build-manifest.json +3 -4
- package/mcp-server/.next/server/app/_not-found/page.js +1 -1
- package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/_not-found.html +1 -1
- package/mcp-server/.next/server/app/_not-found.rsc +2 -2
- package/mcp-server/.next/server/app/api/jank/[session]/route.js +1 -1
- package/mcp-server/.next/server/app/api/jank/[session]/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/head/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/rotate/route.js +1 -1
- package/mcp-server/.next/server/app/api/logs/rotate/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/logs/tail/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/orchestrator/route/app-paths-manifest.json +3 -0
- package/mcp-server/.next/server/app/api/orchestrator/route/build-manifest.json +11 -0
- package/mcp-server/.next/server/app/api/orchestrator/route/server-reference-manifest.json +4 -0
- package/mcp-server/.next/server/app/api/orchestrator/route.js +8 -0
- package/mcp-server/.next/server/app/api/orchestrator/route.js.map +5 -0
- package/mcp-server/.next/server/app/api/orchestrator/route.js.nft.json +1 -0
- package/mcp-server/.next/server/app/api/orchestrator/route_client-reference-manifest.js +2 -0
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js +1 -1
- package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/api/screenshots/list/route.js +1 -1
- package/mcp-server/.next/server/app/api/screenshots/list/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/index.html +1 -1
- package/mcp-server/.next/server/app/index.rsc +3 -3
- package/mcp-server/.next/server/app/logs/page/build-manifest.json +3 -4
- package/mcp-server/.next/server/app/logs/page.js +1 -1
- package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/mcp/route.js +4 -3
- package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
- package/mcp-server/.next/server/app/page/build-manifest.json +3 -4
- package/mcp-server/.next/server/app/page.js +1 -1
- package/mcp-server/.next/server/app/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/video/[session]/page/build-manifest.json +3 -4
- package/mcp-server/.next/server/app/video/[session]/page.js +1 -1
- package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/video/[session]/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app-paths-manifest.json +1 -0
- package/mcp-server/.next/server/chunks/[externals]_node:crypto_c20cce38._.js +3 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__05e38acd._.js +3 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__05e38acd._.js.map +1 -0
- package/mcp-server/.next/server/chunks/{[root-of-the-server]__6ee9a99f._.js → [root-of-the-server]__3130ceec._.js} +2 -2
- package/mcp-server/.next/server/chunks/[root-of-the-server]__4637d3dd._.js +3 -0
- package/mcp-server/.next/server/chunks/{[root-of-the-server]__bc773251._.js → [root-of-the-server]__5114419d._.js} +2 -2
- package/mcp-server/.next/server/chunks/[root-of-the-server]__5248c9ff._.js +3 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__5248c9ff._.js.map +1 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__94037b23._.js +7 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__94037b23._.js.map +1 -0
- package/mcp-server/.next/server/chunks/{[root-of-the-server]__55c04517._.js → [root-of-the-server]__a004a307._.js} +2 -2
- package/mcp-server/.next/server/chunks/[root-of-the-server]__ae49815f._.js +91 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__ae49815f._.js.map +1 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__cc74dbef._.js +7 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__cc74dbef._.js.map +1 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__dc0b0022._.js +17 -0
- package/mcp-server/.next/server/chunks/[root-of-the-server]__dc0b0022._.js.map +1 -0
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_orchestrator_route_actions_c6fba9ec.js +3 -0
- package/mcp-server/.next/server/chunks/mcp-server__next-internal_server_app_api_orchestrator_route_actions_c6fba9ec.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__61c905ce._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__bf771f7e._.js.map → [root-of-the-server]__61c905ce._.js.map} +1 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__8863b0f6._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__8863b0f6._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9bc632fa._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__c4e78a20._.js.map → [root-of-the-server]__9bc632fa._.js.map} +1 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__a4bb31a6._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__a4bb31a6._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__cf17e26a._.js → [root-of-the-server]__aed64cd3._.js} +2 -2
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__aed64cd3._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__cf030fda._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__cf030fda._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/{_96ba1d8e._.js → _74bf5366._.js} +2 -2
- package/mcp-server/.next/server/chunks/ssr/_74bf5366._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_page_tsx_9fc46577._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_page_tsx_9fc46577._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/mcp-server_components_dark-mode-toggle_tsx_f31dd15d._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/mcp-server_components_dark-mode-toggle_tsx_f31dd15d._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_3d10aa72._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_3d10aa72._.js.map +1 -0
- package/mcp-server/.next/server/middleware-build-manifest.js +3 -4
- package/mcp-server/.next/server/server-reference-manifest.js +1 -1
- package/mcp-server/.next/server/server-reference-manifest.json +1 -1
- package/mcp-server/.next/static/chunks/{55cedb1a993e951c.js → 1d2676338b51bbcf.js} +1 -1
- package/mcp-server/.next/static/chunks/312a4c1c7f6436ef.js +1 -0
- package/mcp-server/.next/static/chunks/8364b81221aabb64.js +1 -0
- package/mcp-server/.next/static/chunks/a42830291751fe48.js +1 -0
- package/mcp-server/.next/static/chunks/bb2e6ac36794beea.css +1 -0
- package/mcp-server/.next/static/chunks/c578923146856601.js +1 -0
- package/mcp-server/.next/static/chunks/turbopack-22a9e2c19fd12b04.js +3 -0
- package/mcp-server/app/api/orchestrator/route.ts +73 -0
- package/mcp-server/app/globals.css +0 -1
- package/mcp-server/app/logs/LogsClient.infinite-loop.test.tsx +1 -1
- package/mcp-server/app/mcp/client-manager.ts +281 -0
- package/mcp-server/app/mcp/route.ts +166 -0
- package/mcp-server/app/mcp/tools.ts +71 -18
- package/mcp-server/app/page.tsx +79 -65
- package/mcp-server/package.json +7 -9
- package/package.json +3 -8
- package/src/tui-interface-impl.tsx +1 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__00592d3f._.js +0 -91
- package/mcp-server/.next/server/chunks/[root-of-the-server]__00592d3f._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__177c72c6._.js +0 -17
- package/mcp-server/.next/server/chunks/[root-of-the-server]__177c72c6._.js.map +0 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__2942c072._.js +0 -3
- package/mcp-server/.next/server/chunks/[root-of-the-server]__e6dcd8bf._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__22d96eb1._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__22d96eb1._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__63dd19ce._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__63dd19ce._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__94d8e211._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__94d8e211._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__bf771f7e._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__c4e78a20._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__cf17e26a._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_28084f73._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/_28084f73._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_96ba1d8e._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_aa32a659._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/_aa32a659._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_b2368b47._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_b2368b47._.js.map +0 -1
- package/mcp-server/.next/static/chunks/0cf268b98f36b0b5.css +0 -1
- package/mcp-server/.next/static/chunks/571fbcba7786c174.js +0 -1
- package/mcp-server/.next/static/chunks/5fdb882fe407a798.js +0 -1
- package/mcp-server/.next/static/chunks/98e04adc8a00688a.js +0 -1
- package/mcp-server/.next/static/chunks/db42008ac1e97815.js +0 -1
- package/mcp-server/.next/static/chunks/dbbdc51e76f4cea4.js +0 -1
- package/mcp-server/.next/static/chunks/turbopack-7112e6b6aee1d84f.js +0 -3
- /package/mcp-server/.next/server/chunks/{[root-of-the-server]__2942c072._.js.map → [externals]_node:crypto_c20cce38._.js.map} +0 -0
- /package/mcp-server/.next/server/chunks/{[root-of-the-server]__6ee9a99f._.js.map → [root-of-the-server]__3130ceec._.js.map} +0 -0
- /package/mcp-server/.next/server/chunks/{[root-of-the-server]__e6dcd8bf._.js.map → [root-of-the-server]__4637d3dd._.js.map} +0 -0
- /package/mcp-server/.next/server/chunks/{[root-of-the-server]__bc773251._.js.map → [root-of-the-server]__5114419d._.js.map} +0 -0
- /package/mcp-server/.next/server/chunks/{[root-of-the-server]__55c04517._.js.map → [root-of-the-server]__a004a307._.js.map} +0 -0
- /package/mcp-server/.next/static/{xBA_-Bho-qV9WoLREZ2m_ → 5ZNPgBUtuG6HhHaBXqChL}/_buildManifest.js +0 -0
- /package/mcp-server/.next/static/{xBA_-Bho-qV9WoLREZ2m_ → 5ZNPgBUtuG6HhHaBXqChL}/_clientMiddlewareManifest.json +0 -0
- /package/mcp-server/.next/static/{xBA_-Bho-qV9WoLREZ2m_ → 5ZNPgBUtuG6HhHaBXqChL}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"AAkCA,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;
|
|
1
|
+
{"version":3,"file":"dev-environment.d.ts","sourceRoot":"","sources":["../src/dev-environment.ts"],"names":[],"mappings":"AAkCA,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AA8VD,wBAAgB,uBAAuB,IAAI,MAAM,CAmBhD;AAsGD,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,uBAAuB,CAAiB;gBAEpC,OAAO,EAAE,qBAAqB;YA+D5B,mBAAmB;YAoEnB,aAAa;YAuCb,kBAAkB;IAgChC,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAQjB,KAAK;YAiPG,WAAW;IA0GzB,OAAO,CAAC,QAAQ;IA8BhB,OAAO,CAAC,cAAc;YA2BR,cAAc;YA4Pd,aAAa;IAiD3B,OAAO,CAAC,yBAAyB;YAOnB,oBAAoB;YAmJpB,gBAAgB;YAgChB,4BAA4B;YAmF5B,6BAA6B;IA+F3C,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,MAAM;IAqBd,OAAO,CAAC,6BAA6B;IAgDrC,OAAO,CAAC,uBAAuB;YAuBjB,sBAAsB;YAgBtB,kBAAkB;YA8ElB,gBAAgB;IAmF9B,OAAO,CAAC,oBAAoB;YA6Ed,cAAc;CAsJ7B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,iBAGvE"}
|
package/dist/dev-environment.js
CHANGED
|
@@ -175,7 +175,7 @@ async function isChromeDevtoolsMcpSupported() {
|
|
|
175
175
|
/**
|
|
176
176
|
* Ensure MCP server configurations are added to project's .mcp.json (Claude Code)
|
|
177
177
|
*/
|
|
178
|
-
async function ensureMcpServers(mcpPort,
|
|
178
|
+
async function ensureMcpServers(mcpPort, _appPort, _enableChromeDevtools, _enableNextjsMcp) {
|
|
179
179
|
try {
|
|
180
180
|
const settingsPath = join(process.cwd(), ".mcp.json");
|
|
181
181
|
// Read or create settings
|
|
@@ -193,6 +193,9 @@ async function ensureMcpServers(mcpPort, appPort, enableChromeDevtools, enableNe
|
|
|
193
193
|
}
|
|
194
194
|
let added = false;
|
|
195
195
|
// Add dev3000 MCP server (HTTP type)
|
|
196
|
+
// NOTE: dev3000 now acts as an MCP orchestrator/gateway that internally
|
|
197
|
+
// connects to chrome-devtools and nextjs-dev MCPs, so users only need to
|
|
198
|
+
// configure dev3000 once!
|
|
196
199
|
if (!settings.mcpServers[MCP_NAMES.DEV3000]) {
|
|
197
200
|
settings.mcpServers[MCP_NAMES.DEV3000] = {
|
|
198
201
|
type: "http",
|
|
@@ -200,22 +203,8 @@ async function ensureMcpServers(mcpPort, appPort, enableChromeDevtools, enableNe
|
|
|
200
203
|
};
|
|
201
204
|
added = true;
|
|
202
205
|
}
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
settings.mcpServers[MCP_NAMES.CHROME_DEVTOOLS] = {
|
|
206
|
-
command: "npx",
|
|
207
|
-
args: ["chrome-devtools-mcp@latest", "--browserUrl", "http://127.0.0.1:9222"]
|
|
208
|
-
};
|
|
209
|
-
added = true;
|
|
210
|
-
}
|
|
211
|
-
// Add nextjs-dev MCP server if enabled (HTTP type - connects to Next.js dev server)
|
|
212
|
-
if (enableNextjsMcp && !settings.mcpServers[MCP_NAMES.NEXTJS_DEV]) {
|
|
213
|
-
settings.mcpServers[MCP_NAMES.NEXTJS_DEV] = {
|
|
214
|
-
type: "http",
|
|
215
|
-
url: `http://localhost:${appPort}/_next/mcp`
|
|
216
|
-
};
|
|
217
|
-
added = true;
|
|
218
|
-
}
|
|
206
|
+
// REMOVED: No longer auto-configure chrome-devtools and nextjs-dev
|
|
207
|
+
// dev3000 MCP server now orchestrates these internally via the gateway pattern
|
|
219
208
|
// Write if we added anything
|
|
220
209
|
if (added) {
|
|
221
210
|
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
@@ -228,7 +217,7 @@ async function ensureMcpServers(mcpPort, appPort, enableChromeDevtools, enableNe
|
|
|
228
217
|
/**
|
|
229
218
|
* Ensure MCP server configurations are added to project's .cursor/mcp.json
|
|
230
219
|
*/
|
|
231
|
-
async function ensureCursorMcpServers(mcpPort,
|
|
220
|
+
async function ensureCursorMcpServers(mcpPort, _appPort, _enableChromeDevtools, _enableNextjsMcp) {
|
|
232
221
|
try {
|
|
233
222
|
const cursorDir = join(process.cwd(), ".cursor");
|
|
234
223
|
const settingsPath = join(cursorDir, "mcp.json");
|
|
@@ -251,6 +240,8 @@ async function ensureCursorMcpServers(mcpPort, appPort, enableChromeDevtools, en
|
|
|
251
240
|
}
|
|
252
241
|
let added = false;
|
|
253
242
|
// Add dev3000 MCP server
|
|
243
|
+
// NOTE: dev3000 now acts as an MCP orchestrator/gateway that internally
|
|
244
|
+
// connects to chrome-devtools and nextjs-dev MCPs
|
|
254
245
|
if (!settings.mcpServers[MCP_NAMES.DEV3000]) {
|
|
255
246
|
settings.mcpServers[MCP_NAMES.DEV3000] = {
|
|
256
247
|
type: "http",
|
|
@@ -258,22 +249,8 @@ async function ensureCursorMcpServers(mcpPort, appPort, enableChromeDevtools, en
|
|
|
258
249
|
};
|
|
259
250
|
added = true;
|
|
260
251
|
}
|
|
261
|
-
//
|
|
262
|
-
|
|
263
|
-
settings.mcpServers[MCP_NAMES.CHROME_DEVTOOLS] = {
|
|
264
|
-
command: "npx",
|
|
265
|
-
args: ["chrome-devtools-mcp@latest", "--browserUrl", "http://127.0.0.1:9222"]
|
|
266
|
-
};
|
|
267
|
-
added = true;
|
|
268
|
-
}
|
|
269
|
-
// Add nextjs-dev MCP server if enabled (HTTP type - connects to Next.js dev server)
|
|
270
|
-
if (enableNextjsMcp && !settings.mcpServers[MCP_NAMES.NEXTJS_DEV]) {
|
|
271
|
-
settings.mcpServers[MCP_NAMES.NEXTJS_DEV] = {
|
|
272
|
-
type: "http",
|
|
273
|
-
url: `http://localhost:${appPort}/_next/mcp`
|
|
274
|
-
};
|
|
275
|
-
added = true;
|
|
276
|
-
}
|
|
252
|
+
// REMOVED: No longer auto-configure chrome-devtools and nextjs-dev
|
|
253
|
+
// dev3000 MCP server now orchestrates these internally via the gateway pattern
|
|
277
254
|
// Write if we added anything
|
|
278
255
|
if (added) {
|
|
279
256
|
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
@@ -287,7 +264,7 @@ async function ensureCursorMcpServers(mcpPort, appPort, enableChromeDevtools, en
|
|
|
287
264
|
* Ensure MCP server configurations are added to project's .opencode.json
|
|
288
265
|
* OpenCode uses a different structure: "mcp" instead of "mcpServers" and "type": "local" for stdio servers
|
|
289
266
|
*/
|
|
290
|
-
async function ensureOpenCodeMcpServers(mcpPort,
|
|
267
|
+
async function ensureOpenCodeMcpServers(mcpPort, _appPort, _enableChromeDevtools, _enableNextjsMcp) {
|
|
291
268
|
try {
|
|
292
269
|
const settingsPath = join(process.cwd(), ".opencode.json");
|
|
293
270
|
// Read or create settings - OpenCode uses "mcp" not "mcpServers"
|
|
@@ -305,6 +282,8 @@ async function ensureOpenCodeMcpServers(mcpPort, appPort, enableChromeDevtools,
|
|
|
305
282
|
}
|
|
306
283
|
let added = false;
|
|
307
284
|
// Add dev3000 MCP server - use npx with mcp-client to connect to HTTP server
|
|
285
|
+
// NOTE: dev3000 now acts as an MCP orchestrator/gateway that internally
|
|
286
|
+
// connects to chrome-devtools and nextjs-dev MCPs
|
|
308
287
|
if (!settings.mcp[MCP_NAMES.DEV3000]) {
|
|
309
288
|
settings.mcp[MCP_NAMES.DEV3000] = {
|
|
310
289
|
type: "local",
|
|
@@ -313,24 +292,8 @@ async function ensureOpenCodeMcpServers(mcpPort, appPort, enableChromeDevtools,
|
|
|
313
292
|
};
|
|
314
293
|
added = true;
|
|
315
294
|
}
|
|
316
|
-
//
|
|
317
|
-
|
|
318
|
-
settings.mcp[MCP_NAMES.CHROME_DEVTOOLS] = {
|
|
319
|
-
type: "local",
|
|
320
|
-
command: ["npx", "chrome-devtools-mcp@latest", "--browserUrl", "http://127.0.0.1:9222"],
|
|
321
|
-
enabled: true
|
|
322
|
-
};
|
|
323
|
-
added = true;
|
|
324
|
-
}
|
|
325
|
-
// Add nextjs-dev MCP server if enabled - use npx with mcp-client for HTTP
|
|
326
|
-
if (enableNextjsMcp && !settings.mcp[MCP_NAMES.NEXTJS_DEV]) {
|
|
327
|
-
settings.mcp[MCP_NAMES.NEXTJS_DEV] = {
|
|
328
|
-
type: "local",
|
|
329
|
-
command: ["npx", "@modelcontextprotocol/inspector", `http://localhost:${appPort}/_next/mcp`],
|
|
330
|
-
enabled: true
|
|
331
|
-
};
|
|
332
|
-
added = true;
|
|
333
|
-
}
|
|
295
|
+
// REMOVED: No longer auto-configure chrome-devtools and nextjs-dev
|
|
296
|
+
// dev3000 MCP server now orchestrates these internally via the gateway pattern
|
|
334
297
|
// Write if we added anything
|
|
335
298
|
if (added) {
|
|
336
299
|
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
@@ -340,132 +303,8 @@ async function ensureOpenCodeMcpServers(mcpPort, appPort, enableChromeDevtools,
|
|
|
340
303
|
// Ignore errors - settings file manipulation is optional
|
|
341
304
|
}
|
|
342
305
|
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
*/
|
|
346
|
-
async function cleanupCursorMcpServers(enableChromeDevtools, enableNextjsMcp) {
|
|
347
|
-
try {
|
|
348
|
-
const settingsPath = join(process.cwd(), ".cursor", "mcp.json");
|
|
349
|
-
// Check if file exists
|
|
350
|
-
if (!existsSync(settingsPath)) {
|
|
351
|
-
return; // No settings file to clean up
|
|
352
|
-
}
|
|
353
|
-
// Read current settings
|
|
354
|
-
const settingsContent = readFileSync(settingsPath, "utf-8");
|
|
355
|
-
const settings = JSON.parse(settingsContent);
|
|
356
|
-
// Ensure mcpServers structure exists
|
|
357
|
-
if (!settings.mcpServers) {
|
|
358
|
-
return; // No MCP servers to clean up
|
|
359
|
-
}
|
|
360
|
-
let removed = false;
|
|
361
|
-
// Remove dev3000 MCP server
|
|
362
|
-
if (settings.mcpServers[MCP_NAMES.DEV3000]) {
|
|
363
|
-
delete settings.mcpServers[MCP_NAMES.DEV3000];
|
|
364
|
-
removed = true;
|
|
365
|
-
}
|
|
366
|
-
// Remove chrome-devtools MCP server if it was enabled
|
|
367
|
-
if (enableChromeDevtools && settings.mcpServers[MCP_NAMES.CHROME_DEVTOOLS]) {
|
|
368
|
-
delete settings.mcpServers[MCP_NAMES.CHROME_DEVTOOLS];
|
|
369
|
-
removed = true;
|
|
370
|
-
}
|
|
371
|
-
// Remove nextjs-dev MCP server if it was enabled
|
|
372
|
-
if (enableNextjsMcp && settings.mcpServers[MCP_NAMES.NEXTJS_DEV]) {
|
|
373
|
-
delete settings.mcpServers[MCP_NAMES.NEXTJS_DEV];
|
|
374
|
-
removed = true;
|
|
375
|
-
}
|
|
376
|
-
// Only write if we actually removed something
|
|
377
|
-
if (removed) {
|
|
378
|
-
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
catch (_error) {
|
|
382
|
-
// Ignore cleanup errors
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Clean up MCP server configurations from project's .opencode.json
|
|
387
|
-
*/
|
|
388
|
-
async function cleanupOpenCodeMcpServers(enableChromeDevtools, enableNextjsMcp) {
|
|
389
|
-
try {
|
|
390
|
-
const settingsPath = join(process.cwd(), ".opencode.json");
|
|
391
|
-
// Check if file exists
|
|
392
|
-
if (!existsSync(settingsPath)) {
|
|
393
|
-
return; // No settings file to clean up
|
|
394
|
-
}
|
|
395
|
-
// Read current settings
|
|
396
|
-
const settingsContent = readFileSync(settingsPath, "utf-8");
|
|
397
|
-
const settings = JSON.parse(settingsContent);
|
|
398
|
-
// Ensure mcp structure exists (OpenCode uses "mcp" not "mcpServers")
|
|
399
|
-
if (!settings.mcp) {
|
|
400
|
-
return; // No MCP servers to clean up
|
|
401
|
-
}
|
|
402
|
-
let removed = false;
|
|
403
|
-
// Remove dev3000 MCP server
|
|
404
|
-
if (settings.mcp[MCP_NAMES.DEV3000]) {
|
|
405
|
-
delete settings.mcp[MCP_NAMES.DEV3000];
|
|
406
|
-
removed = true;
|
|
407
|
-
}
|
|
408
|
-
// Remove chrome-devtools MCP server if it was enabled
|
|
409
|
-
if (enableChromeDevtools && settings.mcp[MCP_NAMES.CHROME_DEVTOOLS]) {
|
|
410
|
-
delete settings.mcp[MCP_NAMES.CHROME_DEVTOOLS];
|
|
411
|
-
removed = true;
|
|
412
|
-
}
|
|
413
|
-
// Remove nextjs-dev MCP server if it was enabled
|
|
414
|
-
if (enableNextjsMcp && settings.mcp[MCP_NAMES.NEXTJS_DEV]) {
|
|
415
|
-
delete settings.mcp[MCP_NAMES.NEXTJS_DEV];
|
|
416
|
-
removed = true;
|
|
417
|
-
}
|
|
418
|
-
// Only write if we actually removed something
|
|
419
|
-
if (removed) {
|
|
420
|
-
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
catch (_error) {
|
|
424
|
-
// Ignore cleanup errors
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
/**
|
|
428
|
-
* Clean up MCP server configurations from project's .mcp.json (Claude Code)
|
|
429
|
-
*/
|
|
430
|
-
async function cleanupMcpServers(enableChromeDevtools, enableNextjsMcp) {
|
|
431
|
-
try {
|
|
432
|
-
const settingsPath = join(process.cwd(), ".mcp.json");
|
|
433
|
-
// Check if file exists
|
|
434
|
-
if (!existsSync(settingsPath)) {
|
|
435
|
-
return; // No settings file to clean up
|
|
436
|
-
}
|
|
437
|
-
// Read current settings
|
|
438
|
-
const settingsContent = readFileSync(settingsPath, "utf-8");
|
|
439
|
-
const settings = JSON.parse(settingsContent);
|
|
440
|
-
// Ensure mcpServers structure exists
|
|
441
|
-
if (!settings.mcpServers) {
|
|
442
|
-
return; // No MCP servers to clean up
|
|
443
|
-
}
|
|
444
|
-
let removed = false;
|
|
445
|
-
// Remove dev3000 MCP server
|
|
446
|
-
if (settings.mcpServers[MCP_NAMES.DEV3000]) {
|
|
447
|
-
delete settings.mcpServers[MCP_NAMES.DEV3000];
|
|
448
|
-
removed = true;
|
|
449
|
-
}
|
|
450
|
-
// Remove chrome-devtools MCP server if it was enabled
|
|
451
|
-
if (enableChromeDevtools && settings.mcpServers[MCP_NAMES.CHROME_DEVTOOLS]) {
|
|
452
|
-
delete settings.mcpServers[MCP_NAMES.CHROME_DEVTOOLS];
|
|
453
|
-
removed = true;
|
|
454
|
-
}
|
|
455
|
-
// Remove nextjs-dev MCP server if it was enabled
|
|
456
|
-
if (enableNextjsMcp && settings.mcpServers[MCP_NAMES.NEXTJS_DEV]) {
|
|
457
|
-
delete settings.mcpServers[MCP_NAMES.NEXTJS_DEV];
|
|
458
|
-
removed = true;
|
|
459
|
-
}
|
|
460
|
-
// Only write if we actually removed something
|
|
461
|
-
if (removed) {
|
|
462
|
-
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
catch (_error) {
|
|
466
|
-
// Ignore cleanup errors
|
|
467
|
-
}
|
|
468
|
-
}
|
|
306
|
+
// REMOVED: cleanup functions are no longer needed
|
|
307
|
+
// MCP config files are now kept persistent across dev3000 restarts
|
|
469
308
|
export function createPersistentLogFile() {
|
|
470
309
|
// Get unique project name
|
|
471
310
|
const projectName = getProjectName();
|
|
@@ -946,7 +785,7 @@ export class DevEnvironment {
|
|
|
946
785
|
console.log(chalk.cyan(`Logs: ${this.options.logFile}`));
|
|
947
786
|
console.log(chalk.cyan("☝️ Give this to an AI to auto debug and fix your app\n"));
|
|
948
787
|
console.log(chalk.cyan(`🌐 Your App: http://localhost:${this.options.port}`));
|
|
949
|
-
console.log(chalk.cyan(`🤖 MCP Server: http://localhost:${this.options.mcpPort}
|
|
788
|
+
console.log(chalk.cyan(`🤖 MCP Server: http://localhost:${this.options.mcpPort}`));
|
|
950
789
|
console.log(chalk.cyan(`📸 Visual Timeline: http://localhost:${this.options.mcpPort}/logs?project=${encodeURIComponent(projectName)}`));
|
|
951
790
|
if (this.options.serversOnly) {
|
|
952
791
|
console.log(chalk.cyan("🖥️ Servers-only mode - use Chrome extension for browser monitoring"));
|
|
@@ -1271,6 +1110,9 @@ export class DevEnvironment {
|
|
|
1271
1110
|
}
|
|
1272
1111
|
this.debugLog(`MCP server command: ${mcpCommand.join(" ")}`);
|
|
1273
1112
|
this.debugLog(`MCP server cwd: ${mcpCwd}`);
|
|
1113
|
+
// Get CDP URL and app port for MCP orchestration
|
|
1114
|
+
const cdpUrl = this.cdpMonitor?.getCdpUrl() || null;
|
|
1115
|
+
const appPort = this.options.port;
|
|
1274
1116
|
// Start MCP server as a true background singleton process
|
|
1275
1117
|
this.mcpServerProcess = spawn(mcpCommand[0], mcpCommand.slice(1), {
|
|
1276
1118
|
stdio: ["ignore", "pipe", "pipe"],
|
|
@@ -1281,7 +1123,9 @@ export class DevEnvironment {
|
|
|
1281
1123
|
PORT: this.options.mcpPort,
|
|
1282
1124
|
LOG_FILE_PATH: this.options.logFile, // Pass log file path to MCP server
|
|
1283
1125
|
DEV3000_VERSION: this.version, // Pass version to MCP server
|
|
1284
|
-
SCREENSHOT_DIR: this.screenshotDir // Pass screenshot directory for global installs
|
|
1126
|
+
SCREENSHOT_DIR: this.screenshotDir, // Pass screenshot directory for global installs
|
|
1127
|
+
CDP_URL: cdpUrl || "", // Pass CDP URL for chrome-devtools MCP orchestration
|
|
1128
|
+
APP_PORT: appPort // Pass app port for nextjs-dev MCP orchestration
|
|
1285
1129
|
}
|
|
1286
1130
|
});
|
|
1287
1131
|
// Unref the process so it continues running after parent exits
|
|
@@ -1307,7 +1151,8 @@ export class DevEnvironment {
|
|
|
1307
1151
|
const timestamp = new Date().toISOString();
|
|
1308
1152
|
appendFileSync(mcpLogFile, `[${timestamp}] [MCP-STDERR] ${message}\n`);
|
|
1309
1153
|
// Only show critical errors in stdout for debugging
|
|
1310
|
-
|
|
1154
|
+
// Exclude MCP Orchestrator connection errors (they're expected and non-critical)
|
|
1155
|
+
if ((message.includes("FATAL") || message.includes("Error:")) && !message.includes("[MCP Orchestrator]")) {
|
|
1311
1156
|
console.error(chalk.red("[ERROR]"), message);
|
|
1312
1157
|
}
|
|
1313
1158
|
}
|
|
@@ -2034,10 +1879,10 @@ export class DevEnvironment {
|
|
|
2034
1879
|
}
|
|
2035
1880
|
}
|
|
2036
1881
|
}
|
|
2037
|
-
//
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
1882
|
+
// REMOVED: No longer clean up MCP config files on shutdown
|
|
1883
|
+
// This was causing Claude Code instances to crash when dev3000 was killed
|
|
1884
|
+
// Now we keep .mcp.json, .cursor/mcp.json, and .opencode.json configured
|
|
1885
|
+
// for the next dev3000 run, providing a better developer experience
|
|
2041
1886
|
// Kill processes on both ports
|
|
2042
1887
|
const killPortProcess = async (port, name) => {
|
|
2043
1888
|
try {
|