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/mcp-server/app/page.tsx
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import Link from "next/link"
|
|
4
4
|
import { useEffect, useState } from "react"
|
|
5
|
+
import { DarkModeToggle } from "@/components/dark-mode-toggle"
|
|
6
|
+
import { useDarkMode } from "@/hooks/use-dark-mode"
|
|
5
7
|
|
|
6
8
|
interface MCPTool {
|
|
7
9
|
name: string
|
|
@@ -22,9 +24,109 @@ interface ToolsResponse {
|
|
|
22
24
|
categories: string[]
|
|
23
25
|
}
|
|
24
26
|
|
|
27
|
+
// Format tool descriptions by parsing markdown-style sections
|
|
28
|
+
function formatToolDescription(description: string) {
|
|
29
|
+
const slugify = (value: string) =>
|
|
30
|
+
value
|
|
31
|
+
.toLowerCase()
|
|
32
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
33
|
+
.replace(/(^-|-$)/g, "")
|
|
34
|
+
|
|
35
|
+
// Split by double newline to get sections
|
|
36
|
+
const sections = description.split("\n\n").filter((section) => section.trim())
|
|
37
|
+
const keyCounts = new Map<string, number>()
|
|
38
|
+
|
|
39
|
+
const getUniqueKey = (base: string) => {
|
|
40
|
+
const count = keyCounts.get(base) ?? 0
|
|
41
|
+
keyCounts.set(base, count + 1)
|
|
42
|
+
return count === 0 ? base : `${base}-${count}`
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return sections.map((rawSection, _idx) => {
|
|
46
|
+
const normalizedKey = getUniqueKey(slugify(rawSection) || "section")
|
|
47
|
+
let section = rawSection
|
|
48
|
+
|
|
49
|
+
// Remove excessive emojis
|
|
50
|
+
// Simple emoji reduction - just remove most emojis except the first in sequences
|
|
51
|
+
section = section.replace(/(\u{1F300}-\u{1F9FF}|\u{2600}-\u{26FF}|\u{1F900}-\u{1F9FF})+/gu, (match) => {
|
|
52
|
+
// Keep only the first emoji in a sequence
|
|
53
|
+
return match.charAt(0)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
// Handle different section types
|
|
57
|
+
if (section.includes("**") && section.includes(":")) {
|
|
58
|
+
// This is a header with content
|
|
59
|
+
const [header, ...contentParts] = section.split(":")
|
|
60
|
+
const cleanHeader = header.replace(/\*\*/g, "").trim()
|
|
61
|
+
const content = contentParts.join(":").trim()
|
|
62
|
+
|
|
63
|
+
// Check if content has bullet points
|
|
64
|
+
if (content.includes("•")) {
|
|
65
|
+
const items = content.split("•").filter((item) => item.trim())
|
|
66
|
+
const sectionKey = `${normalizedKey}-bullets`
|
|
67
|
+
return (
|
|
68
|
+
<div key={sectionKey}>
|
|
69
|
+
<h5 className="font-semibold mb-2">{cleanHeader}</h5>
|
|
70
|
+
<ul className="space-y-1 ml-4">
|
|
71
|
+
{items.map((item) => {
|
|
72
|
+
const itemKey = getUniqueKey(`${sectionKey}-item-${slugify(item).slice(0, 40) || "bullet"}`)
|
|
73
|
+
return (
|
|
74
|
+
<li key={itemKey} className="flex items-start">
|
|
75
|
+
<span className="text-muted-foreground mr-2">•</span>
|
|
76
|
+
<span className="text-muted-foreground text-sm">{item.trim()}</span>
|
|
77
|
+
</li>
|
|
78
|
+
)
|
|
79
|
+
})}
|
|
80
|
+
</ul>
|
|
81
|
+
</div>
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<div key={`${normalizedKey}-content`}>
|
|
87
|
+
<h5 className="font-semibold mb-1">{cleanHeader}</h5>
|
|
88
|
+
<p className="text-muted-foreground text-sm ml-4">{content}</p>
|
|
89
|
+
</div>
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Handle numbered lists (like workflow steps)
|
|
94
|
+
if (section.match(/^\d+[\ud83c-\ud83e][\udc00-\udfff]|^\d+\./m)) {
|
|
95
|
+
const items = section.split(/\n/).filter((item) => item.trim())
|
|
96
|
+
return (
|
|
97
|
+
<ol className="space-y-1 ml-4" key={`${normalizedKey}-steps`}>
|
|
98
|
+
{items.map((item, itemIdx) => {
|
|
99
|
+
// Clean up the item text
|
|
100
|
+
const cleanItem = item
|
|
101
|
+
.replace(/^\d+[\ud83c-\ud83e][\udc00-\udfff]\s*/, "")
|
|
102
|
+
.replace(/^\d+\.\s*/, "")
|
|
103
|
+
.trim()
|
|
104
|
+
return (
|
|
105
|
+
<li
|
|
106
|
+
key={getUniqueKey(`${normalizedKey}-step-${slugify(cleanItem).slice(0, 40) || "step"}`)}
|
|
107
|
+
className="text-muted-foreground text-sm"
|
|
108
|
+
>
|
|
109
|
+
{itemIdx + 1}. {cleanItem}
|
|
110
|
+
</li>
|
|
111
|
+
)
|
|
112
|
+
})}
|
|
113
|
+
</ol>
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Default paragraph
|
|
118
|
+
return (
|
|
119
|
+
<p key={`${normalizedKey}-paragraph`} className="text-muted-foreground text-sm leading-relaxed">
|
|
120
|
+
{section}
|
|
121
|
+
</p>
|
|
122
|
+
)
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
|
|
25
126
|
export default function HomePage() {
|
|
26
127
|
const [tools, setTools] = useState<ToolsResponse | null>(null)
|
|
27
128
|
const [loading, setLoading] = useState(true)
|
|
129
|
+
const [darkMode, setDarkMode] = useDarkMode()
|
|
28
130
|
|
|
29
131
|
useEffect(() => {
|
|
30
132
|
fetch("/api/tools")
|
|
@@ -39,25 +141,25 @@ export default function HomePage() {
|
|
|
39
141
|
}, [])
|
|
40
142
|
|
|
41
143
|
return (
|
|
42
|
-
<div className="min-h-screen bg-
|
|
144
|
+
<div className="min-h-screen bg-background text-foreground">
|
|
43
145
|
{/* Header */}
|
|
44
|
-
<header className="bg-
|
|
146
|
+
<header className="bg-muted/30 border-b border-border">
|
|
45
147
|
<div className="max-w-7xl mx-auto px-6 py-8">
|
|
46
148
|
<div className="flex items-center justify-between">
|
|
47
149
|
<div>
|
|
48
150
|
<div className="flex items-center gap-4 mb-3">
|
|
49
|
-
<div className="w-12 h-12 bg-
|
|
50
|
-
<span className="text-
|
|
151
|
+
<div className="w-12 h-12 bg-foreground rounded flex items-center justify-center">
|
|
152
|
+
<span className="text-background font-mono font-bold">d3k</span>
|
|
51
153
|
</div>
|
|
52
154
|
<div>
|
|
53
|
-
<h1 className="text-3xl font-bold
|
|
155
|
+
<h1 className="text-3xl font-bold">dev3000 MCP Server</h1>
|
|
54
156
|
<div className="flex items-center gap-3 mt-2">
|
|
55
157
|
<span className="inline-flex items-center gap-2 text-sm text-green-600 font-medium">
|
|
56
158
|
<span className="w-2 h-2 bg-green-500 rounded-full"></span>
|
|
57
159
|
Server Running
|
|
58
160
|
</span>
|
|
59
|
-
<span className="text-
|
|
60
|
-
<span className="text-sm text-
|
|
161
|
+
<span className="text-muted-foreground">•</span>
|
|
162
|
+
<span className="text-sm text-muted-foreground">Port {process.env.PORT || "3684"}</span>
|
|
61
163
|
</div>
|
|
62
164
|
</div>
|
|
63
165
|
</div>
|
|
@@ -65,7 +167,7 @@ export default function HomePage() {
|
|
|
65
167
|
<div className="flex items-center gap-4">
|
|
66
168
|
<Link
|
|
67
169
|
href="/logs"
|
|
68
|
-
className="inline-flex items-center gap-2 px-5 py-3 bg-
|
|
170
|
+
className="inline-flex items-center gap-2 px-5 py-3 bg-primary text-primary-foreground text-sm font-medium rounded hover:bg-primary/90 transition-colors"
|
|
69
171
|
>
|
|
70
172
|
📊 View Logs
|
|
71
173
|
</Link>
|
|
@@ -73,190 +175,163 @@ export default function HomePage() {
|
|
|
73
175
|
href="https://github.com/vercel-labs/dev3000#setup"
|
|
74
176
|
target="_blank"
|
|
75
177
|
rel="noopener noreferrer"
|
|
76
|
-
className="inline-flex items-center gap-2 px-5 py-3 border border-
|
|
178
|
+
className="inline-flex items-center gap-2 px-5 py-3 border border-border text-foreground text-sm font-medium rounded hover:bg-accent hover:text-accent-foreground transition-colors"
|
|
77
179
|
>
|
|
78
180
|
📖 Setup Guide
|
|
79
181
|
</a>
|
|
182
|
+
<DarkModeToggle darkMode={darkMode} setDarkMode={setDarkMode} />
|
|
80
183
|
</div>
|
|
81
184
|
</div>
|
|
82
185
|
</div>
|
|
83
186
|
</header>
|
|
84
187
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
<
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
<div
|
|
93
|
-
<
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
<
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
</a>
|
|
118
|
-
</div>
|
|
188
|
+
{/* Main Content - no sidebar needed with only 2 tools */}
|
|
189
|
+
<main className="max-w-7xl mx-auto px-6 py-8">
|
|
190
|
+
{/* Quick Start */}
|
|
191
|
+
<section className="mb-16">
|
|
192
|
+
<div className="bg-primary/10 border border-primary/20 rounded p-8">
|
|
193
|
+
<h2 className="text-xl font-semibold mb-4">🚀 Quick Start</h2>
|
|
194
|
+
<div className="space-y-4">
|
|
195
|
+
<div>
|
|
196
|
+
<span className="text-sm font-medium">MCP Endpoint:</span>
|
|
197
|
+
<code className="ml-3 px-4 py-2 bg-primary/20 text-foreground text-sm font-mono rounded">
|
|
198
|
+
{tools?.endpoint || "http://localhost:3684/mcp"}
|
|
199
|
+
</code>
|
|
200
|
+
</div>
|
|
201
|
+
<div className="text-sm">
|
|
202
|
+
<p className="mb-3">Connect your AI tools to this MCP server for real-time development debugging:</p>
|
|
203
|
+
<div className="flex gap-6">
|
|
204
|
+
<a
|
|
205
|
+
href="https://github.com/vercel-labs/dev3000#claude-desktop"
|
|
206
|
+
target="_blank"
|
|
207
|
+
rel="noopener noreferrer"
|
|
208
|
+
className="text-primary hover:text-primary/80 font-medium"
|
|
209
|
+
>
|
|
210
|
+
Claude Desktop Setup →
|
|
211
|
+
</a>
|
|
212
|
+
<a
|
|
213
|
+
href="https://github.com/vercel-labs/dev3000#cursor"
|
|
214
|
+
target="_blank"
|
|
215
|
+
rel="noopener noreferrer"
|
|
216
|
+
className="text-primary hover:text-primary/80 font-medium"
|
|
217
|
+
>
|
|
218
|
+
Cursor Setup →
|
|
219
|
+
</a>
|
|
119
220
|
</div>
|
|
120
221
|
</div>
|
|
121
222
|
</div>
|
|
122
|
-
</
|
|
223
|
+
</div>
|
|
224
|
+
</section>
|
|
123
225
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
</div>
|
|
226
|
+
{/* Tools Documentation */}
|
|
227
|
+
<section>
|
|
228
|
+
<div className="mb-12">
|
|
229
|
+
<div>
|
|
230
|
+
<h2 className="text-3xl font-bold mb-3">Available Tools</h2>
|
|
231
|
+
<p className="text-muted-foreground text-lg">
|
|
232
|
+
{loading
|
|
233
|
+
? "Loading MCP tools..."
|
|
234
|
+
: `${tools?.totalTools || 0} tools across ${
|
|
235
|
+
tools?.categories.length || 0
|
|
236
|
+
} categories for AI-powered development debugging`}
|
|
237
|
+
</p>
|
|
137
238
|
</div>
|
|
239
|
+
</div>
|
|
138
240
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
<div>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
<
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
</span>
|
|
169
|
-
<span className="text-gray-400 text-xs">- {param.type}</span>
|
|
170
|
-
</div>
|
|
171
|
-
{param.description && (
|
|
172
|
-
<div className="text-gray-600 ml-1 mt-1 text-sm">{param.description}</div>
|
|
173
|
-
)}
|
|
241
|
+
{loading ? (
|
|
242
|
+
<div className="text-center py-16">
|
|
243
|
+
<div className="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div>
|
|
244
|
+
<p className="mt-6 text-muted-foreground">Loading tool documentation...</p>
|
|
245
|
+
</div>
|
|
246
|
+
) : tools ? (
|
|
247
|
+
<div className="grid gap-6 lg:grid-cols-2">
|
|
248
|
+
{tools.tools.map((tool) => (
|
|
249
|
+
<div
|
|
250
|
+
key={tool.name}
|
|
251
|
+
id={tool.name}
|
|
252
|
+
className="border border-border rounded-lg p-6 hover:border-muted-foreground/50 transition-colors"
|
|
253
|
+
>
|
|
254
|
+
<div className="mb-4">
|
|
255
|
+
<h4 className="text-xl font-semibold font-mono mb-3">{tool.name}</h4>
|
|
256
|
+
<div className="text-muted-foreground space-y-3">{formatToolDescription(tool.description)}</div>
|
|
257
|
+
</div>
|
|
258
|
+
{tool.parameters.length > 0 && (
|
|
259
|
+
<div>
|
|
260
|
+
<h5 className="text-sm font-semibold mb-3">Parameters:</h5>
|
|
261
|
+
<div className="space-y-2">
|
|
262
|
+
{tool.parameters.map((param) => (
|
|
263
|
+
<div key={param.name} className="text-sm">
|
|
264
|
+
<div className="flex items-start gap-2">
|
|
265
|
+
<span className="font-mono text-primary font-medium">{param.name}</span>
|
|
266
|
+
<span className="text-muted-foreground text-xs">
|
|
267
|
+
{param.optional ? "(optional)" : "(required)"}
|
|
268
|
+
</span>
|
|
269
|
+
<span className="text-muted-foreground/70 text-xs">- {param.type}</span>
|
|
174
270
|
</div>
|
|
175
|
-
|
|
176
|
-
|
|
271
|
+
{param.description && (
|
|
272
|
+
<div className="text-muted-foreground ml-1 mt-1 text-sm">{param.description}</div>
|
|
273
|
+
)}
|
|
274
|
+
</div>
|
|
275
|
+
))}
|
|
177
276
|
</div>
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
))}
|
|
181
|
-
</div>
|
|
182
|
-
) : (
|
|
183
|
-
<div className="text-center py-16">
|
|
184
|
-
<p className="text-red-600 mb-6">Failed to load tool documentation</p>
|
|
185
|
-
<button
|
|
186
|
-
onClick={() => window.location.reload()}
|
|
187
|
-
className="px-6 py-3 bg-blue-600 text-white text-sm rounded hover:bg-blue-700 transition-colors"
|
|
188
|
-
type="button"
|
|
189
|
-
>
|
|
190
|
-
Retry
|
|
191
|
-
</button>
|
|
192
|
-
</div>
|
|
193
|
-
)}
|
|
194
|
-
</section>
|
|
195
|
-
|
|
196
|
-
{/* Magic Workflow */}
|
|
197
|
-
<section className="mt-20 bg-gradient-to-r from-purple-50 to-blue-50 border border-purple-200 rounded-lg p-10">
|
|
198
|
-
<h2 className="text-2xl font-semibold text-gray-900 mb-6 flex items-center gap-3">🪄 The Magic Workflow</h2>
|
|
199
|
-
<div className="grid md:grid-cols-3 gap-8">
|
|
200
|
-
<div className="text-center">
|
|
201
|
-
<div className="w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md">
|
|
202
|
-
<span className="text-blue-600 font-bold text-2xl">1</span>
|
|
277
|
+
</div>
|
|
278
|
+
)}
|
|
203
279
|
</div>
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
280
|
+
))}
|
|
281
|
+
</div>
|
|
282
|
+
) : (
|
|
283
|
+
<div className="text-center py-16">
|
|
284
|
+
<p className="text-destructive mb-6">Failed to load tool documentation</p>
|
|
285
|
+
<button
|
|
286
|
+
onClick={() => window.location.reload()}
|
|
287
|
+
className="px-6 py-3 bg-primary text-primary-foreground text-sm rounded hover:bg-primary/90 transition-colors"
|
|
288
|
+
type="button"
|
|
289
|
+
>
|
|
290
|
+
Retry
|
|
291
|
+
</button>
|
|
292
|
+
</div>
|
|
293
|
+
)}
|
|
294
|
+
</section>
|
|
295
|
+
|
|
296
|
+
{/* Magic Workflow */}
|
|
297
|
+
<section className="mt-20 bg-gradient-to-r from-primary/10 to-secondary/10 border border-border rounded-lg p-10">
|
|
298
|
+
<h2 className="text-2xl font-semibold mb-6 flex items-center gap-3">🪄 The Magic Workflow</h2>
|
|
299
|
+
<div className="grid md:grid-cols-3 gap-8">
|
|
300
|
+
<div className="text-center">
|
|
301
|
+
<div className="w-16 h-16 bg-primary/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md">
|
|
302
|
+
<span className="text-primary font-bold text-2xl">1</span>
|
|
208
303
|
</div>
|
|
209
|
-
<
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
</
|
|
304
|
+
<h3 className="font-semibold mb-3 text-lg">AI Finds Issues</h3>
|
|
305
|
+
<p className="text-muted-foreground leading-relaxed">
|
|
306
|
+
fix_my_app automatically detects all types of errors and problems in your app
|
|
307
|
+
</p>
|
|
308
|
+
</div>
|
|
309
|
+
<div className="text-center">
|
|
310
|
+
<div className="w-16 h-16 bg-accent/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md">
|
|
311
|
+
<span className="text-accent-foreground font-bold text-2xl">2</span>
|
|
217
312
|
</div>
|
|
218
|
-
<
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
</
|
|
313
|
+
<h3 className="font-semibold mb-3 text-lg">AI Fixes Code</h3>
|
|
314
|
+
<p className="text-muted-foreground leading-relaxed">
|
|
315
|
+
AI analyzes errors and edits your code files to resolve issues
|
|
316
|
+
</p>
|
|
317
|
+
</div>
|
|
318
|
+
<div className="text-center">
|
|
319
|
+
<div className="w-16 h-16 bg-green-500/20 rounded-full flex items-center justify-center mx-auto mb-4 shadow-md">
|
|
320
|
+
<span className="text-green-600 dark:text-green-400 font-bold text-2xl">3</span>
|
|
226
321
|
</div>
|
|
322
|
+
<h3 className="font-semibold mb-3 text-lg">AI Verifies Fixes</h3>
|
|
323
|
+
<p className="text-muted-foreground leading-relaxed">
|
|
324
|
+
execute_browser_action tests the fixes in real-time with screenshots
|
|
325
|
+
</p>
|
|
227
326
|
</div>
|
|
228
|
-
</section>
|
|
229
|
-
</main>
|
|
230
|
-
|
|
231
|
-
{/* Table of Contents - Sticky Sidebar (Right) */}
|
|
232
|
-
<aside className="lg:block w-72 flex-shrink-0 fixed right-0 top-0 h-screen overflow-y-auto z-10">
|
|
233
|
-
<div className="p-6 bg-gray-50 border-l border-gray-200 h-full">
|
|
234
|
-
<h3 className="text-sm font-semibold text-gray-900 mb-4">Tools</h3>
|
|
235
|
-
{loading ? (
|
|
236
|
-
<div className="text-sm text-gray-500">Loading tools...</div>
|
|
237
|
-
) : tools ? (
|
|
238
|
-
<nav className="space-y-1 text-sm">
|
|
239
|
-
{tools.tools.map((tool) => (
|
|
240
|
-
<a
|
|
241
|
-
key={tool.name}
|
|
242
|
-
href={`#${tool.name}`}
|
|
243
|
-
className="text-gray-600 hover:text-blue-600 transition-colors block py-2 px-3 rounded hover:bg-white"
|
|
244
|
-
>
|
|
245
|
-
{tool.name}
|
|
246
|
-
</a>
|
|
247
|
-
))}
|
|
248
|
-
</nav>
|
|
249
|
-
) : (
|
|
250
|
-
<div className="text-sm text-gray-500">Failed to load tools</div>
|
|
251
|
-
)}
|
|
252
327
|
</div>
|
|
253
|
-
</
|
|
254
|
-
</
|
|
328
|
+
</section>
|
|
329
|
+
</main>
|
|
255
330
|
|
|
256
331
|
{/* Footer */}
|
|
257
|
-
<footer className="border-t border-
|
|
332
|
+
<footer className="border-t border-border mt-20">
|
|
258
333
|
<div className="max-w-7xl mx-auto px-6 py-8">
|
|
259
|
-
<div className="flex items-center justify-between text-sm text-
|
|
334
|
+
<div className="flex items-center justify-between text-sm text-muted-foreground">
|
|
260
335
|
<div>
|
|
261
336
|
<span className="font-semibold">dev3000 MCP Server</span> - AI-powered development monitoring
|
|
262
337
|
</div>
|
|
@@ -265,7 +340,7 @@ export default function HomePage() {
|
|
|
265
340
|
href="https://github.com/vercel-labs/dev3000"
|
|
266
341
|
target="_blank"
|
|
267
342
|
rel="noopener noreferrer"
|
|
268
|
-
className="hover:text-
|
|
343
|
+
className="hover:text-foreground transition-colors"
|
|
269
344
|
>
|
|
270
345
|
GitHub
|
|
271
346
|
</a>
|
|
@@ -273,7 +348,7 @@ export default function HomePage() {
|
|
|
273
348
|
href="https://dev3000.ai"
|
|
274
349
|
target="_blank"
|
|
275
350
|
rel="noopener noreferrer"
|
|
276
|
-
className="hover:text-
|
|
351
|
+
className="hover:text-foreground transition-colors"
|
|
277
352
|
>
|
|
278
353
|
Homepage
|
|
279
354
|
</a>
|
|
@@ -3,7 +3,7 @@ import path from "path"
|
|
|
3
3
|
|
|
4
4
|
const nextConfig: NextConfig = {
|
|
5
5
|
reactStrictMode: true,
|
|
6
|
-
experimental: { reactCompiler: true },
|
|
6
|
+
experimental: { reactCompiler: true, turbopackPersistentCaching: true },
|
|
7
7
|
devIndicators: false,
|
|
8
8
|
turbopack: {
|
|
9
9
|
root: path.join(__dirname, "..")
|
package/mcp-server/package.json
CHANGED
|
@@ -7,14 +7,22 @@
|
|
|
7
7
|
"build": "next build --turbopack",
|
|
8
8
|
"start": "next start",
|
|
9
9
|
"typegen": "next typegen",
|
|
10
|
-
"typecheck": "tsc --noEmit"
|
|
10
|
+
"typecheck": "tsc --noEmit",
|
|
11
|
+
"tools": "tsx tools-cli.ts"
|
|
11
12
|
},
|
|
12
13
|
"dependencies": {
|
|
14
|
+
"@modelcontextprotocol/sdk": "catalog:",
|
|
15
|
+
"@radix-ui/react-slot": "catalog:",
|
|
13
16
|
"autoprefixer": "catalog:",
|
|
17
|
+
"class-variance-authority": "catalog:",
|
|
18
|
+
"clsx": "catalog:",
|
|
19
|
+
"commander": "^11.1.0",
|
|
20
|
+
"lucide-react": "catalog:",
|
|
14
21
|
"mcp-handler": "^1.0.2",
|
|
15
22
|
"next": "catalog:",
|
|
16
23
|
"react": "catalog:",
|
|
17
24
|
"react-dom": "catalog:",
|
|
25
|
+
"tailwind-merge": "catalog:",
|
|
18
26
|
"ws": "^8.18.3",
|
|
19
27
|
"zod": "catalog:"
|
|
20
28
|
},
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="64" height="64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="64" height="64" fill="#ffffff" rx="4"/>
|
|
3
|
+
<text x="32" y="44" font-family="monospace" font-size="20" font-weight="bold" text-anchor="middle" fill="#000000">d3k</text>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>dev3000 Favicon Preview - Bold & Readable</title>
|
|
5
|
+
<style>
|
|
6
|
+
body { font-family: monospace; background: #f0f0f0; padding: 20px; }
|
|
7
|
+
.favicon-preview { display: inline-block; margin: 10px; padding: 10px; background: white; border: 1px solid #ccc; }
|
|
8
|
+
svg { border: 1px solid #000; }
|
|
9
|
+
.browser-tab-demo { background: #e8e8e8; padding: 10px; border-radius: 8px; margin: 20px 0; }
|
|
10
|
+
.tab { display: inline-block; background: #d0d0d0; padding: 4px 8px; border-radius: 4px 4px 0 0; margin-right: 2px; font-size: 12px; }
|
|
11
|
+
.tab svg { vertical-align: middle; margin-right: 4px; border: none; }
|
|
12
|
+
</style>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<h2>dev3000 Favicon Preview - Bold & Readable Design</h2>
|
|
16
|
+
<p>Simplified design with larger white rectangle and bold text for maximum readability at small sizes.</p>
|
|
17
|
+
|
|
18
|
+
<div class="browser-tab-demo">
|
|
19
|
+
<h3>How it looks in browser tabs:</h3>
|
|
20
|
+
<div class="tab">
|
|
21
|
+
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
|
22
|
+
<rect width="16" height="16" fill="#000000"/>
|
|
23
|
+
<rect x="2" y="2" width="12" height="12" fill="#ffffff" rx="1"/>
|
|
24
|
+
<text x="8" y="12" font-family="monospace" font-size="6" font-weight="900" text-anchor="middle" fill="#000000">d3k</text>
|
|
25
|
+
</svg>
|
|
26
|
+
dev3000 - AI Debugging
|
|
27
|
+
</div>
|
|
28
|
+
<div class="tab">
|
|
29
|
+
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
|
30
|
+
<rect width="16" height="16" fill="#000000"/>
|
|
31
|
+
<rect x="2" y="2" width="12" height="12" fill="#ffffff" rx="1"/>
|
|
32
|
+
<text x="8" y="12" font-family="monospace" font-size="6" font-weight="900" text-anchor="middle" fill="#000000">d3k</text>
|
|
33
|
+
</svg>
|
|
34
|
+
localhost:3684/logs
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="favicon-preview">
|
|
39
|
+
<h3>16x16 (Browser Tab) - NEW BOLD DESIGN</h3>
|
|
40
|
+
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
|
41
|
+
<rect width="16" height="16" fill="#000000"/>
|
|
42
|
+
<rect x="2" y="2" width="12" height="12" fill="#ffffff" rx="1"/>
|
|
43
|
+
<text x="8" y="12" font-family="monospace" font-size="6" font-weight="900" text-anchor="middle" fill="#000000">d3k</text>
|
|
44
|
+
</svg>
|
|
45
|
+
<p>Bold, simple rectangle with large text - clearly readable!</p>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div class="favicon-preview">
|
|
49
|
+
<h3>32x32 (Standard)</h3>
|
|
50
|
+
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
|
51
|
+
<rect width="32" height="32" fill="#000000"/>
|
|
52
|
+
<rect x="4" y="4" width="24" height="24" fill="#ffffff" rx="2"/>
|
|
53
|
+
<text x="16" y="24" font-family="monospace" font-size="12" font-weight="900" text-anchor="middle" fill="#000000">d3k</text>
|
|
54
|
+
</svg>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<div class="favicon-preview">
|
|
58
|
+
<h3>64x64 (High-DPI)</h3>
|
|
59
|
+
<svg width="64" height="64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
|
60
|
+
<rect width="64" height="64" fill="#000000"/>
|
|
61
|
+
<rect x="8" y="8" width="48" height="48" fill="#ffffff" rx="4"/>
|
|
62
|
+
<text x="32" y="48" font-family="monospace" font-size="24" font-weight="900" text-anchor="middle" fill="#000000">d3k</text>
|
|
63
|
+
</svg>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="32" height="32" fill="#ffffff" rx="2"/>
|
|
3
|
+
<text x="16" y="22" font-family="monospace" font-size="10" font-weight="bold" text-anchor="middle" fill="#000000">d3k</text>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
test
|