docs/development/basic/folder-structure.zh-CN.mdx
LobeHub 采用 Monorepo 架构(@lobechat/ 命名空间),
顶层目录结构如下:
lobehub/
├── apps/
│ └── desktop/ # Electron 桌面应用
├── packages/ # 共享包(@lobechat/*)
│ ├── agent-runtime/ # Agent 运行时
│ ├── database/ # 数据库 schemas、models、repositories
│ ├── model-runtime/ # 模型运行时(各 AI 提供商适配)
│ ├── builtin-tool-*/ # 内置工具包
│ ├── business/ # Cloud 业务插槽 packages
│ ├── context-engine/ # 上下文引擎
│ ├── conversation-flow/ # 会话流程
│ ├── editor-runtime/ # 编辑器运行时
│ ├── file-loaders/ # 文件加载器
│ ├── prompts/ # Prompt 模板
│ └── ... # 更多共享包
├── src/ # 主应用源码(见下方详细说明)
├── locales/ # i18n 翻译文件(zh-CN、en-US 等)
├── e2e/ # E2E 测试(Cucumber + Playwright)
└── docs/ # 文档
src/
├── app/ # Next.js App Router(路由组和 API 路由)
├── business/ # Cloud 版专用业务逻辑(客户端/服务端)
├── components/ # 可复用的 UI 组件
├── config/ # 应用配置(客户端与服务端环境变量)
├── const/ # 应用常量和枚举
├── envs/ # 环境变量定义和校验
├── features/ # 业务功能模块(Agent 设置、插件开发弹窗等)
├── helpers/ # 工具辅助函数
├── hooks/ # 全应用复用的自定义 Hooks
├── layout/ # 全局布局组件(AuthProvider、GlobalProvider)
├── libs/ # 第三方集成(better-auth、OIDC、tRPC、MCP 等)
├── locales/ # 国际化默认语言文件(英文)
├── server/ # 服务端模块
│ ├── featureFlags/ # Feature Flags
│ ├── globalConfig/ # 全局配置
│ ├── modules/ # 服务端模块(不访问数据库)
│ ├── routers/ # tRPC 路由(async、lambda、mobile、tools)
│ └── services/ # 服务端服务(可访问数据库)
├── services/ # 客户端服务接口
├── store/ # zustand 状态管理
├── styles/ # 全局样式和 CSS-in-JS 配置
├── tools/ # 内置工具(artifacts、inspectors 等)
├── types/ # TypeScript 类型定义
├── utils/ # 通用工具函数
├── auth.ts # 认证配置(Better Auth)
├── instrumentation.ts # 应用监控和遥测设置
└── proxy.ts # Next.js 中间件代理配置
app 目录遵循 Next.js App Router 约定,
使用路由组
来组织后端服务、平台变体和应用路由:
app/
├── (backend)/ # 后端 API 路由和服务
│ ├── api/ # REST API 端点(auth、webhooks)
│ ├── f/ # 文件服务
│ ├── market/ # 市场服务
│ ├── middleware/ # 请求中间件
│ ├── oidc/ # OpenID Connect 路由
│ ├── trpc/ # tRPC API 端点
│ │ ├── async/ # 异步 tRPC 路由
│ │ ├── desktop/ # 桌面端 tRPC 路由
│ │ ├── lambda/ # Lambda tRPC 路由
│ │ └── tools/ # 工具 tRPC 路由
│ └── webapi/ # Web API 端点(chat、models、tts 等)
├── [variants]/ # 平台和设备变体
│ ├── (auth)/ # 身份验证页面(login、signup)
│ ├── (desktop)/ # 桌面端专用路由
│ ├── (main)/ # 主应用路由(SPA)
│ │ ├── _layout/ # 布局组件
│ │ ├── agent/ # Agent 页面
│ │ ├── home/ # 首页
│ │ ├── image/ # 图像生成
│ │ ├── memory/ # 记忆管理
│ │ ├── resource/ # 资源管理
│ │ └── settings/ # 应用设置
│ ├── (mobile)/ # 移动端专用路由
│ ├── onboarding/ # 新用户引导
│ ├── router/ # SPA 路由配置
│ └── share/ # 分享页面
├── manifest.ts # PWA 清单
├── robots.tsx # Robots.txt 生成
├── sitemap.tsx # 站点地图生成
└── sw.ts # Service Worker
路由组:
(backend) — 所有服务端 API 路由、中间件和后端服务[variants] — 处理不同平台变体的动态路由组(main) — 主应用 SPA,使用 React Router DOM平台组织:
(desktop)/ 下(mobile)/ 下_layout/ 目录中API 架构:
(backend)/api/ 和 (backend)/webapi/src/server/routers/):按运行时分组
lambda/ — 主要业务路由(agent、session、message、
topic、file、knowledge、settings 等)async/ — 耗时异步操作(文件处理、图像生成、RAG 评估)tools/ — 工具调用(search、MCP、market、klavis)mobile/ — 移动端专用路由数据流:
以一个典型的用户操作(如更新 Agent 配置)为例,数据在各层之间的流转:
React UI (src/features/, src/app/)
│ 用户交互触发事件
▼
Store Actions (src/store/)
│ zustand action 更新本地状态,调用 service
▼
Client Service (src/services/)
│ 封装 tRPC 客户端调用,处理请求参数
▼
tRPC Router (src/server/routers/lambda/)
│ 校验输入(zod),路由到对应 service
▼
Server Service (src/server/services/)
│ 执行业务逻辑,调用 DB model
▼
DB Model (packages/database/src/models/)
│ 封装 Drizzle ORM 查询
▼
PostgreSQL
读取数据的流程方向相反:UI 通过 store selector 消费数据,store 通过 SWR + tRPC query 从后端拉取。
项目采用混合路由: Next.js App Router 处理静态页面(如认证页), React Router DOM 承载主应用 SPA。
入口:src/app/[variants]/page.tsx
根据设备类型分发到桌面端或移动端路由。
关键配置文件:
src/app/[variants]/router/desktopRouter.config.tsxsrc/app/[variants]/(mobile)/router/mobileRouter.config.tsxsrc/utils/router.tsx桌面端 SPA 路由(React Router DOM):
/ # 首页
/agent/:aid # Agent 会话
/agent/:aid/profile # Agent 详情
/agent/:aid/cron/:cronId # 定时任务详情
/group/:gid # 群组会话
/group/:gid/profile # 群组详情
/community # 社区发现(agent、model、provider、mcp)
/community/agent/:slug # Agent 详情页
/community/model/:slug # 模型详情页
/community/provider/:slug # 提供商详情页
/community/mcp/:slug # MCP 详情页
/resource # 资源管理
/resource/library/:id # 知识库详情
/settings/:tab # 设置(profile、provider 等)
/settings/provider/:id # 模型提供商配置
/memory # 记忆管理
/image # 图像生成
/page/:id # 页面详情
/share/t/:id # 分享话题
/onboarding # 新用户引导
移动端 SPA 路由(React Router DOM):
/ # 首页
/agent/:aid # Agent 会话
/community # 社区发现
/settings # 设置首页
/settings/:tab # 设置详情
/settings/provider/:id # 模型提供商配置
/me # 个人中心
/me/profile # 个人资料
/me/settings # 个人设置
/share/t/:id # 分享话题
/onboarding # 新用户引导