本文档涵盖了提供OpenHands用户界面的基于React的前端应用。前端处理用户交互、与后端的实时通信、设置管理以及国际化。有关后端API端点和服务器通信基础设施,请参见服务器API和通信。有关WebSocket的详细信息,请参见WebSocket通信。
该前端是使用TypeScript构建的现代化React应用,采用了分层架构,将API通信、状态管理和用户界面组件之间的关注点分离。
前端架构概览 前端采用组件化架构,UI组件、API通信和状态管理之间有清晰的分离。
来源:frontend/src/routes/conversation.tsx1-221 frontend/src/context/ws-client-provider.tsx1-382 frontend/src/api/open-hands.ts1-399
OpenHands类作为中心API客户端,为所有后端服务提供类型化的接口。它处理身份验证、请求头和会话范围内的操作。
OpenHands API客户端结构 API客户端为所有后端通信提供类型化的方法,并且具有会话范围内的操作,这些操作会自动包含适当的请求头和身份验证。
该类维护当前的会话上下文frontend/src/api/open-hands.ts21-39,并提供会话范围内的URL生成frontend/src/api/open-hands.ts44-51。主要方法包括:
| 方法类别 | 示例 | 目的 |
|---|---|---|
| 配置 | getModels()、getAgents()、getSecurityAnalyzers() | 检索可用选项 |
| 对话 | createConversation()、getConversation()、startConversation() | 管理对话生命周期 |
| 设置 | getSettings()、saveSettings() | 用户偏好和配置 |
| 开发工具 | getVSCodeUrl()、getWorkspaceZip() | 与开发环境集成 |
| Git 操作 | getGitChanges()、getGitChangeDiff() | 版本控制集成 |
来源:frontend/src/api/open-hands.ts20-399 frontend/src/hooks/query/use-settings.ts10-34
WsClientProvider 使用Socket.IO管理WebSocket连接,实现前端和后端之间的实时通信。它负责事件解析、错误恢复和维护连接状态。
WebSocket通信流程 WebSocket提供程序管理实时事件,并在发生文件操作时自动使相关缓存失效。
该提供程序实现了复杂的事件处理frontend/src/context/ws-client-provider.tsx169-261
主要功能包括
来源:frontend/src/context/ws-client-provider.tsx1-382 frontend/src/hooks/query/use-active-conversation.ts1-23
该前端实现了一个全面的国际化系统,支持16种语言,拥有超过500个翻译键,按功能领域进行组织。
国际化系统结构 i18n系统使用集中的翻译文件,并为类型安全生成TypeScript声明。
该系统提供
| 功能 | 实现 | 示例 |
|---|---|---|
| 类型安全 | 生成的I18nKey枚举 | I18nKey.HOME$LAUNCH_FROM_SCRATCH |
| 命名空间 | 域名-前缀键 | SETTINGS$MCP_CONFIGURATION |
| 回退 | 默认为英语 | 内置于react-i18next |
| 动态加载 | 每种语言的JSON | 所有语言在单个文件中 |
翻译键领域包括
来源:frontend/src/i18n/translation.json1-947 frontend/src/i18n/declaration.ts1-456
设置系统提供分层配置管理,包含客户端默认值、服务器持久化和应用程序的实时更新。
设置管理流程 设置从默认值流经服务器存储,并带有客户端验证和缓存。
设置系统支持
配置类别:
关键实现细节:
来源: frontend/src/services/settings.ts1-32 frontend/src/hooks/query/use-settings.ts1-82 frontend/src/hooks/mutation/use-save-settings.ts1-69 frontend/src/components/shared/modals/settings/settings-form.tsx1-135
前端提供了一套全面的 UI 组件,围绕对话管理、开发工具和用户设置进行组织。主界面采用了可调整面板的布局,并集成了聊天和工作区工具。
用户界面组件结构 UI 围绕一个中心化的对话界面进行组织,其中集成了开发工具和全面的设置管理。
核心界面组件:
开发工具集成:
交互功能:
来源: frontend/src/routes/conversation.tsx1-221 frontend/src/components/features/chat/action-suggestions.tsx1-83 frontend/src/components/features/controls/agent-status-bar.tsx1-117 frontend/src/components/features/browser/browser.tsx1-44
前端采用了混合状态管理方法,结合了用于 UI 状态的 Redux 和用于服务器状态的 React Query,提供了优化的缓存和实时更新。
状态管理架构 应用程序使用 Redux 管理 UI 状态,使用 React Query 管理服务器状态,并通过 WebSocket 集成提供实时更新。
状态管理类别:
| 存储类型 | 目的 | 示例 |
|---|---|---|
| Redux | UI 状态和实时事件 | 代理状态、浏览器快照、终端状态 |
| React Query | 服务器数据和缓存 | 设置、对话、文件更改 |
| 上下文 | 横切关注点 | WebSocket 连接、认证 |
| 本地状态 | 组件特定 | 表单输入、模态框可见性 |
关键查询钩子:
useSettings():管理用户配置,提供 404 默认值回退 frontend/src/hooks/query/use-settings.ts36-82useActiveConversation():跟踪当前对话,并自动重新获取 frontend/src/hooks/query/use-active-conversation.ts8-22useGetGitChanges():管理文件更改跟踪,具有乐观排序 frontend/src/hooks/query/use-get-git-changes.ts8-67useVSCodeUrl():处理 VSCode 集成 URL 生成 frontend/src/hooks/query/use-vscode-url.ts15-40数据流模式:
来源: frontend/src/hooks/query/use-settings.ts1-82 frontend/src/hooks/query/use-active-conversation.ts1-23 frontend/src/hooks/query/use-get-git-changes.ts1-67 frontend/src/context/ws-client-provider.tsx134-382
前端包含全面的测试工具、模拟服务和开发工具,以支持高效的开发工作流程和质量保证。
开发和测试架构 前端使用现代化的测试工具和全面的模拟,以实现可靠的开发和测试工作流程。
测试框架特性:
Mock 数据管理:
开发工具:
来源:frontend/src/mocks/handlers.ts1-342 frontend/__tests__/context/ws-client-provider.test.tsx1-98 frontend/__tests__/routes/settings.test.tsx1-163 frontend/__tests__/components/chat/action-suggestions.test.tsx1-132