dev3000 0.0.66 → 0.0.67

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 (212) hide show
  1. package/dist/cdp-monitor.d.ts +4 -1
  2. package/dist/cdp-monitor.d.ts.map +1 -1
  3. package/dist/cdp-monitor.js +35 -1
  4. package/dist/cdp-monitor.js.map +1 -1
  5. package/dist/cli.js +10 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/dev-environment.d.ts +2 -0
  8. package/dist/dev-environment.d.ts.map +1 -1
  9. package/dist/dev-environment.js +44 -27
  10. package/dist/dev-environment.js.map +1 -1
  11. package/dist/services/parsers/log-parsers/base.d.ts +1 -1
  12. package/dist/services/parsers/log-parsers/base.d.ts.map +1 -1
  13. package/dist/src/tui-interface-impl.tsx +163 -48
  14. package/dist/tui-interface-impl.d.ts.map +1 -1
  15. package/dist/tui-interface-impl.js +72 -14
  16. package/dist/tui-interface-impl.js.map +1 -1
  17. package/dist/utils/project-name.d.ts +18 -0
  18. package/dist/utils/project-name.d.ts.map +1 -0
  19. package/dist/utils/project-name.js +114 -0
  20. package/dist/utils/project-name.js.map +1 -0
  21. package/dist/utils/timestamp.d.ts +8 -0
  22. package/dist/utils/timestamp.d.ts.map +1 -0
  23. package/dist/utils/timestamp.js +18 -0
  24. package/dist/utils/timestamp.js.map +1 -0
  25. package/mcp-server/.next/BUILD_ID +1 -1
  26. package/mcp-server/.next/app-build-manifest.json +8 -6
  27. package/mcp-server/.next/build-manifest.json +2 -2
  28. package/mcp-server/.next/cache/.tsbuildinfo +1 -1
  29. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000005.sst +0 -0
  30. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000006.sst +0 -0
  31. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000007.sst +0 -0
  32. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000008.sst +0 -0
  33. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000009.meta +0 -0
  34. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000010.meta +0 -0
  35. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000011.meta +0 -0
  36. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000013.meta +0 -0
  37. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000014.sst +0 -0
  38. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000016.sst +0 -0
  39. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000017.meta +0 -0
  40. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000018.meta +0 -0
  41. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000021.sst +0 -0
  42. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000022.sst +0 -0
  43. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000023.meta +0 -0
  44. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000025.meta +0 -0
  45. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000027.sst +0 -0
  46. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000028.sst +0 -0
  47. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000029.sst +0 -0
  48. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000030.sst +0 -0
  49. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000031.meta +0 -0
  50. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000032.meta +0 -0
  51. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000034.meta +0 -0
  52. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000035.meta +0 -0
  53. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000037.sst +0 -0
  54. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000038.sst +0 -0
  55. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000039.sst +0 -0
  56. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000040.sst +0 -0
  57. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000041.meta +0 -0
  58. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000042.meta +0 -0
  59. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000044.meta +0 -0
  60. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000045.meta +0 -0
  61. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000047.sst +0 -0
  62. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000048.sst +0 -0
  63. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000049.sst +0 -0
  64. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000050.sst +0 -0
  65. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000051.meta +0 -0
  66. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000052.meta +0 -0
  67. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000054.meta +0 -0
  68. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000055.meta +0 -0
  69. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000057.sst +0 -0
  70. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000058.sst +0 -0
  71. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000059.sst +0 -0
  72. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000060.sst +0 -0
  73. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000061.meta +0 -0
  74. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000062.meta +0 -0
  75. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000064.meta +0 -0
  76. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000065.meta +0 -0
  77. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000066.sst +0 -0
  78. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000067.meta +0 -0
  79. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000069.sst +0 -0
  80. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000070.sst +0 -0
  81. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000071.sst +0 -0
  82. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000072.sst +0 -0
  83. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000073.sst +0 -0
  84. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000074.meta +0 -0
  85. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000075.meta +0 -0
  86. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000076.meta +0 -0
  87. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000077.meta +0 -0
  88. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000078.meta +0 -0
  89. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000079.sst +0 -0
  90. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000080.sst +0 -0
  91. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000081.sst +0 -0
  92. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000082.sst +0 -0
  93. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000083.sst +0 -0
  94. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000084.meta +0 -0
  95. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000085.meta +0 -0
  96. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000086.meta +0 -0
  97. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000087.meta +0 -0
  98. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000088.meta +0 -0
  99. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000089.sst +0 -0
  100. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000090.sst +0 -0
  101. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000091.sst +0 -0
  102. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000092.sst +0 -0
  103. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000093.sst +0 -0
  104. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000094.meta +0 -0
  105. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000095.meta +0 -0
  106. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000096.meta +0 -0
  107. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000097.meta +0 -0
  108. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000098.meta +0 -0
  109. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000099.sst +0 -0
  110. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000100.sst +0 -0
  111. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000101.sst +0 -0
  112. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000102.meta +0 -0
  113. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000103.meta +0 -0
  114. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000104.meta +0 -0
  115. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000105.sst +0 -0
  116. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000106.sst +0 -0
  117. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000107.sst +0 -0
  118. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000108.meta +0 -0
  119. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000109.meta +0 -0
  120. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000110.meta +0 -0
  121. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/CURRENT +0 -0
  122. package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/LOG +230 -0
  123. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  124. package/mcp-server/.next/package.json +3 -1
  125. package/mcp-server/.next/required-server-files.json +1 -0
  126. package/mcp-server/.next/server/app/_global-error.html +2 -2
  127. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  128. package/mcp-server/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
  129. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  130. package/mcp-server/.next/server/app/_not-found.html +1 -1
  131. package/mcp-server/.next/server/app/_not-found.rsc +2 -2
  132. package/mcp-server/.next/server/app/index.html +1 -1
  133. package/mcp-server/.next/server/app/index.rsc +3 -3
  134. package/mcp-server/.next/server/app/logs/page/app-build-manifest.json +4 -3
  135. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  136. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  137. package/mcp-server/.next/server/app/mcp/route.js.nft.json +1 -1
  138. package/mcp-server/.next/server/app/page/app-build-manifest.json +3 -2
  139. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  140. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  141. package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js +1 -1
  142. package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js.map +1 -1
  143. package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js +7 -8
  144. package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js.map +1 -1
  145. package/mcp-server/.next/server/chunks/ssr/{node_modules__pnpm_4f58b96e._.js → _188bfe33._.js} +2 -2
  146. package/mcp-server/.next/server/chunks/ssr/_188bfe33._.js.map +1 -0
  147. package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js +2 -2
  148. package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js.map +1 -1
  149. package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js +1 -1
  150. package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js.map +1 -1
  151. package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js +1 -1
  152. package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js.map +1 -1
  153. package/mcp-server/.next/server/chunks/ssr/{node_modules__pnpm_87fb6266._.js → _f03e80a8._.js} +2 -2
  154. package/mcp-server/.next/server/chunks/ssr/_f03e80a8._.js.map +1 -0
  155. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js +1 -1
  156. package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js.map +1 -1
  157. package/mcp-server/.next/server/pages/404.html +1 -1
  158. package/mcp-server/.next/server/pages/500.html +2 -2
  159. package/mcp-server/.next/static/chunks/5a5edc75ee7e7de4.js +1 -0
  160. package/mcp-server/.next/static/chunks/65b18bf1ede9811a.css +1 -0
  161. package/mcp-server/.next/static/chunks/909033014621484e.js +1 -0
  162. package/mcp-server/.next/static/chunks/c5f8464bc8083ee7.js +1 -0
  163. package/mcp-server/.next/trace +1 -1
  164. package/mcp-server/app/api/tools/route.ts +22 -5
  165. package/mcp-server/app/layout.tsx +4 -2
  166. package/mcp-server/app/logs/LogsClient.infinite-loop.test.tsx +127 -0
  167. package/mcp-server/app/logs/LogsClient.tsx +318 -201
  168. package/mcp-server/app/logs/page.tsx +19 -3
  169. package/mcp-server/app/logs/utils.ts +15 -3
  170. package/mcp-server/app/mcp/route.ts +75 -509
  171. package/mcp-server/app/mcp/tools.ts +747 -0
  172. package/mcp-server/app/page.tsx +244 -169
  173. package/mcp-server/next.config.ts +1 -1
  174. package/mcp-server/package.json +9 -1
  175. package/mcp-server/public/favicon-16.svg +4 -0
  176. package/mcp-server/public/favicon-180.png +0 -0
  177. package/mcp-server/public/favicon-64.svg +4 -0
  178. package/mcp-server/public/favicon-preview.html +67 -0
  179. package/mcp-server/public/favicon.ico +0 -0
  180. package/mcp-server/public/favicon.svg +4 -0
  181. package/mcp-server/public/screenshots/test.txt +1 -0
  182. package/package.json +3 -4
  183. package/src/tui-interface-impl.tsx +163 -48
  184. package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js +0 -496
  185. package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js.map +0 -11
  186. package/mcp-server/.next/build/chunks/[root-of-the-server]__4718a9dd._.js +0 -408
  187. package/mcp-server/.next/build/chunks/[root-of-the-server]__4718a9dd._.js.map +0 -7
  188. package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js +0 -205
  189. package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js.map +0 -8
  190. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +0 -496
  191. package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +0 -11
  192. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_d723d216._.js +0 -13
  193. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_d723d216._.js.map +0 -5
  194. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_5a40237e._.js +0 -12
  195. package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_5a40237e._.js.map +0 -5
  196. package/mcp-server/.next/build/chunks/[turbopack]_runtime.js +0 -770
  197. package/mcp-server/.next/build/chunks/[turbopack]_runtime.js.map +0 -10
  198. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js +0 -6759
  199. package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js.map +0 -47
  200. package/mcp-server/.next/postcss.js +0 -6
  201. package/mcp-server/.next/postcss.js.map +0 -5
  202. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_4f58b96e._.js.map +0 -1
  203. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_87fb6266._.js.map +0 -1
  204. package/mcp-server/.next/static/chunks/11f1b53bdf7a9af0.js +0 -1
  205. package/mcp-server/.next/static/chunks/3d4ea64f6384f2c6.js +0 -1
  206. package/mcp-server/.next/static/chunks/50335dad5c51aab8.js +0 -1
  207. package/mcp-server/.next/static/chunks/bdd0789390bc312f.css +0 -1
  208. package/mcp-server/.next/webpack-loaders.js +0 -6
  209. package/mcp-server/.next/webpack-loaders.js.map +0 -5
  210. /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_buildManifest.js +0 -0
  211. /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_clientMiddlewareManifest.json +0 -0
  212. /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev3000",
