Skip to content

计算资产

功能概述

计算资产(Assets)功能让你在项目中管理虚拟计算资源,包括桌面操作系统、Docker 容器和浏览器实例。你可以通过网页实时操控远程桌面或终端,并允许 AI Agent 对资产进行屏幕读取和键鼠操作。

计算资产支持两种来源:

来源说明
外部自备(External)连接你已有的机器或容器,需填写连接信息
平台托管(Managed)由平台自动创建和管理的云资源,凭证自动生成

三种资产类型:

类型说明连接协议
桌面 OSLinux/Windows/macOS 完整桌面环境VNC / RDP
Docker 容器轻量级容器环境SSH
浏览器Docker 容器中的浏览器实例VNC

当前阶段说明

  • 本文档描述的是当前可用的产品界面与操作方式
  • 资源平台阶段二已完成 阶段 C + D:后端引入统一 Workspace 抽象与 AssetOrchestrator
  • 页面中仍会显示“虚拟磁盘”文案;它现在代表 Workspace 的兼容展示层,当前主要由 Local Provider 承接
  • 阶段 E-G 尚未开始,因此不会在本期开放完整的云工作区路径或更大范围的信息架构重构

界面说明

计算资产页面位于项目编辑器内,采用侧边栏 + 主区域的双栏布局。

侧边栏

侧边栏分为两个区域:

  • 设备概览入口:点击回到概览视图
  • 分组折叠列表:按分组展示所有资产,每个分组显示资产数量和快捷创建按钮。点击资产项进入详情视图
  • 虚拟磁盘列表(仅 selfhosted):展示项目内的虚拟磁盘。该列表现在对应 Workspace compatibility layer;点击磁盘会直接跳转到 Storage 中对应的磁盘文件夹

每个资产项显示类型图标、名称和状态指示点:

  • 绿色:运行中
  • 灰色:已停止
  • 黄色:启动中 / 停止中 / 分配中
  • 红色:异常

概览视图

概览视图展示:

  • 统计卡片:按类型(桌面系统、Docker 容器、浏览器、总计)分别统计数量
  • 资产列表:展示所有资产的名称、类型、来源和当前状态
  • 空状态:无资产时显示创建引导

详情视图

选中资产后进入详情视图:

  • 顶部操作栏:显示资产名称、状态标签、AI 控制开关和操作下拉菜单
  • 桌面 Tab:远程桌面画面(桌面 OS 和浏览器类型的主视图)
  • 终端 Tab:终端画面(Docker 容器类型的主视图)
  • 虚拟磁盘 Tab(仅 selfhosted 托管资产):显示当前绑定磁盘、锁定状态、空间占用,并提示该绑定属于 Workspace compatibility layer;支持改绑、解绑和跳转到 Storage

AI 控制开关用于控制 AI Agent 是否有权限读取屏幕和操作键鼠。

创建视图

创建新资产的表单按以下顺序填写:

  1. 类型选择:Docker 容器 / 浏览器(桌面 OS 暂未开放)
  2. 镜像模板:根据类型选择内置镜像模板
  3. 资源来源(Provider):本地 Docker(默认)或云服务商。云服务商目前可浏览其区域和规格,但托管资产创建将在后续阶段开放(选中后会提示阶段 F 说明并禁用提交)
  4. 区域(Region):仅云服务商显示
  5. 计算规格(Spec):本地资产走平台内置规格;云资产走服务商发现的规格
  6. 名称、分组、描述:常规元信息
  7. 磁盘(selfhosted + 模板支持):可选绑定虚拟磁盘作为持久化工作区

资产详情页右上角"资源来源"面板会回显当前 Provider / Region / Spec,便于确认资产实际落到哪个资源池。

操作步骤

创建分组

  1. 在侧边栏中创建新分组(如「生产环境」「测试环境」)
  2. 分组用于组织和管理资产

添加外部自备资产

  1. 点击侧边栏中某个分组的「+」按钮,或在概览页面点击创建
  2. 来源选择「外部自备」
  3. 选择资产类型
  4. 填写名称、连接协议(VNC/RDP/SSH)、主机地址和端口
  5. 可选填写认证凭证
  6. 点击创建

