Skip to content

Commit b74403f

Browse files
authored
Merge pull request #30 from tomeai/dev
Dev
2 parents 491df2c + 9d178a5 commit b74403f

File tree

5 files changed

+97
-38
lines changed

5 files changed

+97
-38
lines changed

backend/deploy/server.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[program:fastapi_server]
22
directory=/wemcp/backend
3-
command=/usr/local/bin/granian main:app --interface asgi --host 0.0.0.0 --port 8000 --workers 4 --backlog 1024 --workers-kill-timeout 120 --backpressure 2000 --pid-file /var/run/granian.pid --log --log-level debug
3+
command=/usr/local/bin/granian main:app --interface asgi --host 0.0.0.0 --port 8000 --workers 4 --backlog 1024 --workers-kill-timeout 120 --backpressure 2000 --forwarded-allow-ips * --pid-file /var/run/granian.pid --log --log-level info
44
user=root
55
autostart=true
66
autorestart=true

frontend/app/mcp/search-page.tsx

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,9 @@ export default function SearchPage() {
154154
}
155155

156156
return (
157-
<div className="mx-auto flex w-full max-w-7xl px-4 sm:px-6 lg:px-8">
158-
{/* Left Sidebar - Categories */}
159-
<aside className="sticky top-[var(--spacing-app-header)] h-[calc(100vh-var(--spacing-app-header))] w-[220px] flex-shrink-0 border-r border-gray-200 dark:border-gray-800">
157+
<div className="mx-auto flex w-full max-w-7xl flex-col px-4 sm:px-6 md:flex-row lg:px-8">
158+
{/* Left Sidebar - Categories (Desktop only) */}
159+
<aside className="sticky top-[var(--spacing-app-header)] hidden h-[calc(100vh-var(--spacing-app-header))] w-[220px] flex-shrink-0 border-r border-gray-200 dark:border-gray-800 md:block">
160160
<ScrollArea className="h-full">
161161
<div className="py-3 pr-2">
162162
{/* All category */}
@@ -212,7 +212,45 @@ export default function SearchPage() {
212212

213213
{/* Right Content */}
214214
<main className="min-w-0 flex-1">
215-
<div className="py-3 pl-6">
215+
<div className="py-3 md:pl-6">
216+
{/* Mobile Category Tabs */}
217+
<div className="-mx-4 mb-4 overflow-x-auto px-4 md:hidden">
218+
<div className="flex gap-2 pb-2">
219+
<button
220+
onClick={() => handleCategoryClick(0)}
221+
className={cn(
222+
"flex-shrink-0 rounded-full px-3 py-1.5 text-sm transition-colors",
223+
selectedCategoryId === 0
224+
? "bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900"
225+
: "border border-gray-200 text-gray-600 dark:border-gray-700 dark:text-gray-400"
226+
)}
227+
>
228+
全部
229+
</button>
230+
{isCategoryLoading
231+
? Array.from({ length: 4 }).map((_, i) => (
232+
<div
233+
key={i}
234+
className="h-8 w-16 flex-shrink-0 animate-pulse rounded-full bg-gray-100 dark:bg-gray-800"
235+
/>
236+
))
237+
: categories.map((category) => (
238+
<button
239+
key={category.id}
240+
onClick={() => handleCategoryClick(category.id)}
241+
className={cn(
242+
"flex-shrink-0 rounded-full px-3 py-1.5 text-sm transition-colors",
243+
selectedCategoryId === category.id
244+
? "bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900"
245+
: "border border-gray-200 text-gray-600 dark:border-gray-700 dark:text-gray-400"
246+
)}
247+
>
248+
{category.name}
249+
</button>
250+
))}
251+
</div>
252+
</div>
253+
216254
{/* Search Bar */}
217255
<div className="mb-6 flex items-center gap-3">
218256
<div className="relative flex-1">
@@ -231,14 +269,14 @@ export default function SearchPage() {
231269
<Link href="/build/mcp">
232270
<Button variant="outline" className="h-10 gap-2 whitespace-nowrap">
233271
<CloudArrowDown className="h-4 w-4" />
234-
提交 MCP
272+
<span className="hidden sm:inline">提交 MCP</span>
235273
</Button>
236274
</Link>
237275
</div>
238276

239277
{/* Loading state */}
240278
{isLoading && (
241-
<div className="grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3">
279+
<div className="grid grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-3">
242280
{Array.from({ length: 6 }).map((_, i) => (
243281
<div key={i} className="h-[200px] animate-pulse rounded-xl border border-border/50 bg-card p-5">
244282
<div className="mb-4 flex items-center gap-3">
@@ -260,7 +298,7 @@ export default function SearchPage() {
260298

261299
{/* Server Cards Grid */}
262300
{!isLoading && (
263-
<div className="grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3">
301+
<div className="grid grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-3">
264302
{mcpServers.map((server) => (
265303
<Link
266304
href={`/mcp/${server.owner}/${server.server_name}`}
@@ -344,7 +382,7 @@ export default function SearchPage() {
344382

345383
{/* Pagination */}
346384
{totalPages > 1 && !isLoading && (
347-
<div className="mt-8 flex items-center justify-between border-t border-gray-100 pt-4 dark:border-gray-800">
385+
<div className="mt-8 flex flex-col gap-3 border-t border-gray-100 pt-4 dark:border-gray-800 sm:flex-row sm:items-center sm:justify-between">
348386
<p className="text-xs text-gray-500 dark:text-gray-400">
349387
{totalServers} 个服务器,第 {currentPage}/{totalPages}
350388
</p>

frontend/app/skills/search-page.tsx

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,9 @@ export default function SearchPage() {
134134
}
135135

136136
return (
137-
<div className="mx-auto flex w-full max-w-7xl px-4 sm:px-6 lg:px-8">
138-
{/* Left Sidebar - Categories */}
139-
<aside className="sticky top-[var(--spacing-app-header)] h-[calc(100vh-var(--spacing-app-header))] w-[220px] flex-shrink-0 border-r border-gray-200 dark:border-gray-800">
137+
<div className="mx-auto flex w-full max-w-7xl flex-col px-4 sm:px-6 md:flex-row lg:px-8">
138+
{/* Left Sidebar - Categories (Desktop only) */}
139+
<aside className="sticky top-[var(--spacing-app-header)] hidden h-[calc(100vh-var(--spacing-app-header))] w-[220px] flex-shrink-0 border-r border-gray-200 dark:border-gray-800 md:block">
140140
<ScrollArea className="h-full">
141141
<div className="py-3 pr-2">
142142
{/* All category */}
@@ -192,7 +192,45 @@ export default function SearchPage() {
192192

193193
{/* Right Content */}
194194
<main className="min-w-0 flex-1">
195-
<div className="py-3 pl-6">
195+
<div className="py-3 md:pl-6">
196+
{/* Mobile Category Tabs */}
197+
<div className="-mx-4 mb-4 overflow-x-auto px-4 md:hidden">
198+
<div className="flex gap-2 pb-2">
199+
<button
200+
onClick={() => handleCategoryClick(0)}
201+
className={cn(
202+
"flex-shrink-0 rounded-full px-3 py-1.5 text-sm transition-colors",
203+
selectedCategoryId === 0
204+
? "bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900"
205+
: "border border-gray-200 text-gray-600 dark:border-gray-700 dark:text-gray-400"
206+
)}
207+
>
208+
全部
209+
</button>
210+
{isCategoryLoading
211+
? Array.from({ length: 4 }).map((_, i) => (
212+
<div
213+
key={i}
214+
className="h-8 w-16 flex-shrink-0 animate-pulse rounded-full bg-gray-100 dark:bg-gray-800"
215+
/>
216+
))
217+
: categories.map((category) => (
218+
<button
219+
key={category.id}
220+
onClick={() => handleCategoryClick(category.id)}
221+
className={cn(
222+
"flex-shrink-0 rounded-full px-3 py-1.5 text-sm transition-colors",
223+
selectedCategoryId === category.id
224+
? "bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900"
225+
: "border border-gray-200 text-gray-600 dark:border-gray-700 dark:text-gray-400"
226+
)}
227+
>
228+
{category.name}
229+
</button>
230+
))}
231+
</div>
232+
</div>
233+
196234
{/* Search Bar */}
197235
<div className="mb-6 flex items-center gap-3">
198236
<div className="relative flex-1">
@@ -211,7 +249,7 @@ export default function SearchPage() {
211249
<Link href="/build/skill">
212250
<Button variant="outline" className="h-10 gap-2 whitespace-nowrap">
213251
<Sparkles className="h-4 w-4" />
214-
提交 Skill
252+
<span className="hidden sm:inline">提交 Skill</span>
215253
</Button>
216254
</Link>
217255
</div>
@@ -243,8 +281,8 @@ export default function SearchPage() {
243281
className="group py-5 first:pt-0"
244282
>
245283
{/* Row 1: Avatar + owner/name + verified + star count */}
246-
<div className="flex items-center justify-between">
247-
<div className="flex items-center gap-3">
284+
<div className="flex items-center justify-between gap-2">
285+
<div className="flex min-w-0 items-center gap-3">
248286
<Avatar className="h-9 w-9 flex-shrink-0">
249287
<AvatarImage
250288
src={skill.avatar}
@@ -256,9 +294,9 @@ export default function SearchPage() {
256294
</Avatar>
257295
<Link
258296
href={`/skills/${skill.owner}/${skill.name}`}
259-
className="flex items-center gap-1.5"
297+
className="flex min-w-0 items-center gap-1.5"
260298
>
261-
<span className="text-base font-semibold transition-colors">
299+
<span className="truncate text-base font-semibold transition-colors">
262300
{skill.owner}/{skill.name}
263301
</span>
264302
<CheckCircle2 className="h-4 w-4 flex-shrink-0 text-green-500" />
@@ -291,7 +329,7 @@ export default function SearchPage() {
291329

292330
{/* Pagination */}
293331
{totalPages > 1 && !isLoading && (
294-
<div className="mt-8 flex items-center justify-between border-t border-gray-100 pt-4 dark:border-gray-800">
332+
<div className="mt-8 flex flex-col gap-3 border-t border-gray-100 pt-4 dark:border-gray-800 sm:flex-row sm:items-center sm:justify-between">
295333
<p className="text-xs text-gray-500 dark:text-gray-400">
296334
{totalSkills} 个 Skill,第 {currentPage}/{totalPages}
297335
</p>

frontend/components/layout/navi-menu.tsx

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"use client";
22

3-
import { AddMcpButton } from "@/components/mcp/add-mcp-button";
43
import { useUser } from "@/components/providers/user-provider";
54
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
65
import { List } from "@phosphor-icons/react";
@@ -81,7 +80,7 @@ export function NaviMenu() {
8180
}
8281
onClick={() => setOpen(false)}
8382
>
84-
Skills
83+
Skill
8584
</Link>
8685
{/*<Link*/}
8786
{/* href="/agent"*/}
@@ -92,24 +91,9 @@ export function NaviMenu() {
9291
{/*>*/}
9392
{/* Agent*/}
9493
{/*</Link>*/}
95-
<div className="py-2">
96-
<AddMcpButton
97-
onClick={
98-
!isLoggedIn
99-
? () => {
100-
setOpen(false)
101-
window.location.href = "/user/auth/login"
102-
}
103-
: () => {
104-
setOpen(false)
105-
window.location.href = "/build/mcp"
106-
}
107-
}
108-
/>
109-
</div>
11094
{!isLoggedIn && (
11195
<Link
112-
href="/auth/login"
96+
href="/user/auth/login"
11397
onClick={() => setOpen(false)}
11498
className="font-base text-foreground hover:text-primary block py-3 text-left text-lg transition-colors"
11599
>

frontend/lib/routes.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export const API_ROUTE_MCP_ADMIN_SERVERS = "/api/v1/admin/mcp/servers"
99
export const API_ROUTE_MCP_ADMIN_SERVER_DETAIL = "/api/v1/admin/mcp/servers"
1010
export const API_ROUTE_MCP_ADMIN_CATEGORY = "/api/v1/admin/mcp/categories/get"
1111
export const API_ROUTE_MCP_ADMIN_CATEGORY_CREATE = "/api/v1/admin/mcp/categories/create"
12-
export const API_ROUTE_MCP_COMPILE_STDIO = "/api/v1/mcp/compile/stdio"
1312
export const API_ROUTE_MCP_DEPLOY_PACKAGE = "/api/v1/mcp/deploy/package"
1413
export const API_ROUTE_OAUTH_USER = "/api/v1/admin/oauth2/user/me"
1514
export const API_ROUTE_AUTH_ME = "/api/v1/admin/auth/me"

0 commit comments

Comments
 (0)