菜单

前端应用

相关源文件

本文档涵盖了提供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

API客户端层

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

主要功能包括

  • 带事件历史保留的自动重连
  • 速率限制的消息处理,以防止UI阻塞
  • 乐观的用户消息处理
  • 与React Query集成以进行缓存无效化

来源: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所有语言在单个文件中

翻译键领域包括

  • STATUS$:WebSocket连接和系统状态消息
  • SETTINGS$:配置UI,包括MCP服务器设置
  • CHAT_INTERFACE$:聊天消息、输入占位符和交互状态
  • SECURITY$:风险级别和安全分析器消息
  • ACTION$:用户操作提示和建议

来源: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 集成提供实时更新。

状态管理类别:

存储类型目的示例
ReduxUI 状态和实时事件代理状态、浏览器快照、终端状态
React Query服务器数据和缓存设置、对话、文件更改
上下文横切关注点WebSocket 连接、认证
本地状态组件特定表单输入、模态框可见性

关键查询钩子:

数据流模式:

  • WebSocket 事件触发 Redux 更新和 React Query 缓存失效
  • 设置更改会立即使相关查询失效
  • 对话更改会重置本地组件状态
  • 错误处理通过上下文提供程序传播

来源: 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 数据管理:

开发工具:

  • TypeScript 保证类型安全和开发体验
  • ESLint 强制执行代码质量
  • Vite 提供快速开发构建和热模块替换
  • React DevTools 集成,用于调试状态和组件层级

来源: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