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.
- package/dist/cdp-monitor.d.ts +4 -1
- package/dist/cdp-monitor.d.ts.map +1 -1
- package/dist/cdp-monitor.js +35 -1
- package/dist/cdp-monitor.js.map +1 -1
- package/dist/cli.js +10 -5
- package/dist/cli.js.map +1 -1
- package/dist/dev-environment.d.ts +2 -0
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +44 -27
- package/dist/dev-environment.js.map +1 -1
- package/dist/services/parsers/log-parsers/base.d.ts +1 -1
- package/dist/services/parsers/log-parsers/base.d.ts.map +1 -1
- package/dist/src/tui-interface-impl.tsx +163 -48
- package/dist/tui-interface-impl.d.ts.map +1 -1
- package/dist/tui-interface-impl.js +72 -14
- package/dist/tui-interface-impl.js.map +1 -1
- package/dist/utils/project-name.d.ts +18 -0
- package/dist/utils/project-name.d.ts.map +1 -0
- package/dist/utils/project-name.js +114 -0
- package/dist/utils/project-name.js.map +1 -0
- package/dist/utils/timestamp.d.ts +8 -0
- package/dist/utils/timestamp.d.ts.map +1 -0
- package/dist/utils/timestamp.js +18 -0
- package/dist/utils/timestamp.js.map +1 -0
- package/mcp-server/.next/BUILD_ID +1 -1
- package/mcp-server/.next/app-build-manifest.json +8 -6
- package/mcp-server/.next/build-manifest.json +2 -2
- package/mcp-server/.next/cache/.tsbuildinfo +1 -1
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000005.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000006.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000007.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000008.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000009.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000010.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000011.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000013.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000014.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000016.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000017.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000018.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000021.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000022.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000023.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000025.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000027.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000028.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000029.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000030.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000031.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000032.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000034.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000035.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000037.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000038.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000039.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000040.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000041.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000042.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000044.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000045.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000047.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000048.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000049.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000050.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000051.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000052.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000054.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000055.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000057.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000058.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000059.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000060.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000061.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000062.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000064.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000065.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000066.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000067.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000069.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000070.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000071.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000072.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000073.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000074.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000075.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000076.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000077.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000078.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000079.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000080.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000081.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000082.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000083.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000084.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000085.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000086.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000087.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000088.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000089.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000090.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000091.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000092.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000093.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000094.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000095.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000096.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000097.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000098.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000099.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000100.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000101.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000102.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000103.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000104.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000105.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000106.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000107.sst +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000108.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000109.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/00000110.meta +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/CURRENT +0 -0
- package/mcp-server/.next/cache/turbopack/v15.5.1-canary.28-7-gede8d1b86/LOG +230 -0
- package/mcp-server/.next/fallback-build-manifest.json +2 -2
- package/mcp-server/.next/package.json +3 -1
- package/mcp-server/.next/required-server-files.json +1 -0
- 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/app-build-manifest.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/index.html +1 -1
- package/mcp-server/.next/server/app/index.rsc +3 -3
- package/mcp-server/.next/server/app/logs/page/app-build-manifest.json +4 -3
- 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.nft.json +1 -1
- package/mcp-server/.next/server/app/page/app-build-manifest.json +3 -2
- 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/chunks/[root-of-the-server]__1b561deb._.js +1 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__1b561deb._.js.map +1 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js +7 -8
- package/mcp-server/.next/server/chunks/[root-of-the-server]__38e8baae._.js.map +1 -1
- package/mcp-server/.next/server/chunks/ssr/{node_modules__pnpm_4f58b96e._.js → _188bfe33._.js} +2 -2
- package/mcp-server/.next/server/chunks/ssr/_188bfe33._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js +2 -2
- package/mcp-server/.next/server/chunks/ssr/_9d670a6b._.js.map +1 -1
- package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js +1 -1
- package/mcp-server/.next/server/chunks/ssr/_d858c4cd._.js.map +1 -1
- package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js +1 -1
- package/mcp-server/.next/server/chunks/ssr/_dae9c1d5._.js.map +1 -1
- package/mcp-server/.next/server/chunks/ssr/{node_modules__pnpm_87fb6266._.js → _f03e80a8._.js} +2 -2
- package/mcp-server/.next/server/chunks/ssr/_f03e80a8._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js +1 -1
- package/mcp-server/.next/server/chunks/ssr/mcp-server_app_layout_tsx_afa41767._.js.map +1 -1
- package/mcp-server/.next/server/pages/404.html +1 -1
- package/mcp-server/.next/server/pages/500.html +2 -2
- package/mcp-server/.next/static/chunks/5a5edc75ee7e7de4.js +1 -0
- package/mcp-server/.next/static/chunks/65b18bf1ede9811a.css +1 -0
- package/mcp-server/.next/static/chunks/909033014621484e.js +1 -0
- package/mcp-server/.next/static/chunks/c5f8464bc8083ee7.js +1 -0
- package/mcp-server/.next/trace +1 -1
- package/mcp-server/app/api/tools/route.ts +22 -5
- package/mcp-server/app/layout.tsx +4 -2
- package/mcp-server/app/logs/LogsClient.infinite-loop.test.tsx +127 -0
- package/mcp-server/app/logs/LogsClient.tsx +318 -201
- package/mcp-server/app/logs/page.tsx +19 -3
- package/mcp-server/app/logs/utils.ts +15 -3
- package/mcp-server/app/mcp/route.ts +75 -509
- package/mcp-server/app/mcp/tools.ts +747 -0
- package/mcp-server/app/page.tsx +244 -169
- package/mcp-server/next.config.ts +1 -1
- package/mcp-server/package.json +9 -1
- package/mcp-server/public/favicon-16.svg +4 -0
- package/mcp-server/public/favicon-180.png +0 -0
- package/mcp-server/public/favicon-64.svg +4 -0
- package/mcp-server/public/favicon-preview.html +67 -0
- package/mcp-server/public/favicon.ico +0 -0
- package/mcp-server/public/favicon.svg +4 -0
- package/mcp-server/public/screenshots/test.txt +1 -0
- package/package.json +3 -4
- package/src/tui-interface-impl.tsx +163 -48
- package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js +0 -496
- package/mcp-server/.next/build/chunks/[root-of-the-server]__25374c4f._.js.map +0 -11
- package/mcp-server/.next/build/chunks/[root-of-the-server]__4718a9dd._.js +0 -408
- package/mcp-server/.next/build/chunks/[root-of-the-server]__4718a9dd._.js.map +0 -7
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js +0 -205
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c438ef56._.js.map +0 -8
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js +0 -496
- package/mcp-server/.next/build/chunks/[root-of-the-server]__c7ae8543._.js.map +0 -11
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_d723d216._.js +0 -13
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_d723d216._.js.map +0 -5
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_5a40237e._.js +0 -12
- package/mcp-server/.next/build/chunks/[turbopack-node]_transforms_webpack-loaders_ts_5a40237e._.js.map +0 -5
- package/mcp-server/.next/build/chunks/[turbopack]_runtime.js +0 -770
- package/mcp-server/.next/build/chunks/[turbopack]_runtime.js.map +0 -10
- package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js +0 -6759
- package/mcp-server/.next/build/chunks/node_modules__pnpm_806d01c0._.js.map +0 -47
- package/mcp-server/.next/postcss.js +0 -6
- package/mcp-server/.next/postcss.js.map +0 -5
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_4f58b96e._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_87fb6266._.js.map +0 -1
- package/mcp-server/.next/static/chunks/11f1b53bdf7a9af0.js +0 -1
- package/mcp-server/.next/static/chunks/3d4ea64f6384f2c6.js +0 -1
- package/mcp-server/.next/static/chunks/50335dad5c51aab8.js +0 -1
- package/mcp-server/.next/static/chunks/bdd0789390bc312f.css +0 -1
- package/mcp-server/.next/webpack-loaders.js +0 -6
- package/mcp-server/.next/webpack-loaders.js.map +0 -5
- /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_buildManifest.js +0 -0
- /package/mcp-server/.next/static/{mZfouQw6OHfahPQayuVeY → KrGcHKj--hSqNUOXmnA4A}/_clientMiddlewareManifest.json +0 -0
- /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.
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
<Box
|
|
169
|
-
<Box
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
192
|
-
|
|
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
|
-
{/*
|
|
196
|
-
<Box
|
|
197
|
-
<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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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>
|