3
- "version": "0.0.66",
3
+ "version": "0.0.67",
4
4
  "description": "AI-powered development tools with browser monitoring and MCP server integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,8 +13,8 @@
13
13
  "src/tui-interface-impl.tsx",
14
14
  "mcp-server/app/",
15
15
  "mcp-server/.next/",
16
+ "mcp-server/public/",
16
17
  "mcp-server/package.json",
17
- "mcp-server/pnpm-lock.yaml",
18
18
  "mcp-server/tsconfig.json",
19
19
  "mcp-server/next.config.ts",
20
20
  "mcp-server/next-env.d.ts",
@@ -23,7 +23,6 @@
23
23
  ],
24
24
  "scripts": {
25
25
  "build": "tsc && mkdir -p dist/src && cp src/loading.html dist/src/ && cp src/tui-interface-impl.tsx dist/src/",
26
- "dev": "tsc --watch",
27
26
  "typegen": "./scripts/typegen.sh",
28
27
  "typecheck": "./scripts/typegen.sh && tsc --noEmit",
29
28
  "format": "biome format --write .",
@@ -56,7 +55,6 @@
56
55
  "mcp-handler": "^1.0.2",
57
56
  "ora": "^8.2.0",
58
57
  "package-manager-detector": "^1.3.0",
59
- "react": "^19.1.1",
60
58
  "ws": "^8.18.0",
61
59
  "zod": "^3.22.4"
62
60
  },
