From 0eba6ea831c915ca92e4c501785951dc00538a41 Mon Sep 17 00:00:00 2001 From: jinliyl <6469360+jinliyl@users.noreply.github.com> Date: Sat, 5 Sep 2026 00:53:32 +0800 Subject: [PATCH] feat(docs): redesign homepage and add traffic dashboard (#522) * feat(docs): redesign homepage and add traffic dashboard * feat(docs): publish readmes as project overview --- docs/.vitepress/config.mts | 138 ++++-- docs/.vitepress/theme/HomePage.vue | 407 ++++++++++++++++++ docs/.vitepress/theme/TrafficPage.vue | 52 +++ docs/.vitepress/theme/custom.css | 34 ++ docs/.vitepress/theme/index.ts | 6 + docs/en/index.md | 37 +- docs/en/traffic.md | 8 + docs/zh/index.md | 37 +- docs/zh/traffic.md | 8 + github-pages/scripts/generate-content.mjs | 22 + github-pages/scripts/verify-build.mjs | 13 + github-pages/tests/generated-content.test.mjs | 14 + 12 files changed, 665 insertions(+), 111 deletions(-) create mode 100644 docs/.vitepress/theme/HomePage.vue create mode 100644 docs/.vitepress/theme/TrafficPage.vue create mode 100644 docs/en/traffic.md create mode 100644 docs/zh/traffic.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 697aea53..9e7605ce 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -104,23 +104,24 @@ const legacyRedirectScript = `(() => { function nav(language: "zh" | "en"): DefaultTheme.NavItem[] { const zh = language === "zh"; return [ - { text: zh ? "开始使用" : "Get Started", link: `/${language}/quick_start` }, - { text: zh ? "核心概念" : "Concepts", link: `/${language}/memory_as_file` }, - { text: zh ? "指南" : "Guides", link: `/${language}/auto_memory` }, + { text: zh ? "首页" : "Home", link: `/${language}/` }, + { text: zh ? "文档" : "Docs", link: `/${language}/quick_start` }, { text: zh ? "集成" : "Integrations", link: `/${language}/integrations` }, - { text: zh ? "API 参考" : "API Reference", link: `/${language}/reference/cli` }, + { text: zh ? "插件" : "Plugins", link: `/${language}/plugin_management` }, + { text: zh ? "评测" : "Benchmarks", link: `/${language}/benchmarks/longmemeval` }, + { text: zh ? "博客" : "Blog", link: `/${language}/reme-blog` }, { text: zh ? "常见问题" : "FAQ", link: `/${language}/faq` }, ]; } -function sidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { +function docsSidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { const zh = language === "zh"; return [ { text: zh ? "开始使用" : "Get Started", collapsed: false, items: [ - { text: zh ? "项目介绍" : "Introduction", link: `/${language}/` }, + { text: zh ? "项目介绍" : "Introduction", link: `/${language}/overview` }, { text: zh ? "快速开始" : "Quick Start", link: `/${language}/quick_start` }, { text: zh ? "基础配置" : "Configuration", link: `/${language}/configuration` }, { text: zh ? "服务与部署" : "Services and Deployment", link: `/${language}/services` }, @@ -147,45 +148,13 @@ function sidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { ], }, { - text: zh ? "Agent 集成" : "Agent Integrations", - collapsed: true, - items: [ - { text: zh ? "集成总览" : "Overview", link: `/${language}/integrations` }, - { text: "Claude Code", link: `/${language}/integrations/claude-code` }, - { text: "Hermes Agent", link: `/${language}/integrations/hermes` }, - { text: zh ? "TypeScript 客户端" : "TypeScript Client", link: `/${language}/integrations/typescript` }, - { text: "DeepSeek Harness", link: `/${language}/integrations/dsh` }, - { text: "OpenClaw", link: `/${language}/integrations/openclaw` }, - ], - }, - { - text: zh ? "工作区与插件" : "Workspace and Plugins", - collapsed: true, - items: [ - { text: "ReMe Studio", link: `/${language}/workspace/studio` }, - { text: zh ? "插件管理" : "Plugin Management", link: `/${language}/plugin_management` }, - { text: zh ? "插件开发" : "Plugin Development", link: `/${language}/plugin_development` }, - { text: zh ? "每日论文" : "Daily Paper", link: `/${language}/plugins/daily-paper` }, - { text: "Auto Fin", link: `/${language}/plugins/auto-fin` }, - { text: "LME", link: `/${language}/plugins/lme` }, - { text: "BEAM", link: `/${language}/plugins/beam` }, - ], - }, - { - text: zh ? "API 参考" : "API Reference", + text: zh ? "API 与运维" : "API and Operations", collapsed: true, items: [ { text: "CLI", link: `/${language}/reference/cli` }, { text: zh ? "Job API" : "Job API", link: `/${language}/reference/jobs` }, { text: "HTTP / MCP", link: `/${language}/services#http-api` }, - ], - }, - { - text: zh ? "运维" : "Operations", - collapsed: true, - items: [ { text: zh ? "诊断、备份与恢复" : "Diagnostics, Backup, and Recovery", link: `/${language}/operations` }, - { text: zh ? "常见问题" : "FAQ", link: `/${language}/faq` }, ], }, { @@ -196,19 +165,88 @@ function sidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { { text: zh ? "开源与贡献" : "Contributing", link: `/${language}/contributing` }, ], }, + ]; +} + +function integrationsSidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { + const zh = language === "zh"; + return [{ + text: zh ? "Agent 集成" : "Agent Integrations", + collapsed: false, + items: [ + { text: zh ? "集成总览" : "Overview", link: `/${language}/integrations` }, + { text: "Claude Code", link: `/${language}/integrations/claude-code` }, + { text: "Hermes Agent", link: `/${language}/integrations/hermes` }, + { text: zh ? "TypeScript 客户端" : "TypeScript Client", link: `/${language}/integrations/typescript` }, + { text: "DeepSeek Harness", link: `/${language}/integrations/dsh` }, + { text: "OpenClaw", link: `/${language}/integrations/openclaw` }, + ], + }]; +} + +function pluginsSidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { + const zh = language === "zh"; + return [ { - text: zh ? "评测" : "Benchmarks", - collapsed: true, + text: zh ? "工作区" : "Workspace", + collapsed: false, + items: [{ text: "ReMe Studio", link: `/${language}/workspace/studio` }], + }, + { + text: zh ? "插件" : "Plugins", + collapsed: false, items: [ - { text: "BEAM", link: `/${language}/benchmarks/beam` }, - { text: "LongMemEval", link: `/${language}/benchmarks/longmemeval` }, - { text: "π-Bench", link: `/${language}/benchmarks/pibench` }, - { text: "Tool Memory / ExpG", link: `/${language}/benchmarks/toolmemory` }, + { text: zh ? "插件管理" : "Plugin Management", link: `/${language}/plugin_management` }, + { text: zh ? "插件开发" : "Plugin Development", link: `/${language}/plugin_development` }, + { text: zh ? "每日论文" : "Daily Paper", link: `/${language}/plugins/daily-paper` }, + { text: "Auto Fin", link: `/${language}/plugins/auto-fin` }, + { text: "LME", link: `/${language}/plugins/lme` }, + { text: "BEAM", link: `/${language}/plugins/beam` }, ], }, ]; } +function benchmarksSidebar(language: "zh" | "en"): DefaultTheme.SidebarItem[] { + const zh = language === "zh"; + return [{ + text: zh ? "记忆能力评测" : "Memory Benchmarks", + collapsed: false, + items: [ + { text: "LongMemEval", link: `/${language}/benchmarks/longmemeval` }, + { text: "BEAM", link: `/${language}/benchmarks/beam` }, + { text: "π-Bench", link: `/${language}/benchmarks/pibench` }, + { text: "Tool Memory / ExpG", link: `/${language}/benchmarks/toolmemory` }, + ], + }]; +} + +function singlePageSidebar(language: "zh" | "en", page: "blog" | "faq"): DefaultTheme.SidebarItem[] { + const zh = language === "zh"; + return [{ + text: page === "blog" ? (zh ? "ReMe 博客" : "ReMe Blog") : (zh ? "帮助" : "Help"), + collapsed: false, + items: [{ + text: page === "blog" ? (zh ? "产品故事" : "Product Story") : (zh ? "常见问题" : "Frequently Asked Questions"), + link: `/${language}/${page === "blog" ? "reme-blog" : "faq"}`, + }], + }]; +} + +function sidebars(language: "zh" | "en"): DefaultTheme.SidebarMulti { + return { + [`/${language}/integrations`]: integrationsSidebar(language), + [`/${language}/workspace/`]: pluginsSidebar(language), + [`/${language}/plugins/`]: pluginsSidebar(language), + [`/${language}/plugin_management`]: pluginsSidebar(language), + [`/${language}/plugin_development`]: pluginsSidebar(language), + [`/${language}/benchmarks/`]: benchmarksSidebar(language), + [`/${language}/reme-blog`]: singlePageSidebar(language, "blog"), + [`/${language}/faq`]: singlePageSidebar(language, "faq"), + [`/${language}/`]: docsSidebar(language), + }; +} + function configureRepositoryLinks(md: any) { for (const ruleName of ["link_open", "image"] as const) { const original = md.renderer.rules[ruleName]; @@ -258,6 +296,12 @@ export default defineConfig({ head: [ ["link", { rel: "icon", type: "image/svg+xml", href: `${base}reme-icon.svg` }], ["meta", { name: "theme-color", content: "#087f6a" }], + ["script", { + defer: "", + src: "https://cloud.umami.is/script.js", + "data-website-id": "8cafe9df-d883-4046-b5e9-36dfd21a4884", + "data-domains": "reme.agentscope.io", + }], ["script", {}, legacyRedirectScript], ], markdown: { @@ -320,7 +364,7 @@ export default defineConfig({ link: "/zh/", themeConfig: { nav: nav("zh"), - sidebar: { "/zh/": sidebar("zh") }, + sidebar: sidebars("zh"), outline: { label: "页面导航", level: [2, 3] }, docFooter: { prev: "上一页", next: "下一页" }, darkModeSwitchLabel: "外观", @@ -335,7 +379,7 @@ export default defineConfig({ link: "/en/", themeConfig: { nav: nav("en"), - sidebar: { "/en/": sidebar("en") }, + sidebar: sidebars("en"), outline: { label: "On this page", level: [2, 3] }, docFooter: { prev: "Previous page", next: "Next page" }, }, diff --git a/docs/.vitepress/theme/HomePage.vue b/docs/.vitepress/theme/HomePage.vue new file mode 100644 index 00000000..08ea6bb3 --- /dev/null +++ b/docs/.vitepress/theme/HomePage.vue @@ -0,0 +1,407 @@ + + +