连接资产

  1. 在侧边栏中点击目标资产进入详情视图
  2. 桌面类型资产默认显示「桌面」Tab,Docker 容器默认显示「终端」Tab
  3. 点击连接按钮建立远程连接
  4. 连接成功后即可在网页中操作远程桌面或终端

管理资产

通过详情视图顶部的操作下拉菜单,可以执行以下操作:

操作适用来源说明
启动平台托管启动已停止的资产
停止平台托管停止运行中的资产
重启平台托管重启资产
编辑连接外部自备修改连接信息
删除所有删除资产(有二次确认)

使用虚拟磁盘

  1. 在 Assets 侧边栏创建虚拟磁盘
  2. 创建托管资产时选择磁盘,或在详情页后续改绑
  3. 点击磁盘名称或「在存储中打开」,跳转到 Storage 查看磁盘文件
  4. 资产运行时磁盘会被锁定。当前实现由统一 workspace lock 语义驱动,Storage 中仍可浏览,但写操作会被禁用

相关链接

  • Block 系统 - 了解如何在工作流中调用计算资产
  • 应用发布 - 了解如何将包含资产操作的工作流发布为 API

阶段三(E+F)更新(2026-04-18)

创建流新顺序

资产创建采用统一资源平台心智:

  1. 类型(Docker / Browser)
  2. 镜像模板
  3. Provider(本地 Docker / 云服务商)
  4. Region(仅 cloud 时显示)
  5. Compute Spec
  6. Workspace(选填)
  7. 名称 / 分组 / 描述

前端会按 providerId × templateId × workspaceId × regionId × specId 实时查询 capability matrix,不支持的组合直接在 submit 前 alert 解释原因;不会让用户等到启动后才失败。

Asset Detail 资源来源卡

详情页顶部资源来源卡现为 4 列:Provider / Region / Spec / Workspace;Workspace 列含 lock tag + "在 Storage 中打开"按钮,直接跳转到对应目录。

启动 / 重启受 Matrix 约束

如果资产绑定的组合 matrix 判定为不支持(例如管理员删除了 region 配置),start / restart 按钮会禁用,顶部 alert 显示 reasonCode 对应的消息;stop 不受约束。

阶段三非目标

  • 不做云 Workspace hydrate/sync(阿里云资产必须 workspace=null)
  • 不做旧字段迁移
  • relay 未接入主链路(MVP 依赖公网 IP + 本地 guacd)

阶段四(G)更新(2026-04-19)

生命周期可观测性

后端新增统一结构化事件 logger(apps/backend/src/services/lifecycle-events.ts):

  • 10 个生命周期节点统一走 emitLifecycleEvent(...),输出单行 JSON(前缀 [asset-lifecycle]
  • 同一次 start/stop/restart 共享 correlationId,便于 grep '[asset-lifecycle]' | jq 'select(.correlationId=="xxx")' 串事件链
  • 脱敏规则:URL / headers / token 字段自动替换为 [redacted]
  • ENV DISABLE_ASSET_LIFECYCLE_LOGS=1 可静默

完整契约与事件名表见仓库内 docs/features/assets/observability.md

Admin 诊断端点(仅 site:admin,selfhosted only)

端点用途
GET /admin/assets/diagnostics/orphan-workspace-locks持锁但持锁资产已不活跃
GET /admin/assets/diagnostics/final-sync-failures当前残留的 sync/release 失败代理信号
GET /admin/assets/diagnostics/host-path-residue宿主机目录未清干净的 workspace
GET /admin/assets/diagnostics/runtime-residueprovider_resource_id 未清的停止/error 资产

支持 ?limit=50&offset=0(默认 50,上限 200)。响应体统一 { items, total, limit, offset, notice }。 API 详情见 docs-site/docs/api/admin-assets-diagnostics.md

兼容层边界

阶段 G 不删任何旧 DB 列 / 旧路由。旧字段 (cloud_* / disk_id) 仍保留作为兼容层,新代码 必须经由 mapAssetRowToDTO 消费规范字段(provider_id/region_id/spec_id/workspace)。 Sunset 条件见仓库内 docs/features/assets/migration-and-compatibility.md

AI Workflow Editor