@@ -67,6 +65,7 @@
67
65
  "@types/ws": "^8.5.12",
68
66
  "husky": "^9.0.0",
69
67
  "js-yaml": "^4.1.0",
68
+ "react": "^19.1.1",
70
69
  "tsx": "^4.20.3",
71
70
  "typescript": "^5.0.0",
72
71
  "vitest": "^1.0.0"
@@ -20,6 +20,12 @@ interface LogEntry {
20
20
  content: string
21
21
  }
22
22
 
23
+ // Compact ASCII logo for very small terminals
24
+ const COMPACT_LOGO = "d3k"
25
+
26
+ // Full ASCII logo lines as array for easier rendering
27
+ const FULL_LOGO = [" ▐▌▄▄▄▄ █ ▄ ", " ▐▌ █ █▄▀ ", "▗▞▀▜▌▀▀▀█ █ ▀▄ ", "▝▚▄▟▌▄▄▄█ █ █ "]
28
+
23
29
  const TUIApp = ({
24
30
  appPort,
25
31
  mcpPort,
@@ -38,23 +44,67 @@ const TUIApp = ({
38
44
  const { exit } = useApp()
39
45
  const { stdout } = useStdout()
40
46
 
47
+ const [terminalSize, setTerminalSize] = useState(() => ({
48
+ width: stdout?.columns || 80,
49
+ height: stdout?.rows || 24
50
+ }))
51
+
52
+ useEffect(() => {
53
+ if (!stdout) {
54
+ return
55
+ }
56
+
57
+ const handleResize = () => {
58
+ setTerminalSize({
59
+ width: stdout.columns || 80,
60
+ height: stdout.rows || 24
61
+ })
62
+ }
63
+
64
+ stdout.on("resize", handleResize)
65
+
66
+ return () => {
67
+ if (typeof stdout.off === "function") {
68
+ stdout.off("resize", handleResize)
69
+ } else {
70
+ stdout.removeListener("resize", handleResize)
71
+ }
72
+ }
73
+ }, [stdout])
74
+
75
+ // Get terminal dimensions with fallbacks
76
+ const termWidth = terminalSize.width
77
+ const termHeight = terminalSize.height
78
+
79
+ // Determine if we should use compact mode
80
+ const isCompact = termWidth < 80 || termHeight < 20
81
+ const isVeryCompact = termWidth < 60 || termHeight < 15
82
+
41
83
  // Provide status update function to parent
42
84
  useEffect(() => {
43
85
  onStatusUpdate(setInitStatus)
44
86
  }, [onStatusUpdate])
45
87
 
46
- // Calculate available lines for logs dynamically based on terminal height
47
- // Header box content: 4 (logo height) + 1 (margin) + 1 (controls) = 6 lines
48
- // Plus: 2 (top/bottom borders) + 2 (padding) + 1 (margin bottom) = 5 lines
49
- // Total header: 11 lines
50
- // Log box header: 1 (border) + 1 (title) + 1 (empty) = 3 lines
51
- // Log box footer: 1 (border) + 2 (scroll indicator if present) = 1-3 lines
52
- const headerLines = 12
53
- const logBoxHeaderLines = 3
54
- const logBoxFooterLines = scrollOffset > 0 ? 3 : 1
55
- const safetyBuffer = 1 // Extra line to ensure we don't overflow
56
- const totalReservedLines = headerLines + logBoxHeaderLines + logBoxFooterLines + safetyBuffer
57
- const maxVisibleLogs = Math.max(3, (stdout?.rows || 24) - totalReservedLines)
88
+ // Calculate available lines for logs dynamically based on terminal height and mode
89
+ const calculateMaxVisibleLogs = () => {
90
+ if (isVeryCompact) {
91
+ // In very compact mode, use most of the screen for logs
92
+ return Math.max(3, termHeight - 8)
93
+ } else if (isCompact) {
94
+ // In compact mode, reduce header size
95
+ return Math.max(3, termHeight - 10)
96
+ } else {
97
+ // Normal mode calculation
98
+ const headerLines = 12
99
+ const logBoxHeaderLines = 3
100
+ const logBoxFooterLines = scrollOffset > 0 ? 3 : 1
101
+ const safetyBuffer = 1
102
+ const totalReservedLines = headerLines + logBoxHeaderLines + logBoxFooterLines + safetyBuffer
103
+ return Math.max(3, termHeight - totalReservedLines)
104
+ }
105
+ }
106
+
107
+ const maxVisibleLogs = calculateMaxVisibleLogs()
58
108
 
59
109
  useEffect(() => {
60
110
  let logStream: Readable | undefined
@@ -162,48 +212,79 @@ const TUIApp = ({
162
212
  // Calculate visible logs
163
213
  const visibleLogs = logs.slice(Math.max(0, logs.length - maxVisibleLogs - scrollOffset), logs.length - scrollOffset)
164
214
 
165
- return (
166
- <Box flexDirection="column" height="100%">
167
- {/* Header Box */}
168
- <Box borderStyle="round" borderColor="#A18CE5" paddingX={2} paddingY={1} marginBottom={1} flexDirection="column">
169
- <Box flexDirection="row" gap={3}>
170
- {/* ASCII Logo on the left */}
171
- {/* biome-ignore format: preserve ASCII art alignment */}
172
- <Box flexDirection="column" alignItems="flex-start">
173
- <Text color="#A18CE5" bold> ▐▌▄▄▄▄ █ ▄ </Text>
174
- <Text color="#A18CE5" bold> ▐▌ █ █▄▀ </Text>
175
- <Text color="#A18CE5" bold>▗▞▀▜▌▀▀▀█ █ ▀▄ </Text>
176
- <Text color="#A18CE5" bold>▝▚▄▟▌▄▄▄█ █ █ </Text>
177
- </Box>
178
-
179
- {/* Info on the right */}
180
- <Box flexDirection="column" flexGrow={1}>
181
- <Text color="#A18CE5" bold>
182
- {commandName} v{version} {initStatus ? `- ${initStatus}` : "is running!"}
183
- </Text>
184
- <Text> </Text>
185
- <Text color="cyan">🌐 Your App: http://localhost:{appPort}</Text>
186
- <Text color="cyan">🤖 MCP Server: http://localhost:{mcpPort}/mcp</Text>
187
- <Text color="cyan">
188
- 📸 Visual Timeline: http://localhost:{mcpPort}/logs
189
- {projectName ? `?project=${encodeURIComponent(projectName)}` : ""}
215
+ // Render compact header for small terminals
216
+ const renderCompactHeader = () => (
217
+ <Box borderStyle="single" borderColor="#A18CE5" paddingX={1} marginBottom={1}>
218
+ <Box flexDirection="column" width="100%">
219
+ <Box>
220
+ <Text color="#A18CE5" bold>
221
+ {COMPACT_LOGO}
222
+ </Text>
223
+ <Text> v{version} </Text>
224
+ {initStatus && <Text dimColor>- {initStatus}</Text>}
225
+ </Box>
226
+ {!isVeryCompact && (
227
+ <>
228
+ <Text dimColor>
229
+ App: localhost:{appPort} | MCP: localhost:{mcpPort}
190
230
  </Text>
191
- {serversOnly && <Text color="cyan">🖥️ Servers-only mode - use Chrome extension for browser monitoring</Text>}
192
- </Box>
231
+ <Text dimColor>↑/↓ scroll | Ctrl-C quit</Text>
232
+ </>
233
+ )}
234
+ </Box>
235
+ </Box>
236
+ )
237
+
238
+ // Render normal header
239
+ const renderNormalHeader = () => (
240
+ <Box borderStyle="round" borderColor="#A18CE5" paddingX={2} paddingY={1} marginBottom={1} flexDirection="column">
241
+ <Box flexDirection="row" gap={3}>
242
+ {/* ASCII Logo on the left */}
243
+ {/* biome-ignore format: preserve ASCII art alignment */}
244
+ <Box flexDirection="column" alignItems="flex-start">
245
+ {FULL_LOGO.map((line) => (
246
+ <Text key={line} color="#A18CE5" bold>{line}</Text>
247
+ ))}
193
248
  </Box>
194
249
 
195
- {/* Controls at the bottom of header box */}
196
- <Box marginTop={1}>
197
- <Text dimColor>💡 Controls: ↑/↓ scroll | PgUp/PgDn page | g/G start/end | Ctrl-C quit</Text>
250
+ {/* Info on the right */}
251
+ <Box flexDirection="column" flexGrow={1}>
252
+ <Text color="#A18CE5" bold>
253
+ {commandName} v{version} {initStatus ? `- ${initStatus}` : "is running!"}
254
+ </Text>
255
+ <Text> </Text>
256
+ <Text color="cyan">🌐 Your App: http://localhost:{appPort}</Text>
257
+ <Text color="cyan">🤖 MCP Server: http://localhost:{mcpPort}/mcp</Text>
258
+ <Text color="cyan">
259
+ 📸 Visual Timeline: http://localhost:{mcpPort}/logs
260
+ {projectName ? `?project=${encodeURIComponent(projectName)}` : ""}
261
+ </Text>
262
+ {serversOnly && <Text color="cyan">🖥️ Servers-only mode - use Chrome extension for browser monitoring</Text>}
198
263
  </Box>
199
264
  </Box>
200
265
 
266
+ {/* Controls at the bottom of header box */}
267
+ <Box marginTop={1}>
268
+ <Text dimColor>💡 Controls: ↑/↓ scroll | PgUp/PgDn page | g/G start/end | Ctrl-C quit</Text>
269
+ </Box>
270
+ </Box>
271
+ )
272
+
273
+ return (
274
+ <Box flexDirection="column" height="100%">
275
+ {/* Header Box - responsive to terminal size */}
276
+ {isCompact ? renderCompactHeader() : renderNormalHeader()}
277
+
201
278
  {/* Logs Box - flexGrow makes it expand to fill available height */}
202
279
  <Box flexDirection="column" borderStyle="single" borderColor="gray" paddingX={1} flexGrow={1} minHeight={0}>
203
- <Text color="gray" dimColor>
204
- Logs ({logs.length} total{scrollOffset > 0 && `, scrolled up ${scrollOffset} lines`})
205
- </Text>
206
- <Text> </Text>
280
+ {!isVeryCompact && (
281
+ <>
282
+ <Text color="gray" dimColor>
283
+ Logs ({logs.length} total{scrollOffset > 0 && `, scrolled up ${scrollOffset} lines`})
284
+ </Text>
285
+ <Text> </Text>
286
+ </>
287
+ )}
207
288
 
208
289
  {/* Logs content area - also uses flexGrow to expand */}
209
290
  <Box flexDirection="column" flexGrow={1}>
@@ -222,6 +303,19 @@ const TUIApp = ({
222
303
  message = message.replace("ERROR: ⚠ Port", "ERROR: [!] Port")
223
304
  }
224
305
 
306
+ // In very compact mode, simplify the output
307
+ if (isVeryCompact) {
308
+ const shortSource = source === "BROWSER" ? "B" : "S"
309
+ const shortType = type ? type.split(".")[0].charAt(0) : ""
310
+ return (
311
+ <Text key={log.id} wrap="truncate-end">
312
+ <Text dimColor>[{shortSource}]</Text>
313
+ {shortType && <Text dimColor>[{shortType}]</Text>}
314
+ <Text> {message}</Text>
315
+ </Text>
316
+ )
317
+ }
318
+
225
319
  // Use shared color constants
226
320
  const sourceColor = source === "BROWSER" ? LOG_COLORS.BROWSER : LOG_COLORS.SERVER
227
321
  const typeColors: Record<string, string> = {
@@ -246,6 +340,27 @@ const TUIApp = ({
246
340
  "CRITICAL ERROR": LOG_COLORS.CRITICAL_ERROR
247
341
  }
248
342
 
343
+ // In compact mode, skip padding
344
+ if (isCompact) {
345
+ return (
346
+ <Text key={log.id} wrap="truncate-end">
347
+ <Text dimColor>[{timestamp}]</Text>
348
+ <Text> </Text>
349
+ <Text color={sourceColor} bold>
350
+ [{source.charAt(0)}]
351
+ </Text>
352
+ {type && (
353
+ <>
354
+ <Text> </Text>
355
+ <Text color={typeColors[type] || "#A0A0A0"}>[{type}]</Text>
356
+ </>
357
+ )}
358
+ <Text> {message}</Text>
359
+ </Text>
360
+ )
361
+ }
362
+
363
+ // Normal mode with padding
249
364
  // Calculate padding for source (BROWSER is 7, SERVER is 6)
250
365
  const sourceSpacing = " ".repeat(Math.max(0, 7 - source.length))
251
366
 
@@ -281,8 +396,8 @@ const TUIApp = ({
281
396
  )}
282
397
  </Box>
283
398
 
284
- {/* Scroll indicator - only show when scrolled up */}
285
- {logs.length > maxVisibleLogs && scrollOffset > 0 && (
399
+ {/* Scroll indicator - only show when scrolled up and not in very compact mode */}
400
+ {!isVeryCompact && logs.length > maxVisibleLogs && scrollOffset > 0 && (
286
401
  <>
287
402
  <Text> </Text>
288
403
  <Text dimColor>({scrollOffset} lines below)</Text>