OpenHands 源码解析 · 第 2 讲
OpenHands 源码解析 第 2 讲:V0 → V1 → Agent Canvas 演进路线 基于 dev 分支源码 · 2026-07-29 一、从 V0 到 V1:一次彻底的架构重写 OpenHands 经历了一次完整的架构重构。V0 的代码全部被标记为 DEPRECATED ,V1 是完全重写的新架构。 ⚠️ V0 已废弃 V0 文件全部是兼容包装器,内部直接 re-export V1 代码。计划 2026 年 4 月移除。 📄 openhands/server/app.py (第 1-15 行) # DEPRECATED: This module is deprecated and will be removed... # Please use openhands.app_server.app instead. from openhands.app_server.app import ( app, authentication_error_handler, combine_lifespans, mcp_app, ) __all__ = ['app', 'mcp_app', 'combine_lifespans', ...] 二、V0 vs V1 架构对比 V0 和 V1 的核心区别可以用一张表概括: 维度 V0(已废弃) V1(当前) 入口 server/app.py app_server/app.py 路由 单文件内联路由 12 个独立子路由 Agent 核心 内置 agent 逻辑 独立 SDK(openhands-sdk) 沙箱 基础容器管理 完整生命周期 + Spec 事件存储 内存 / 简单存储 事件溯源 JSON 文件 Agent 类型 单一 OpenHands Agent default / planning / ACP 前端 Monorepo 内嵌 独立 Agent Canvas 三、V1 入口与路由架构 V1 入口在 openhands/app_server/app.py ,86 行代码构建了一个完整的 FastAPI 应用: 📄 openhands/app_server/app.py (第 54-60 行) app = FastAPI( title='OpenHands', description='OpenHands: Code Less, Make More', version=get_version(), lifespan=combine_lifespans(*lifespans), routes=[Mount(path='/mcp', app=mcp_app)], ) # 挂载 V1 路由 app.include_router(v1_router.router) app.include_router(health_router) V1 路由组成 ( v1_router.py 第 24-37 行): 📄 openhands/app_server/v1_router.py (第 24-37 行) router = APIRouter(prefix='/api/v1') # 12 个子路由模块 router.include_router(event_router.router) # 事件系统 router.include_router(app_conversation_router.router) # 会话管理 router.include_router(pending_message_router) # 待发消息 router.include_router(sandbox_router.router) # 沙箱管理 router.include_router(sandbox_spec_router.router) # 沙箱规格 router.include_router(settings_router) # 设置管理 router.include_router(secrets_router) # 密钥管理 router.include_router(user_router.router) # 用户系统 router.include_router(skills_router.router) # 技能系…
阅读全文:OpenHands 源码解析 第 2 讲