dev3000 0.0.72 → 0.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/README.md +78 -30
  2. package/dist/cli.js +3 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/dev-environment.d.ts +9 -1
  5. package/dist/dev-environment.d.ts.map +1 -1
  6. package/dist/dev-environment.js +586 -6
  7. package/dist/dev-environment.js.map +1 -1
  8. package/dist/src/loading.html +1 -1
  9. package/dist/src/tui-interface-impl.tsx +35 -30
  10. package/dist/tui-interface-impl.d.ts.map +1 -1
  11. package/dist/tui-interface-impl.js +26 -20
  12. package/dist/tui-interface-impl.js.map +1 -1
  13. package/dist/tui-interface.d.ts.map +1 -1
  14. package/dist/tui-interface.js +26 -5
  15. package/dist/tui-interface.js.map +1 -1
  16. package/mcp-server/.next/BUILD_ID +1 -1
  17. package/mcp-server/.next/build-manifest.json +8 -8
  18. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  19. package/mcp-server/.next/images-manifest.json +2 -2
  20. package/mcp-server/.next/next-minimal-server.js.nft.json +1 -1
  21. package/mcp-server/.next/next-server.js.nft.json +1 -1
  22. package/mcp-server/.next/prerender-manifest.json +10 -10
  23. package/mcp-server/.next/required-server-files.json +5 -6
  24. package/mcp-server/.next/routes-manifest.json +1 -0
  25. package/mcp-server/.next/server/app/_global-error/page/build-manifest.json +6 -6
  26. package/mcp-server/.next/server/app/_global-error/page.js +8 -8
  27. package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
  28. package/mcp-server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  29. package/mcp-server/.next/server/app/_global-error.html +2 -2
  30. package/mcp-server/.next/server/app/_global-error.rsc +8 -8
  31. package/mcp-server/.next/server/app/_not-found/page/build-manifest.json +6 -6
  32. package/mcp-server/.next/server/app/_not-found/page.js +10 -10
  33. package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
  34. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. package/mcp-server/.next/server/app/_not-found.html +1 -1
  36. package/mcp-server/.next/server/app/_not-found.rsc +8 -8
  37. package/mcp-server/.next/server/app/api/logs/append/route/build-manifest.json +1 -8
  38. package/mcp-server/.next/server/app/api/logs/append/route.js +4 -4
  39. package/mcp-server/.next/server/app/api/logs/append/route.js.nft.json +1 -1
  40. package/mcp-server/.next/server/app/api/logs/head/route/build-manifest.json +1 -8
  41. package/mcp-server/.next/server/app/api/logs/head/route.js +4 -4
  42. package/mcp-server/.next/server/app/api/logs/head/route.js.nft.json +1 -1
  43. package/mcp-server/.next/server/app/api/logs/list/route/build-manifest.json +1 -8
  44. package/mcp-server/.next/server/app/api/logs/list/route.js +4 -4
  45. package/mcp-server/.next/server/app/api/logs/list/route.js.nft.json +1 -1
  46. package/mcp-server/.next/server/app/api/logs/rotate/route/build-manifest.json +1 -8
  47. package/mcp-server/.next/server/app/api/logs/rotate/route.js +5 -5
  48. package/mcp-server/.next/server/app/api/logs/rotate/route.js.nft.json +1 -1
  49. package/mcp-server/.next/server/app/api/logs/stream/route/build-manifest.json +1 -8
  50. package/mcp-server/.next/server/app/api/logs/stream/route.js +4 -4
  51. package/mcp-server/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
  52. package/mcp-server/.next/server/app/api/logs/tail/route/build-manifest.json +1 -8
  53. package/mcp-server/.next/server/app/api/logs/tail/route.js +4 -4
  54. package/mcp-server/.next/server/app/api/logs/tail/route.js.nft.json +1 -1
  55. package/mcp-server/.next/server/app/api/screenshots/[filename]/route/build-manifest.json +1 -8
  56. package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js +5 -5
  57. package/mcp-server/.next/server/app/api/screenshots/[filename]/route.js.nft.json +1 -1
  58. package/mcp-server/.next/server/app/api/tools/route/build-manifest.json +1 -8
  59. package/mcp-server/.next/server/app/api/tools/route.js +5 -5
  60. package/mcp-server/.next/server/app/api/tools/route.js.nft.json +1 -1
  61. package/mcp-server/.next/server/app/index.html +1 -1
  62. package/mcp-server/.next/server/app/index.rsc +10 -10
  63. package/mcp-server/.next/server/app/logs/page/build-manifest.json +6 -6
  64. package/mcp-server/.next/server/app/logs/page.js +13 -13
  65. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  66. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  67. package/mcp-server/.next/server/app/mcp/route/build-manifest.json +1 -8
  68. package/mcp-server/.next/server/app/mcp/route.js +6 -5
  69. package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
  70. package/mcp-server/.next/server/app/page/build-manifest.json +6 -6
  71. package/mcp-server/.next/server/app/page.js +12 -12
  72. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  73. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  74. package/mcp-server/.next/server/chunks/[root-of-the-server]__013bbeea._.js +7 -0
  75. package/mcp-server/.next/server/chunks/[root-of-the-server]__013bbeea._.js.map +1 -0
  76. package/mcp-server/.next/server/chunks/[root-of-the-server]__270b33b7._.js +33 -0
  77. package/mcp-server/.next/server/chunks/[root-of-the-server]__270b33b7._.js.map +1 -0
  78. package/mcp-server/.next/server/chunks/[root-of-the-server]__5580d2ea._.js +35 -0
  79. package/mcp-server/.next/server/chunks/[root-of-the-server]__5580d2ea._.js.map +1 -0
  80. package/mcp-server/.next/server/chunks/[root-of-the-server]__6fa7ea53._.js +3 -0
  81. package/mcp-server/.next/server/chunks/[root-of-the-server]__73645708._.js +11 -0
  82. package/mcp-server/.next/server/chunks/[root-of-the-server]__73645708._.js.map +1 -0
  83. package/mcp-server/.next/server/chunks/[root-of-the-server]__8fc8f497._.js +4 -0
  84. package/mcp-server/.next/server/chunks/[root-of-the-server]__8fc8f497._.js.map +1 -0
  85. package/mcp-server/.next/server/chunks/[root-of-the-server]__9c489027._.js +3 -0
  86. package/mcp-server/.next/server/chunks/[root-of-the-server]__9c489027._.js.map +1 -0
  87. package/mcp-server/.next/server/chunks/[root-of-the-server]__cc81580c._.js +3 -0
  88. package/mcp-server/.next/server/chunks/[root-of-the-server]__cc81580c._.js.map +1 -0
  89. package/mcp-server/.next/server/chunks/[root-of-the-server]__d1f9e389._.js +3 -0
  90. package/mcp-server/.next/server/chunks/[root-of-the-server]__d1f9e389._.js.map +1 -0
  91. package/mcp-server/.next/server/chunks/[root-of-the-server]__d200fe4a._.js +3 -0
  92. package/mcp-server/.next/server/chunks/[root-of-the-server]__d200fe4a._.js.map +1 -0
  93. package/mcp-server/.next/server/chunks/[root-of-the-server]__e2089993._.js +3 -0
  94. package/mcp-server/.next/server/chunks/[root-of-the-server]__e2089993._.js.map +1 -0
  95. package/mcp-server/.next/server/chunks/[root-of-the-server]__ffb73672._.js +3 -0
  96. package/mcp-server/.next/server/chunks/[root-of-the-server]__ffb73672._.js.map +1 -0
  97. package/mcp-server/.next/server/chunks/{0916f_next_ab257ac1._.js → d1d76_next_09a9e080._.js} +4 -4
  98. package/mcp-server/.next/server/chunks/d1d76_next_09a9e080._.js.map +1 -0
  99. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__0217e89c._.js +3 -0
  100. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__0217e89c._.js.map +1 -0
  101. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__02a8c992._.js +3 -0
  102. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__05689c01._.js +3 -0
  103. package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__6518b3b8._.js.map → [root-of-the-server]__05689c01._.js.map} +1 -1
  104. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__8db775f9._.js +3 -0
  105. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__8db775f9._.js.map +1 -0
  106. package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__524f1e5c._.js → [root-of-the-server]__91510608._.js} +2 -2
  107. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__91510608._.js.map +1 -0
  108. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9f07837d._.js +3 -0
  109. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__9f07837d._.js.map +1 -0
  110. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__db74836a._.js +3 -0
  111. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__db74836a._.js.map +1 -0
  112. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__e5dec879._.js +3 -0
  113. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__e5dec879._.js.map +1 -0
  114. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__fb40854a._.js +3 -0
  115. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__fb40854a._.js.map +1 -0
  116. package/mcp-server/.next/server/chunks/ssr/_0b8335fc._.js +8 -0
  117. package/mcp-server/.next/server/chunks/ssr/_0b8335fc._.js.map +1 -0
  118. package/mcp-server/.next/server/chunks/ssr/_28084f73._.js +3 -0
  119. package/mcp-server/.next/server/chunks/ssr/_28084f73._.js.map +1 -0
  120. package/mcp-server/.next/server/chunks/ssr/{_8babd77a._.js → _6129d8ec._.js} +3 -3
  121. package/mcp-server/.next/server/chunks/ssr/_6129d8ec._.js.map +1 -0
  122. package/mcp-server/.next/server/chunks/ssr/_62451611._.js +3 -0
  123. package/mcp-server/.next/server/chunks/ssr/_62451611._.js.map +1 -0
  124. package/mcp-server/.next/server/chunks/ssr/_7d3d2f5f._.js +4 -0
  125. package/mcp-server/.next/server/chunks/ssr/_7d3d2f5f._.js.map +1 -0
  126. package/mcp-server/.next/server/chunks/ssr/_b15f05ee._.js +3 -0
  127. package/mcp-server/.next/server/chunks/ssr/_b15f05ee._.js.map +1 -0
  128. package/mcp-server/.next/server/chunks/ssr/_bacf0748._.js +8 -0
  129. package/mcp-server/.next/server/chunks/ssr/_bacf0748._.js.map +1 -0
  130. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_032c5c2e._.js +3 -0
  131. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_032c5c2e._.js.map +1 -0
  132. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_08b22e19._.js +3 -0
  133. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_08b22e19._.js.map +1 -0
  134. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_369453b3._.js +6 -0
  135. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_369453b3._.js.map +1 -0
  136. package/mcp-server/.next/server/chunks/ssr/{0916f_next_dist_54420d8c._.js → d1d76_next_dist_ad253fdc._.js} +3 -3
  137. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_ad253fdc._.js.map +1 -0
  138. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_b9509b36._.js +6 -0
  139. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_b9509b36._.js.map +1 -0
  140. package/mcp-server/.next/server/chunks/ssr/{0916f_next_dist_client_components_f453b63e._.js → d1d76_next_dist_client_components_6557bb14._.js} +2 -2
  141. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_client_components_6557bb14._.js.map +1 -0
  142. package/mcp-server/.next/server/chunks/ssr/{0916f_next_dist_client_components_builtin_forbidden_7b57efa5.js → d1d76_next_dist_client_components_builtin_forbidden_c162dd05.js} +2 -2
  143. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_client_components_builtin_forbidden_c162dd05.js.map +1 -0
  144. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_client_components_builtin_global-error_3d982957.js +3 -0
  145. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_client_components_builtin_global-error_3d982957.js.map +1 -0
  146. package/mcp-server/.next/server/chunks/ssr/{0916f_next_dist_client_components_builtin_unauthorized_6614f15c.js → d1d76_next_dist_client_components_builtin_unauthorized_e4f02ffd.js} +2 -2
  147. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_client_components_builtin_unauthorized_e4f02ffd.js.map +1 -0
  148. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_esm_build_templates_app-page_134a93a5.js +4 -0
  149. package/mcp-server/.next/server/chunks/ssr/d1d76_next_dist_esm_build_templates_app-page_134a93a5.js.map +1 -0
  150. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js +1 -1
  151. package/mcp-server/.next/server/middleware-build-manifest.js +7 -8
  152. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  153. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  154. package/mcp-server/.next/static/chunks/11ac0d0e69696c72.js +1 -0
  155. package/mcp-server/.next/static/chunks/172f6179d608c15f.js +1 -0
  156. package/mcp-server/.next/static/chunks/526448e84b58822c.js +1 -0
  157. package/mcp-server/.next/static/chunks/571fbcba7786c174.js +1 -0
  158. package/mcp-server/.next/static/chunks/{044e917a180dc576.js → 711519b5a2e53fc8.js} +1 -1
  159. package/mcp-server/.next/static/chunks/addab50e23821c6c.js +1 -0
  160. package/mcp-server/.next/static/chunks/bb8a4e5f381a85ec.js +1 -0
  161. package/mcp-server/.next/static/chunks/dbbdc51e76f4cea4.js +1 -0
  162. package/mcp-server/.next/static/chunks/e09be78bba2194fd.js +1 -0
  163. package/mcp-server/.next/static/chunks/fec3a6ddaef02b8b.js +1 -0
  164. package/mcp-server/.next/static/chunks/{turbopack-ef2dba9946ddb22a.js → turbopack-7cd5a898ed038e26.js} +2 -2
  165. package/mcp-server/app/mcp/route.ts +133 -2
  166. package/mcp-server/app/mcp/tools.ts +991 -5
  167. package/mcp-server/next.config.ts +4 -0
  168. package/mcp-server/package.json +12 -6
  169. package/package.json +4 -4
  170. package/src/tui-interface-impl.tsx +35 -30
  171. package/mcp-server/.next/app-build-manifest.json +0 -52
  172. package/mcp-server/.next/postcss.js +0 -6
  173. package/mcp-server/.next/postcss.js.map +0 -5
  174. package/mcp-server/.next/server/app/_global-error/page/app-build-manifest.json +0 -14
  175. package/mcp-server/.next/server/app/_not-found/page/app-build-manifest.json +0 -15
  176. package/mcp-server/.next/server/app/api/logs/append/route/app-build-manifest.json +0 -12
  177. package/mcp-server/.next/server/app/api/logs/head/route/app-build-manifest.json +0 -12
  178. package/mcp-server/.next/server/app/api/logs/list/route/app-build-manifest.json +0 -12
  179. package/mcp-server/.next/server/app/api/logs/rotate/route/app-build-manifest.json +0 -12
  180. package/mcp-server/.next/server/app/api/logs/stream/route/app-build-manifest.json +0 -12
  181. package/mcp-server/.next/server/app/api/logs/tail/route/app-build-manifest.json +0 -12
  182. package/mcp-server/.next/server/app/api/screenshots/[filename]/route/app-build-manifest.json +0 -12
  183. package/mcp-server/.next/server/app/api/tools/route/app-build-manifest.json +0 -12
  184. package/mcp-server/.next/server/app/logs/page/app-build-manifest.json +0 -18
  185. package/mcp-server/.next/server/app/mcp/route/app-build-manifest.json +0 -12
  186. package/mcp-server/.next/server/app/page/app-build-manifest.json +0 -17
  187. package/mcp-server/.next/server/chunks/0916f_next_ab257ac1._.js.map +0 -1
  188. package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js +0 -3
  189. package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js.map +0 -1
  190. package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js +0 -21
  191. package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js.map +0 -1
  192. package/mcp-server/.next/server/chunks/[root-of-the-server]__47380b6c._.js +0 -7
  193. package/mcp-server/.next/server/chunks/[root-of-the-server]__47380b6c._.js.map +0 -1
  194. package/mcp-server/.next/server/chunks/[root-of-the-server]__674284d7._.js +0 -3
  195. package/mcp-server/.next/server/chunks/[root-of-the-server]__674284d7._.js.map +0 -1
  196. package/mcp-server/.next/server/chunks/[root-of-the-server]__6a89b7dc._.js +0 -3
  197. package/mcp-server/.next/server/chunks/[root-of-the-server]__6a89b7dc._.js.map +0 -1
  198. package/mcp-server/.next/server/chunks/[root-of-the-server]__729bfe09._.js +0 -11
  199. package/mcp-server/.next/server/chunks/[root-of-the-server]__729bfe09._.js.map +0 -1
  200. package/mcp-server/.next/server/chunks/[root-of-the-server]__a433711a._.js +0 -3
  201. package/mcp-server/.next/server/chunks/[root-of-the-server]__a433711a._.js.map +0 -1
  202. package/mcp-server/.next/server/chunks/[root-of-the-server]__a58600d8._.js +0 -3
  203. package/mcp-server/.next/server/chunks/[root-of-the-server]__a58600d8._.js.map +0 -1
  204. package/mcp-server/.next/server/chunks/[root-of-the-server]__bc43993b._.js +0 -3
  205. package/mcp-server/.next/server/chunks/[root-of-the-server]__c464573d._.js +0 -3
  206. package/mcp-server/.next/server/chunks/[root-of-the-server]__c464573d._.js.map +0 -1
  207. package/mcp-server/.next/server/chunks/[root-of-the-server]__e6d29491._.js +0 -4
  208. package/mcp-server/.next/server/chunks/[root-of-the-server]__e6d29491._.js.map +0 -1
  209. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_54420d8c._.js.map +0 -1
  210. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_927c15f3._.js +0 -3
  211. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_927c15f3._.js.map +0 -1
  212. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_c17417af._.js +0 -3
  213. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_c17417af._.js.map +0 -1
  214. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_c724e947._.js +0 -6
  215. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_c724e947._.js.map +0 -1
  216. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_forbidden_7b57efa5.js.map +0 -1
  217. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_global-error_118601bd.js +0 -3
  218. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_global-error_118601bd.js.map +0 -1
  219. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_builtin_unauthorized_6614f15c.js.map +0 -1
  220. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_client_components_f453b63e._.js.map +0 -1
  221. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_esm_87a80014._.js +0 -6
  222. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_esm_87a80014._.js.map +0 -1
  223. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_esm_build_templates_app-page_25a3dd8d.js +0 -4
  224. package/mcp-server/.next/server/chunks/ssr/0916f_next_dist_esm_build_templates_app-page_25a3dd8d.js.map +0 -1
  225. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__224ddd99._.js +0 -3
  226. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__224ddd99._.js.map +0 -1
  227. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__2cdf0446._.js +0 -3
  228. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__2cdf0446._.js.map +0 -1
  229. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__524f1e5c._.js.map +0 -1
  230. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__6518b3b8._.js +0 -3
  231. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__73b7df71._.js +0 -3
  232. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__73b7df71._.js.map +0 -1
  233. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__83ee047c._.js +0 -3
  234. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__83ee047c._.js.map +0 -1
  235. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b2efa505._.js +0 -3
  236. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__b2efa505._.js.map +0 -1
  237. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__d9cb0b6d._.js +0 -3
  238. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__d9cb0b6d._.js.map +0 -1
  239. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__db132681._.js +0 -3
  240. package/mcp-server/.next/server/chunks/ssr/_188bfe33._.js +0 -6
  241. package/mcp-server/.next/server/chunks/ssr/_188bfe33._.js.map +0 -1
  242. package/mcp-server/.next/server/chunks/ssr/_3a061fbf._.js +0 -4
  243. package/mcp-server/.next/server/chunks/ssr/_3a061fbf._.js.map +0 -1
  244. package/mcp-server/.next/server/chunks/ssr/_8babd77a._.js.map +0 -1
  245. package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js +0 -5
  246. package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js.map +0 -1
  247. package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js +0 -3
  248. package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js.map +0 -1
  249. package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js +0 -8
  250. package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js.map +0 -1
  251. package/mcp-server/.next/server/chunks/ssr/_f03e80a8._.js +0 -6
  252. package/mcp-server/.next/server/chunks/ssr/_f03e80a8._.js.map +0 -1
  253. package/mcp-server/.next/static/chunks/1415a83da347ea73.js +0 -1
  254. package/mcp-server/.next/static/chunks/14ca28aed9ba7e16.js +0 -1
  255. package/mcp-server/.next/static/chunks/259312562b58ea20.js +0 -5
  256. package/mcp-server/.next/static/chunks/37a3ca444b4e0ebc.js +0 -1
  257. package/mcp-server/.next/static/chunks/37f62e06d680d8df.js +0 -1
  258. package/mcp-server/.next/static/chunks/40b55f6f752f90a1.js +0 -1
  259. package/mcp-server/.next/static/chunks/5a5edc75ee7e7de4.js +0 -1
  260. package/mcp-server/.next/static/chunks/5dd333b6181425ad.js +0 -1
  261. package/mcp-server/.next/static/chunks/6839f59cc7f3e68c.js +0 -1
  262. package/mcp-server/.next/static/chunks/7a1b61971931d3f6.js +0 -1
  263. package/mcp-server/.next/static/chunks/881ec25f9292cb32.js +0 -1
  264. package/mcp-server/.next/static/chunks/8a5ef92054eb3f68.js +0 -1
  265. package/mcp-server/.next/static/chunks/af081359d0245052.js +0 -5
  266. package/mcp-server/.next/static/chunks/b137bfc92ad8bec0.js +0 -1
  267. package/mcp-server/.next/static/chunks/c5f8464bc8083ee7.js +0 -1
  268. package/mcp-server/.next/static/chunks/eab992a4c8e8981a.js +0 -1
  269. package/mcp-server/.next/static/chunks/turbopack-aef1414f7c590584.js +0 -3
  270. package/mcp-server/.next/static/chunks/turbopack-e808877bd413e182.js +0 -3
  271. package/mcp-server/.next/webpack-loaders.js +0 -6
  272. package/mcp-server/.next/webpack-loaders.js.map +0 -5
  273. /package/mcp-server/.next/server/chunks/{[root-of-the-server]__bc43993b._.js.map → [root-of-the-server]__6fa7ea53._.js.map} +0 -0
  274. /package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__db132681._.js.map → [root-of-the-server]__02a8c992._.js.map} +0 -0
  275. /package/mcp-server/.next/static/{3E55dEq7tPut9JesZEs2c → mgu8K8xaf4jXbhRidu310}/_buildManifest.js +0 -0
  276. /package/mcp-server/.next/static/{3E55dEq7tPut9JesZEs2c → mgu8K8xaf4jXbhRidu310}/_clientMiddlewareManifest.json +0 -0
  277. /package/mcp-server/.next/static/{3E55dEq7tPut9JesZEs2c → mgu8K8xaf4jXbhRidu310}/_ssgManifest.js +0 -0
