diff --git a/dev.log b/dev.log
index 1dc8d3e..1a8b3f8 100644
--- a/dev.log
+++ b/dev.log
@@ -1,31 +1,39 @@
+▲ Next.js 16.1.6 (Turbopack)
-> dashboard@1.0.0 dev
-> bash scripts/Dev-MCP-Server.sh && next dev --turbo
-
-[MCP] Cleaning stale Chrome processes...
-[MCP] Starting Chrome (remote debugging)...
-[MCP] Waiting for Chrome DevTools endpoint...
-[MCP] Chrome DevTools ready on port 9222
-[MCP] (Optional) Pre-warming chrome-devtools-mcp...
-[MCP] Done. You can now run: npm run dev
-▲ Next.js 16.1.2 (Turbopack)
- Local: http://localhost:3000
- Network: http://192.168.0.2:3000
✓ Starting...
-✓ Ready in 2.5s
-○ Compiling /services ...
- GET /services 200 in 6.8s (compile: 6.4s, render: 327ms)
+
+Attention: Next.js now collects completely anonymous telemetry regarding usage.
+This information is used to shape Next.js' roadmap and prioritize features.
+
+You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
+https://nextjs.org/telemetry
+
+
+✓ Ready in 4.4s
+
+○ Compiling / ...
+
+ GET / 200 in 11.8s (compile: 11.0s, render: 755ms)
+
+ GET / 200 in 513ms (compile: 159ms, render: 354ms)
+
+ GET /api/integrations/defaults 200 in 1276ms (compile: 1242ms, render: 35ms)
+
[runtime-config] Loaded env: PROD
- GET /api/auth/session 200 in 1021ms (compile: 993ms, render: 29ms)
- GET /services 200 in 87ms (compile: 5ms, render: 82ms)
- GET /api/auth/session 200 in 11ms (compile: 3ms, render: 7ms)
-✓ Compiled in 310ms
- GET /services 200 in 441ms (compile: 149ms, render: 293ms)
- GET /api/auth/session 200 in 16ms (compile: 5ms, render: 10ms)
- GET /services 200 in 252ms (compile: 100ms, render: 152ms)
- GET /api/auth/session 200 in 14ms (compile: 5ms, render: 8ms)
- GET /services 200 in 251ms (compile: 86ms, render: 165ms)
- GET /api/auth/session 200 in 13ms (compile: 4ms, render: 8ms)
- GET /services 200 in 281ms (compile: 94ms, render: 187ms)
- GET /api/auth/session 200 in 12ms (compile: 4ms, render: 8ms)
+
+ GET /api/auth/session 200 in 2.2s (compile: 2.2s, render: 15ms)
+
+ GET /api/marketing/home-stats 200 in 1435ms (compile: 1425ms, render: 9ms)
+
+ GET / 200 in 150ms (compile: 5ms, render: 145ms)
+
+ GET /api/auth/session 200 in 16ms (compile: 4ms, render: 12ms)
+
+ GET /api/integrations/defaults 200 in 20ms (compile: 12ms, render: 8ms)
+
+ GET /api/marketing/home-stats 200 in 29ms (compile: 22ms, render: 7ms)
+
+ GET /api/blogs/latest?limit=7 200 in 37ms (compile: 29ms, render: 8ms)
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c..c4b7818 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 74ed874..76037d8 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -96,12 +96,12 @@ export default function HomePage() {
>
-
+
-
diff --git a/src/components/home/GatewayHero.tsx b/src/components/home/GatewayHero.tsx
index e533988..0706dcb 100644
--- a/src/components/home/GatewayHero.tsx
+++ b/src/components/home/GatewayHero.tsx
@@ -1,12 +1,14 @@
"use client";
import {
+ Search,
ArrowRight,
Cloud,
- Send,
- Sparkles,
- SunMedium,
- Workflow,
+ Bell,
+ Sun,
+ Wrench,
+ History,
+ Globe,
} from "lucide-react";
import { useRouter } from "next/navigation";
import { useState } from "react";
@@ -14,23 +16,8 @@ import { useState } from "react";
import { useLanguage } from "@/i18n/LanguageProvider";
import type { IntegrationDefaults } from "@/lib/openclaw/types";
import { useUserStore } from "@/lib/userStore";
-import { cn } from "@/lib/utils";
-import {
- buildHomeGatewayHeroViewModel,
- type HomeGatewayStatusNode,
-} from "@/components/home/gatewayHeroModel";
import { useGatewayHero } from "@/components/home/useGatewayHero";
-function toneClasses(tone: HomeGatewayStatusNode["tone"]): string {
- if (tone === "healthy") {
- return "border-lime-300/70 bg-lime-50/90 text-lime-950";
- }
- if (tone === "warning") {
- return "border-amber-300/70 bg-amber-50/95 text-amber-950";
- }
- return "border-slate-200 bg-white/90 text-slate-900";
-}
-
function resolveDisplayName(params: {
isChinese: boolean;
name?: string | null;
@@ -65,8 +52,7 @@ export function GatewayHero({
const router = useRouter();
const user = useUserStore((state) => state.user);
const [prompt, setPrompt] = useState("");
- const { bootstrap, bootstrapError, bootstrapLoading, gatewayConfigured, sendPrompt, sendState } =
- useGatewayHero(defaults);
+ const { bootstrap, sendState } = useGatewayHero(defaults);
const displayName = resolveDisplayName({
isChinese,
@@ -74,38 +60,10 @@ export function GatewayHero({
username: user?.username,
email: user?.email,
});
- const model = buildHomeGatewayHeroViewModel({
- isChinese,
- displayName,
- bootstrap,
- bootstrapError,
- connected: gatewayConfigured && !bootstrapError,
- });
- const badgeClass =
- model.statusTone === "healthy"
- ? "bg-lime-400 text-lime-950 shadow-[0_0_30px_rgba(163,230,53,0.55)]"
- : model.statusTone === "warning"
- ? "bg-amber-300 text-amber-950"
- : "bg-slate-200 text-slate-700";
- const periodAccent =
- model.period === "morning"
- ? "from-lime-100/90 via-white to-sky-50"
- : model.period === "afternoon"
- ? "from-amber-50 via-white to-cyan-50"
- : model.period === "evening"
- ? "from-emerald-50 via-white to-slate-100"
- : "from-slate-100 via-white to-indigo-50";
- const responseText = sendState.responseText.trim();
+
const sessionKey =
sendState.activeSessionKey || bootstrap?.activeSessionKey || "";
- async function handleSend(): Promise {
- if (!prompt.trim()) {
- return;
- }
- await sendPrompt(prompt);
- }
-
function openWorkspace(): void {
const query = new URLSearchParams();
if (prompt.trim()) {
@@ -118,232 +76,194 @@ export function GatewayHero({
router.push(suffix ? `/xworkmate?${suffix}` : "/xworkmate");
}
- return (
-
-
-
-
-
-
-
-
-
- {model.panelLabel}
-
-
-
- {model.greeting}
-
-
- {model.headline}
-
-
- {model.summary}
-
-
-
+ function handleInputSubmit() {
+ if (!prompt.trim()) return;
+ openWorkspace();
+ }
-
-
- {model.statusTone === "healthy" ? "✓" : model.statusTone === "warning" ? "!" : "·"}
+ return (
+
+
+
+
+ {/* Header */}
+
+
+
+
+
+
+ {isChinese ? "早上好," : "Good morning, "}{displayName}
+
+
+
+
+ SYSTEM STATUS
+
+
+
+ OPTIMIZED
+
+
+
+
+ {/* 3 Top Cards */}
+
+ {/* Services Card */}
+
+
+ Services
+
+
+
+ Normal
-
-
- {isChinese ? "首屏状态" : "Hero Status"}
-
-
- {model.statusBadge}
-
-
- {model.statusDescription}
-
+
+ All 12 microservices active
-
-
-
-
-
+ {/* Clusters Card */}
+
+
+
+
+
+ 4/4
+
+
+ ONLINE
+
-
- {model.statusNodes.map((node) => (
-
- ))}
-
-
-
-
-
-
- {isChinese ? "最近会话" : "Recent Sessions"}
-
-
- {model.recentSessions.length > 0 ? (
- model.recentSessions.map((session) => (
-
- {session.derivedTitle ||
- session.displayName ||
- session.lastMessagePreview ||
- session.key}
-
- ))
- ) : (
-
- {isChinese
- ? "当前还没有可展示的会话摘要。"
- : "No recent session summary is available yet."}
-
- )}
-
-
-
-
-
-
- {isChinese ? "可用代理" : "Available Agents"}
-
-
- {model.featuredAgents.length > 0 ? (
- model.featuredAgents.map((agent) => (
-
-
- {agent.name}
-
- ))
- ) : (
-
- {isChinese
- ? "未从 Gateway 拉到代理摘要,先使用默认助手。"
- : "No agent summary was returned yet, so the default assistant remains available."}
-
- )}
-
-
+
+
-