@@ -71,6 +71,299 @@ async function findAvailablePort(startPort) {
71
71
  }
72
72
  throw new Error(`No available ports found starting from ${startPort}`);
73
73
  }
74
+ const AI_CLI_TOOLS = [
75
+ {
76
+ binary: "claude",
77
+ name: "Claude Code",
78
+ addMcpCommand: (name, config) => ["claude", "mcp", "add-json", name, JSON.stringify(config)],
79
+ addHttpMcpCommand: (name, url) => ["claude", "mcp", "add", "-t", "http", name, url],
80
+ removeMcpCommand: (name) => ["claude", "mcp", "remove", name]
81
+ }
82
+ // TODO: Research and add other AI CLI tools once we verify their MCP capabilities
83
+ // {
84
+ // binary: "cursor-agent",
85
+ // name: "Cursor Agent",
86
+ // addMcpCommand: (name, config) => ["cursor-agent", "mcp", "add-json", name, JSON.stringify(config)],
87
+ // addHttpMcpCommand: (name, url) => ["cursor-agent", "mcp", "add", "-t", "http", name, url],
88
+ // removeMcpCommand: (name) => ["cursor-agent", "mcp", "remove", name]
89
+ // },
90
+ // {
91
+ // binary: "codex",
92
+ // name: "Codex CLI",
93
+ // addMcpCommand: (name, config) => ["codex", "mcp", "add-json", name, JSON.stringify(config)],
94
+ // addHttpMcpCommand: (name, url) => ["codex", "mcp", "add", "-t", "http", name, url],
95
+ // removeMcpCommand: (name) => ["codex", "mcp", "remove", name]
96
+ // },
97
+ // {
98
+ // binary: "gemini",
99
+ // name: "Gemini CLI",
100
+ // addMcpCommand: (name, config) => ["gemini", "mcp", "add-json", name, JSON.stringify(config)],
101
+ // addHttpMcpCommand: (name, url) => ["gemini", "mcp", "add", "-t", "http", name, url],
102
+ // removeMcpCommand: (name) => ["gemini", "mcp", "remove", name]
103
+ // }
104
+ ];
105
+ /**
106
+ * Check if Chrome version supports chrome-devtools MCP (>= 140.0.7339.214)
107
+ */
108
+ async function isChromeDevtoolsMcpSupported() {
109
+ try {
110
+ // Try different Chrome binary paths
111
+ const chromePaths = [
112
+ "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", // macOS
113
+ "/opt/google/chrome/chrome", // Linux
114
+ "chrome", // PATH
115
+ "google-chrome", // Linux PATH
116
+ "google-chrome-stable" // Linux PATH
117
+ ];
118
+ for (const chromePath of chromePaths) {
119
+ try {
120
+ const versionOutput = await new Promise((resolve, reject) => {
121
+ const chromeProcess = spawn(chromePath, ["--version"], {
122
+ stdio: ["ignore", "pipe", "ignore"]
123
+ });
124
+ let output = "";
125
+ chromeProcess.stdout?.on("data", (data) => {
126
+ output += data.toString();
127
+ });
128
+ chromeProcess.on("close", (code) => {
129
+ if (code === 0) {
130
+ resolve(output.trim());
131
+ }
132
+ else {
133
+ reject(new Error(`Chrome version check failed with code ${code}`));
134
+ }
135
+ });
136
+ chromeProcess.on("error", reject);
137
+ // Timeout after 3 seconds
138
+ setTimeout(() => {
139
+ chromeProcess.kill();
140
+ reject(new Error("Chrome version check timeout"));
141
+ }, 3000);
142
+ });
143
+ // Parse version from output like "Google Chrome 140.0.7339.214"
144
+ const versionMatch = versionOutput.match(/(\d+)\.(\d+)\.(\d+)\.(\d+)/);
145
+ if (versionMatch) {
146
+ const [, major, minor, build, patch] = versionMatch.map(Number);
147
+ const currentVersion = [major, minor, build, patch];
148
+ const requiredVersion = [140, 0, 7339, 214];
149
+ // Compare version numbers
150
+ for (let i = 0; i < 4; i++) {
151
+ if (currentVersion[i] > requiredVersion[i])
152
+ return true;
153
+ if (currentVersion[i] < requiredVersion[i])
154
+ return false;
155
+ }
156
+ return true; // Versions are equal
157
+ }
158
+ break; // Found Chrome but couldn't parse version - continue with other paths
159
+ }
160
+ catch {
161
+ // Try next Chrome path
162
+ }
163
+ }
164
+ return false; // Chrome not found or version not supported
165
+ }
166
+ catch {
167
+ return false; // Any error means not supported
168
+ }
169
+ }
170
+ /**
171
+ * Detect which AI CLI tools are available on the system
172
+ */
173
+ async function detectAvailableAiCliTools() {
174
+ const availableTools = [];
175
+ for (const tool of AI_CLI_TOOLS) {
176
+ try {
177
+ // Try to run the binary with --version to check if it exists
178
+ await new Promise((resolve, reject) => {
179
+ const testProcess = spawn(tool.binary, ["--version"], {
180
+ stdio: ["ignore", "pipe", "pipe"]
181
+ });
182
+ testProcess.on("close", (_code) => {
183
+ // Most CLIs return 0 for --version, but some might return other codes
184
+ // We just check if the binary exists and runs
185
+ resolve();
186
+ });
187
+ testProcess.on("error", (error) => {
188
+ // Binary not found or not executable
189
+ reject(error);
190
+ });
191
+ // Timeout after 2 seconds
192
+ setTimeout(() => {
193
+ testProcess.kill();
194
+ reject(new Error("Timeout"));
195
+ }, 2000);
196
+ });
197
+ availableTools.push(tool);
198
+ }
199
+ catch {
200
+ // Tool not available - continue checking others
201
+ }
202
+ }
203
+ return availableTools;
204
+ }
205
+ /**
206
+ * Configure MCPs for a specific AI CLI tool
207
+ */
208
+ async function configureMcpsForCliTool(tool, mcpPort, enableChromeDevtools, chromeDevtoolsSupported) {
209
+ const results = {
210
+ dev3000: false,
211
+ chromeDevtools: false
212
+ };
213
+ // Configure main dev3000 MCP
214
+ try {
215
+ const dev3000Command = tool.addHttpMcpCommand("dev3000", `http://localhost:${mcpPort}/mcp`);
216
+ await new Promise((resolve, reject) => {
217
+ const configProcess = spawn(dev3000Command[0], dev3000Command.slice(1), {
218
+ stdio: ["inherit", "pipe", "pipe"]
219
+ });
220
+ let errorOutput = "";
221
+ configProcess.stderr?.on("data", (data) => {
222
+ errorOutput += data.toString();
223
+ });
224
+ configProcess.on("close", (code) => {
225
+ if (code === 0 || errorOutput.includes("already exists")) {
226
+ results.dev3000 = true;
227
+ resolve();
228
+ }
229
+ else {
230
+ reject(new Error(`Failed to configure dev3000 MCP: ${errorOutput}`));
231
+ }
232
+ });
233
+ configProcess.on("error", reject);
234
+ });
235
+ }
236
+ catch (error) {
237
+ console.log(`⚠️ Failed to configure dev3000 MCP for ${tool.name}:`, error);
238
+ }
239
+ // Configure chrome-devtools MCP if enabled and Chrome version is supported
240
+ if (enableChromeDevtools && chromeDevtoolsSupported) {
241
+ try {
242
+ const chromeDevtoolsCommand = tool.addMcpCommand("dev3000-chrome-devtools", {
243
+ command: "npx",
244
+ args: ["chrome-devtools-mcp@latest", "--browserUrl", "http://127.0.0.1:9222"]
245
+ });
246
+ await new Promise((resolve, reject) => {
247
+ const configProcess = spawn(chromeDevtoolsCommand[0], chromeDevtoolsCommand.slice(1), {
248
+ stdio: ["inherit", "pipe", "pipe"]
249
+ });
250
+ let errorOutput = "";
251
+ configProcess.stderr?.on("data", (data) => {
252
+ errorOutput += data.toString();
253
+ });
254
+ configProcess.on("close", (code) => {
255
+ if (code === 0 || errorOutput.includes("already exists")) {
256
+ results.chromeDevtools = true;
257
+ resolve();
258
+ }
259
+ else {
260
+ reject(new Error(`Failed to configure chrome-devtools MCP: ${errorOutput}`));
261
+ }
262
+ });
263
+ configProcess.on("error", reject);
264
+ });
265
+ }
266
+ catch (error) {
267
+ console.log(`⚠️ Failed to configure chrome-devtools MCP for ${tool.name}:`, error);
268
+ }
269
+ }
270
+ else if (enableChromeDevtools && !chromeDevtoolsSupported) {
271
+ // Chrome version doesn't support chrome-devtools MCP
272
+ results.chromeSkipped = "Chrome < 140.0.7339.214";
273
+ }
274
+ return results;
275
+ }
276
+ /**
277
+ * Clean up MCP configurations for a specific AI CLI tool
278
+ */
279
+ async function cleanupMcpsForCliTool(tool, enableChromeDevtools) {
280
+ // Clean up dev3000 MCP
281
+ try {
282
+ const dev3000Command = tool.removeMcpCommand("dev3000");
283
+ await new Promise((resolve) => {
284
+ const cleanupProcess = spawn(dev3000Command[0], dev3000Command.slice(1), {
285
+ stdio: ["inherit", "pipe", "pipe"]
286
+ });
287
+ cleanupProcess.on("close", () => resolve());
288
+ cleanupProcess.on("error", () => resolve()); // Don't fail on cleanup errors
289
+ });
290
+ }
291
+ catch {
292
+ // Ignore cleanup errors
293
+ }
294
+ // Clean up chrome-devtools MCP if it was enabled
295
+ if (enableChromeDevtools) {
296
+ try {
297
+ const chromeDevtoolsCommand = tool.removeMcpCommand("dev3000-chrome-devtools");
298
+ await new Promise((resolve) => {
299
+ const cleanupProcess = spawn(chromeDevtoolsCommand[0], chromeDevtoolsCommand.slice(1), {
300
+ stdio: ["inherit", "pipe", "pipe"]
301
+ });
302
+ cleanupProcess.on("close", () => resolve());
303
+ cleanupProcess.on("error", () => resolve()); // Don't fail on cleanup errors
304
+ });
305
+ }
306
+ catch {
307
+ // Ignore cleanup errors
308
+ }
309
+ }
310
+ }
311
+ /**
312
+ * Configure MCPs for all detected AI CLI tools
313
+ */
314
+ async function configureAiCliIntegrations(mcpPort, enableChromeDevtools, silent = false) {
315
+ if (!silent)
316
+ console.log("🔍 Detecting available AI CLI tools...");
317
+ const availableTools = await detectAvailableAiCliTools();
318
+ if (availableTools.length === 0) {
319
+ if (!silent)
320
+ console.log("📝 No AI CLI tools detected - dev3000 will work when CLIs are installed later");
321
+ return [];
322
+ }
323
+ // Check Chrome version if chrome-devtools MCP is requested
324
+ let chromeDevtoolsSupported = false;
325
+ if (enableChromeDevtools) {
326
+ if (!silent)
327
+ console.log("🔍 Checking Chrome version for chrome-devtools MCP compatibility...");
328
+ chromeDevtoolsSupported = await isChromeDevtoolsMcpSupported();
329
+ if (!chromeDevtoolsSupported && !silent) {
330
+ console.log("⚠️ Chrome version < 140.0.7339.214 detected - chrome-devtools MCP will be skipped");
331
+ }
332
+ }
333
+ if (!silent)
334
+ console.log(`🔧 Configuring MCPs for ${availableTools.length} detected AI CLI tools...`);
335
+ for (const tool of availableTools) {
336
+ if (!silent)
337
+ console.log(` Configuring ${tool.name}...`);
338
+ const results = await configureMcpsForCliTool(tool, mcpPort, enableChromeDevtools, chromeDevtoolsSupported);
339
+ let status = "";
340
+ if (results.dev3000)
341
+ status += "✅ dev3000";
342
+ if (results.chromeDevtools)
343
+ status += results.dev3000 ? " + chrome-devtools" : "✅ chrome-devtools";
344
+ if (results.chromeSkipped)
345
+ status += results.dev3000
346
+ ? ` (chrome-devtools skipped: ${results.chromeSkipped})`
347
+ : `⚠️ chrome-devtools skipped: ${results.chromeSkipped}`;
348
+ if (!results.dev3000 && !results.chromeDevtools && !results.chromeSkipped)
349
+ status = "❌ failed";
350
+ if (!silent)
351
+ console.log(` ${tool.name}: ${status}`);
352
+ }
353
+ return availableTools;
354
+ }
355
+ /**
356
+ * Clean up MCP configurations for all detected AI CLI tools
357
+ */
358
+ async function cleanupAiCliIntegrations(availableTools, enableChromeDevtools, silent = false) {
359
+ if (availableTools.length === 0)
360
+ return;
361
+ if (!silent)
362
+ console.log("🧹 Cleaning up AI CLI MCP configurations...");
363
+ for (const tool of availableTools) {
364
+ await cleanupMcpsForCliTool(tool, enableChromeDevtools);
365
+ }
366
+ }
74
367
  export function createPersistentLogFile() {
75
368
  // Get unique project name
76
369
  const projectName = getProjectName();
@@ -193,6 +486,7 @@ export class DevEnvironment {
193
486
  tui = null;
194
487
  portChangeMessage = null;
195
488
  firstSigintTime = null;
489
+ configuredAiCliTools = [];
196
490
  constructor(options) {
197
491
  // Handle portMcp vs mcpPort naming
198
492
  this.options = {
@@ -246,6 +540,8 @@ export class DevEnvironment {
246
540
  if (!existsSync(this.mcpPublicDir)) {
247
541
  mkdirSync(this.mcpPublicDir, { recursive: true });
248
542
  }
543
+ // Initialize project-specific D3K log file (clear for new session)
544
+ this.initializeD3KLog();
249
545
  }
250
546
  async checkPortsAvailable(silent = false) {
251
547
  // Always kill any existing MCP server to ensure clean state
@@ -437,10 +733,29 @@ export class DevEnvironment {
437
733
  await this.waitForServer();
438
734
  await this.tui.updateStatus(`Waiting for ${this.options.commandName} MCP server...`);
439
735
  await this.waitForMcpServer();
736
+ // Progressive MCP discovery - after dev server is ready
737
+ await this.tui.updateStatus("Discovering available MCPs...");
738
+ await this.discoverMcpsAfterServerStart();
739
+ // Configure AI CLI integrations (both dev3000 and chrome-devtools MCPs)
740
+ if (!this.options.serversOnly) {
741
+ await this.tui.updateStatus("Configuring AI CLI integrations...");
742
+ this.configuredAiCliTools = await configureAiCliIntegrations(this.options.mcpPort || "3684", this.options.chromeDevtoolsMcp !== false, // Default to true unless explicitly disabled
743
+ true // Silent mode when TUI is active
744
+ );
745
+ if (this.configuredAiCliTools.length > 0) {
746
+ this.logD3K(`AI CLI Integration: Configured ${this.configuredAiCliTools.length} AI CLI tools for seamless dev3000 access`);
747
+ }
748
+ else {
749
+ this.logD3K("AI CLI Integration: No AI CLIs detected, manual configuration will be needed");
750
+ }
751
+ }
440
752
  // Start CDP monitoring if not in servers-only mode
441
753
  if (!this.options.serversOnly) {
442
754
  await this.tui.updateStatus(`Starting ${this.options.commandName} browser...`);
443
- this.startCDPMonitoringAsync();
755
+ await this.startCDPMonitoringSync();
756
+ // Progressive MCP discovery - after browser is ready
757
+ await this.tui.updateStatus("Final MCP discovery scan...");
758
+ await this.discoverMcpsAfterBrowserStart();
444
759
  }
445
760
  else {
446
761
  this.debugLog("Browser monitoring disabled via --servers-only flag");
@@ -473,10 +788,29 @@ export class DevEnvironment {
473
788
  await this.waitForServer();
474
789
  this.spinner.text = `Waiting for ${this.options.commandName} MCP server...`;
475
790
  await this.waitForMcpServer();
791
+ // Progressive MCP discovery - after dev server is ready
792
+ this.spinner.text = "Discovering available MCPs...";
793
+ await this.discoverMcpsAfterServerStart();
794
+ // Configure AI CLI integrations (both dev3000 and chrome-devtools MCPs)
795
+ if (!this.options.serversOnly) {
796
+ this.spinner.text = "Configuring AI CLI integrations...";
797
+ this.configuredAiCliTools = await configureAiCliIntegrations(this.options.mcpPort || "3684", this.options.chromeDevtoolsMcp !== false, // Default to true unless explicitly disabled
798
+ false // Show output in non-TUI mode
799
+ );
800
+ if (this.configuredAiCliTools.length > 0) {
801
+ this.logD3K(`AI CLI Integration: Configured ${this.configuredAiCliTools.length} AI CLI tools for seamless dev3000 access`);
802
+ }
803
+ else {
804
+ this.logD3K("AI CLI Integration: No AI CLIs detected, manual configuration will be needed");
805
+ }
806
+ }
476
807
  // Start CDP monitoring if not in servers-only mode
477
808
  if (!this.options.serversOnly) {
478
809
  this.spinner.text = `Starting ${this.options.commandName} browser...`;
479
- this.startCDPMonitoringAsync();
810
+ await this.startCDPMonitoringSync();
811
+ // Progressive MCP discovery - after browser is ready
812
+ this.spinner.text = "Final MCP discovery scan...";
813
+ await this.discoverMcpsAfterBrowserStart();
480
814
  }
481
815
  else {
482
816
  this.debugLog("Browser monitoring disabled via --servers-only flag");
@@ -1064,17 +1398,259 @@ export class DevEnvironment {
1064
1398
  this.debugLog("MCP server health check failed, terminating");
1065
1399
  throw new Error(`MCP server failed to start after ${maxAttempts} seconds. Check the logs for errors.`);
1066
1400
  }
1067
- startCDPMonitoringAsync() {
1401
+ async discoverMcpsAfterServerStart() {
1402
+ try {
1403
+ this.debugLog("Starting MCP discovery after dev server startup");
1404
+ // Call the MCP discovery function - make HTTP request to our own MCP server
1405
+ const mcpUrl = `http://localhost:${this.options.mcpPort}/mcp`;
1406
+ const projectName = getProjectName();
1407
+ this.debugLog(`Running MCP discovery for project: ${projectName} via ${mcpUrl}`);
1408
+ const requestPayload = {
1409
+ jsonrpc: "2.0",
1410
+ id: 1,
1411
+ method: "tools/call",
1412
+ params: {
1413
+ name: "discover_available_mcps",
1414
+ arguments: {
1415
+ projectName: projectName
1416
+ }
1417
+ }
1418
+ };
1419
+ const response = await fetch(mcpUrl, {
1420
+ method: "POST",
1421
+ headers: {
1422
+ "Content-Type": "application/json",
1423
+ Accept: "application/json, text/event-stream"
1424
+ },
1425
+ body: JSON.stringify(requestPayload)
1426
+ });
1427
+ if (!response.ok) {
1428
+ throw new Error(`MCP request failed: ${response.status} ${response.statusText}`);
1429
+ }
1430
+ // Handle both JSON and SSE responses
1431
+ const contentType = response.headers.get("content-type") || "";
1432
+ let result;
1433
+ if (contentType.includes("text/event-stream")) {
1434
+ // Parse Server-Sent Events format
1435
+ const sseText = await response.text();
1436
+ const dataLine = sseText.split("\n").find((line) => line.startsWith("data: "));
1437
+ if (dataLine) {
1438
+ result = JSON.parse(dataLine.substring(6)); // Remove "data: " prefix
1439
+ }
1440
+ else {
1441
+ throw new Error("No data found in SSE response");
1442
+ }
1443
+ }
1444
+ else {
1445
+ // Parse regular JSON
1446
+ result = await response.json();
1447
+ }
1448
+ if (result.error) {
1449
+ throw new Error(`MCP error: ${result.error.message}`);
1450
+ }
1451
+ // Parse the discovered MCPs from the response
1452
+ const responseText = result.result?.content?.[0]?.text || "";
1453
+ const discoveredMcps = this.parseMcpDiscoveryResult(responseText);
1454
+ if (discoveredMcps.length > 0) {
1455
+ this.debugLog(`MCP discovery found: ${discoveredMcps.join(", ")}`);
1456
+ // Log discovery results to the main log file with [D3K] tags
1457
+ const discoveryMessage = `MCP Discovery: Found ${discoveredMcps.join(", ")} after dev server startup`;
1458
+ this.logD3K(discoveryMessage);
1459
+ // Additional logging for each MCP
1460
+ for (const mcp of discoveredMcps) {
1461
+ this.logD3K(`MCP Integration: ${mcp} MCP detected via process/port scanning`);
1462
+ }
1463
+ }
1464
+ else {
1465
+ this.debugLog("MCP discovery found no MCPs after dev server startup");
1466
+ this.logD3K("MCP Discovery: No MCPs detected after dev server startup");
1467
+ }
1468
+ }
1469
+ catch (error) {
1470
+ this.debugLog(`MCP discovery error after server start: ${error}`);
1471
+ // Non-fatal - just log the error
1472
+ this.logD3K(`MCP Discovery Error: ${error instanceof Error ? error.message : String(error)}`);
1473
+ }
1474
+ }
1475
+ async discoverMcpsAfterBrowserStart() {
1476
+ try {
1477
+ this.debugLog("Starting MCP discovery after browser startup");
1478
+ // Call the MCP discovery function - make HTTP request to our own MCP server
1479
+ const mcpUrl = `http://localhost:${this.options.mcpPort}/mcp`;
1480
+ const projectName = getProjectName();
1481
+ this.debugLog(`Running final MCP discovery for project: ${projectName} via ${mcpUrl}`);
1482
+ const requestPayload = {
1483
+ jsonrpc: "2.0",
1484
+ id: 1,
1485
+ method: "tools/call",
1486
+ params: {
1487
+ name: "discover_available_mcps",
1488
+ arguments: {
1489
+ projectName: projectName
1490
+ }
1491
+ }
1492
+ };
1493
+ const response = await fetch(mcpUrl, {
1494
+ method: "POST",
1495
+ headers: {
1496
+ "Content-Type": "application/json",
1497
+ Accept: "application/json, text/event-stream"
1498
+ },
1499
+ body: JSON.stringify(requestPayload)
1500
+ });
1501
+ if (!response.ok) {
1502
+ throw new Error(`MCP request failed: ${response.status} ${response.statusText}`);
1503
+ }
1504
+ // Handle both JSON and SSE responses
1505
+ const contentType = response.headers.get("content-type") || "";
1506
+ let result;
1507
+ if (contentType.includes("text/event-stream")) {
1508
+ // Parse Server-Sent Events format
1509
+ const sseText = await response.text();
1510
+ const dataLine = sseText.split("\n").find((line) => line.startsWith("data: "));
1511
+ if (dataLine) {
1512
+ result = JSON.parse(dataLine.substring(6)); // Remove "data: " prefix
1513
+ }
1514
+ else {
1515
+ throw new Error("No data found in SSE response");
1516
+ }
1517
+ }
1518
+ else {
1519
+ // Parse regular JSON
1520
+ result = await response.json();
1521
+ }
1522
+ if (result.error) {
1523
+ throw new Error(`MCP error: ${result.error.message}`);
1524
+ }
1525
+ // Parse the discovered MCPs from the response
1526
+ const responseText = result.result?.content?.[0]?.text || "";
1527
+ const discoveredMcps = this.parseMcpDiscoveryResult(responseText);
1528
+ if (discoveredMcps.length > 0) {
1529
+ this.debugLog(`Final MCP discovery found: ${discoveredMcps.join(", ")}`);
1530
+ // Log discovery results to the main log file with [D3K] tags
1531
+ const discoveryMessage = `MCP Discovery: Final scan found ${discoveredMcps.join(", ")} after browser startup`;
1532
+ this.logD3K(discoveryMessage);
1533
+ // Log integration summary
1534
+ const integrationTypes = [];
1535
+ if (discoveredMcps.includes("nextjs-dev"))
1536
+ integrationTypes.push("Next.js");
1537
+ if (discoveredMcps.includes("chrome-devtools"))
1538
+ integrationTypes.push("Chrome DevTools");
1539
+ if (integrationTypes.length > 0) {
1540
+ this.logD3K(`MCP Integration: Activated integrations [${integrationTypes.join(", ")}]`);
1541
+ this.logD3K(`Orchestrator Mode: dev3000 is now running as debugging orchestrator with ${integrationTypes.length} MCP integration(s)`);
1542
+ // If chrome-devtools is detected, share CDP URL for coordination
1543
+ if (discoveredMcps.includes("chrome-devtools")) {
1544
+ this.shareCdpUrlWithChromeDevtools();
1545
+ }
1546
+ }
1547
+ }
1548
+ else {
1549
+ this.debugLog("Final MCP discovery found no MCPs");
1550
+ this.logD3K("MCP Discovery: Final scan completed - running in standalone mode");
1551
+ }
1552
+ }
1553
+ catch (error) {
1554
+ this.debugLog(`MCP discovery error after browser start: ${error}`);
1555
+ // Non-fatal - just log the error
1556
+ this.logD3K(`MCP Discovery Error: ${error instanceof Error ? error.message : String(error)}`);
1557
+ }
1558
+ }
1559
+ initializeD3KLog() {
1560
+ try {
1561
+ const debugLogDir = join(homedir(), ".d3k", "logs");
1562
+ if (!existsSync(debugLogDir)) {
1563
+ mkdirSync(debugLogDir, { recursive: true });
1564
+ }
1565
+ // Create project-specific D3K log file and clear it for new session
1566
+ const projectName = getProjectName();
1567
+ const d3kLogFile = join(debugLogDir, `dev3000-${projectName}-d3k.log`);
1568
+ writeFileSync(d3kLogFile, "");
1569
+ }
1570
+ catch {
1571
+ // Ignore D3K log initialization errors - non-critical
1572
+ }
1573
+ }
1574
+ logD3K(message) {
1575
+ // Write [D3K] logs to project-specific dev3000 debug log, NOT to main project log
1576
+ // This prevents Claude from thinking dev3000's orchestration logic needs to be "fixed"
1577
+ const timestamp = formatTimestamp(new Date(), this.options.dateTimeFormat || "local");
1578
+ const logEntry = `[${timestamp}] [D3K] ${message}\n`;
1579
+ try {
1580
+ const debugLogDir = join(homedir(), ".d3k", "logs");
1581
+ if (!existsSync(debugLogDir)) {
1582
+ mkdirSync(debugLogDir, { recursive: true });
1583
+ }
1584
+ // Create project-specific D3K log file to avoid confusion between multiple instances
1585
+ const projectName = getProjectName();
1586
+ const d3kLogFile = join(debugLogDir, `dev3000-${projectName}-d3k.log`);
1587
+ appendFileSync(d3kLogFile, logEntry);
1588
+ }
1589
+ catch {
1590
+ // Ignore D3K log write errors - non-critical
1591
+ }
1592
+ }
1593
+ shareCdpUrlWithChromeDevtools() {
1594
+ if (!this.cdpMonitor)
1595
+ return;
1596
+ const cdpUrl = this.cdpMonitor.getCdpUrl();
1597
+ if (cdpUrl) {
1598
+ this.logD3K(`CDP Integration: Chrome DevTools can connect to existing browser at ${cdpUrl}`);
1599
+ this.logD3K(`CDP Coordination: Use this URL to avoid launching duplicate Chrome instances`);
1600
+ this.logD3K(`CDP Enhanced Workflow: chrome-devtools can now take screenshots, inject JS, and debug using dev3000's browser`);
1601
+ this.logD3K(`CDP Claude Suggestion: When using chrome-devtools MCP, connect to: ${cdpUrl}`);
1602
+ // Also update session info to make CDP URL immediately available
1603
+ const projectName = getProjectName();
1604
+ writeSessionInfo(projectName, this.options.logFile, this.options.port, this.options.mcpPort, cdpUrl, this.cdpMonitor.getChromePids());
1605
+ }
1606
+ else {
1607
+ this.logD3K("CDP Integration: CDP URL not yet available - browser may still be starting");
1608
+ // Retry after a short delay since browser might still be initializing
1609
+ setTimeout(() => {
1610
+ if (this.cdpMonitor) {
1611
+ const delayedCdpUrl = this.cdpMonitor.getCdpUrl();
1612
+ if (delayedCdpUrl) {
1613
+ this.logD3K(`CDP Integration: Chrome DevTools can now connect to ${delayedCdpUrl}`);
1614
+ this.logD3K(`CDP Delayed Coordination: Browser initialization complete`);
1615
+ const projectName = getProjectName();
1616
+ writeSessionInfo(projectName, this.options.logFile, this.options.port, this.options.mcpPort, delayedCdpUrl, this.cdpMonitor.getChromePids());
1617
+ }
1618
+ }
1619
+ }, 2000); // Wait 2 seconds for browser to fully initialize
1620
+ }
1621
+ }
1622
+ parseMcpDiscoveryResult(responseText) {
1623
+ // Parse the MCP discovery response text to extract discovered MCPs
1624
+ // Example: "🔍 **MCP DISCOVERY RESULTS**\n\nDiscovered MCPs: chrome-devtools, nextjs-dev"
1625
+ const mcps = [];
1626
+ // Look for the "Discovered MCPs:" line
1627
+ const match = responseText.match(/Discovered MCPs:\s*([^\n]+)/i);
1628
+ if (match?.[1]) {
1629
+ const mcpList = match[1].trim();
1630
+ if (mcpList !== "none") {
1631
+ // Split by comma and clean up each MCP name
1632
+ mcps.push(...mcpList
1633
+ .split(",")
1634
+ .map((name) => name.trim())
1635
+ .filter(Boolean));
1636
+ }
1637
+ }
1638
+ return mcps;
1639
+ }
1640
+ async startCDPMonitoringSync() {
1068
1641
  // Skip if in servers-only mode
1069
1642
  if (this.options.serversOnly) {
1070
1643
  return;
1071
1644
  }
1072
- // Start CDP monitoring in background without blocking completion
1073
- this.startCDPMonitoring().catch((error) => {
1645
+ try {
1646
+ await this.startCDPMonitoring();
1647
+ }
1648
+ catch (error) {
1074
1649
  console.error(chalk.red("⚠️ CDP monitoring setup failed:"), error);
1075
1650
  // CDP monitoring is critical - shutdown if it fails
1076
1651
  this.gracefulShutdown();
1077
- });
1652
+ throw error;
1653
+ }
1078
1654
  }
1079
1655
  async startCDPMonitoring() {
1080
1656
  // Skip if in servers-only mode
@@ -1321,6 +1897,10 @@ export class DevEnvironment {
1321
1897
  }
1322
1898
  }
1323
1899
  }
1900
+ // Clean up AI CLI MCP configurations
1901
+ if (this.configuredAiCliTools.length > 0) {
1902
+ await cleanupAiCliIntegrations(this.configuredAiCliTools, this.options.chromeDevtoolsMcp !== false, this.options.tui);
1903
+ }
1324
1904
  // Kill processes on both ports
1325
1905
  const killPortProcess = async (port, name) => {
1326
1906
  try {