docs: define HWLAB cloud console rewrite
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
# R1 任务上下文:HWLAB v0.3 非 Workbench 页面全量重写
|
||||
|
||||
## 1. 用户目标
|
||||
|
||||
- 全量重写 HWLAB v0.3 除 Workbench 主工作流外的 Cloud Web 页面:
|
||||
- 不在旧页面上继续叠加局部美化和兼容层。
|
||||
- MDTODO 也可重写实现,但保留已经成熟的布局设计和工作流语义。
|
||||
- 后端能力不足时可以补强,并按明确职责合理拆分微服务。
|
||||
- 视觉与交互方向:
|
||||
- 工业风、高信息密度和稳定工作界面。
|
||||
- 通过渐进披露优先展示名称、身份、主状态、关键能力、主要 blocker 和高频操作。
|
||||
- 详情、诊断、日志、原始 JSON、配置和低频操作进入展开区、Inspector、Drawer 或 Dialog。
|
||||
- 不做营销式 hero、装饰性指标墙或以裸 JSON 代替产品界面。
|
||||
- 通用能力优先:
|
||||
- 先抽取表格、卡片、弹窗、抽屉、日志、Markdown、JSON、状态、异步反馈和有界工作区等模块。
|
||||
- 承载实体集合的页面统一支持图标卡片和列表/表格切换。
|
||||
- 不适合实体集合的页面提供等价的紧凑/舒适密度或内容显示方式切换,避免制造无意义图标视图。
|
||||
- 视图、筛选、排序、分页、选中对象和详情标签应通过稳定 URL 恢复。
|
||||
- HWPOD 重点:
|
||||
- 设备页使用带克制状态动效的电路板图标卡片,并提供高密度列表模式。
|
||||
- HWPOD 页面至少拆为“设备资源”“HWPOD Node”“节点接入”三个可深链子标签。
|
||||
- Node 页面管理已连接节点,并明确展示每个 node 下挂载的零到多个 HWPOD。
|
||||
- 接入页允许从网页下载 Python 单文件 `hwlab-node.py`,展示版本、SHA-256、安装条件、配置步骤和连接验证。
|
||||
|
||||
## 2. OA SPEC 战略对齐
|
||||
|
||||
- 战略来源:
|
||||
- [PJ2026-01 HWLAB 总规格](../../../../project-management/PJ2026-01/specs/PJ2026-01-HWLAB.md)。
|
||||
- [HWLAB Cloud 阶段规格](../../../../project-management/PJ2026-01/specs/stage-cloud-spec-20260601.md)。
|
||||
- [PJ2026-0104 客户端](../../../../project-management/PJ2026-01/specs/PJ2026-0104-client.md)。
|
||||
- [PJ2026-0101 硬件池](../../../../project-management/PJ2026-01/specs/PJ2026-0101-hardware-pool.md)。
|
||||
- [PJ2026-0105 用户管理](../../../../project-management/PJ2026-01/specs/PJ2026-0105-user-management.md)。
|
||||
- 最终目标判断:
|
||||
- 页面重写的目的不是孤立美化,而是把真实硬件资源、Agent 执行、Harness/RL 事实、多用户协同和运营管理投影成一致、可理解、可操作的云端入口。
|
||||
- Cloud 阶段要求从“单用户本地验证”走向“多人多端云端开箱即用”,因此页面主路径应优先解决项目协同、任务继续操作、硬件接入、HWPOD 可用性、用户/组织上下文和可行动 blocker。
|
||||
- HWPOD 页面必须表达 target device、workspace、debug probe 和 io probe 四要素,以及 node、能力、占用、操作结果和原始硬件事实,不能把动效电路板做成与真实状态无关的装饰。
|
||||
- Web、CLI 和 HTTP API 必须共享任务、权限、错误和结果语义;前端不得通过字段猜测、名称去重或跨接口临时拼装生成业务真相。
|
||||
- 每个页面组必须绑定唯一主责 L1/L2 和原入口验收,避免落入 L0 明确排除的“孤立工具美化”。
|
||||
- SPEC-first:
|
||||
- 全站信息架构、跨领域 API、长期数据模型或微服务边界发生稳定变化时,先确认或修订对应 OA SPEC。
|
||||
- P0 规格应补齐主责编号、系统边界、目标架构图、数据流图、关键时序图、原子需求和验收入口。
|
||||
- 实现文件按项目规则引用确认后的 SPEC 编号和实现版本。
|
||||
|
||||
## 3. 当前实现事实
|
||||
|
||||
- 权威源码与快照:
|
||||
- HWLAB v0.3 Web 位于 NC01 固定 workspace 的 `web/hwlab-cloud-web`。
|
||||
- 调查快照 HEAD 为 `220e7897e15f5e48e6e94ec144cbcfdefc509431`;正式执行前必须从当前 `origin/v0.3` 基线重新盘点。
|
||||
- UniDesk 本地 `src/components/frontend/src/hwlab.tsx` 只是硬编码外部地址的跳转壳,不是 HWLAB v0.3 页面源码。
|
||||
- 当前路由族:
|
||||
- 应用壳与认证:登录、注册、404。
|
||||
- 项目:Projects、MDTODO。
|
||||
- 用户:Dashboard、API Keys、Usage、Billing、Settings、Help。
|
||||
- 管理:Access、Secrets、External Secret、Users、Admin Billing、HWPOD、Provider Profiles。
|
||||
- 系统与工具:Performance、Skills、Gate、OpenCode 外壳。
|
||||
- `/workbench*` 主工作流不在本任务内重写。
|
||||
- 当前通用组件只有基础版本:
|
||||
- `DataTable` 只有行列和 slot,没有统一排序、筛选、选择、列配置、服务端分页、密度或窗口化。
|
||||
- `BaseDialog` 未完整处理初始焦点、焦点圈定和关闭后恢复。
|
||||
- Log、Markdown、JSON、状态、blocker 和异步刷新仍有页面私有实现。
|
||||
- `workbench.css` 混合 Workbench 与普通页面样式,已经超过 3000 行治理边界。
|
||||
- 大量 DTO 仍是 `Record<string, unknown>`,部分页面猜测多种字段形态。
|
||||
- 当前 HWPOD 页面缺陷:
|
||||
- 把 WebSocket node、spec 和虚构 group 扁平混合成同一种行,丢失一 node 对多 HWPOD 的显式拓扑。
|
||||
- 混淆 service ready、node online 和 HWPOD available 三种状态。
|
||||
- 没有 node 详情、挂载设备、版本、in-flight、能力差异、安装阶段或接入引导。
|
||||
- 当前 HWPOD 后端已有可复用能力:
|
||||
- `GET /v1/hwpod/specs` 返回 HWPOD spec;首屏不应默认 `probe=1` 全量探测。
|
||||
- `GET /v1/hwpod-node-ops` 返回在线 node、capabilities、心跳、最近诊断和全局 pending。
|
||||
- `POST /v1/hwpod-node-ops` 承载受控 node 操作。
|
||||
- `GET /v1/hwlab-node/update` 返回版本、下载 URL、SHA 和发布说明。
|
||||
- `GET /v1/hwlab-node/download/hwlab-node.py` 提供 Python 单文件下载。
|
||||
- `/v1/hwpod-node/ws` 承载节点主动出站连接。
|
||||
- 当前 HWPOD 后端缺口:
|
||||
- 声明但离线的 node、在线但未挂 spec 的 node 与 HWPOD 的统一拓扑。
|
||||
- 单 node 的 in-flight、并发上限、busy、安装/注册/workspace/HWPOD readiness 阶段。
|
||||
- declared 与 actual capability mismatch 分类。
|
||||
- 持久化且分页的 operation result、诊断和日志。
|
||||
- 有界列表/详情 DTO;当前 spec discovery 会携带完整 document。
|
||||
- WebSocket registry 当前在单副本 Cloud API 内存中,不是持久化 HWPOD 服务事实。
|
||||
|
||||
## 4. 目标产品与信息架构
|
||||
|
||||
- 全站应用壳:
|
||||
- 导航按用户工作流组织,不按后端服务名堆砌。
|
||||
- 保留现有 `navId`/ACL、同源 HttpOnly 会话和安全 redirect,变更时原子迁移。
|
||||
- 桌面、紧凑桌面和移动端都有明确导航与内容滚动所有者。
|
||||
- Dashboard 成为用户/组织范围的继续工作入口,聚合项目、任务、HWPOD、额度和主要异常,不在浏览器并发拼装领域事实。
|
||||
- HWPOD:
|
||||
- “设备资源”展示 HWPOD 四要素、node、能力、可用/占用状态、主要 blocker 和最近 operation。
|
||||
- “HWPOD Node”展示 nodeId、平台、版本、首见/末见、心跳、能力、in-flight、诊断和挂载 HWPOD 子集合。
|
||||
- “节点接入”展示下载、校验、安装、配置和分阶段 readiness;不得把下载完成或 WebSocket connected 冒充 HWPOD ready。
|
||||
- Projects 与 MDTODO:
|
||||
- Projects 提供集合、状态/来源筛选、项目详情、任务活动和 blocker 深链。
|
||||
- MDTODO 保留有界三栏、Rxx 树→正文→报告层级、Source/File 工具栏、inline edit、报告关闭/调整/全屏、RESTful 深链和公共 Workbench launch。
|
||||
- MDTODO 重写后不得 import Workbench 私有 store;只能通过公共 Project Management 和 Workbench Launch API 联动。
|
||||
- 用户与协同:
|
||||
- 用户入口围绕账户、组织、组织项目/工作台、API key、额度、usage、账单和偏好组织。
|
||||
- 页面不虚构未落地的支付、scope、轮换、跨设备同步或组织能力;需要时先补业务域 SPEC/API。
|
||||
- 管理与系统:
|
||||
- Users、Access、Secrets、Billing、Provider Profiles 使用集合→Inspector/详情→低频 Dialog 的一致交互。
|
||||
- Secrets 继续只披露对象、key、presence、fingerprint 和摘要,保留 dry-run/plan 边界。
|
||||
- Performance、Gate、Skills 和 OpenCode 外壳按“状态→问题→证据→动作”渐进披露,不把原始日志或 iframe 错误直接铺满页面。
|
||||
|
||||
## 5. 通用前端能力
|
||||
|
||||
- Foundation:
|
||||
- 工业风 tokens、字体、间距、边框、状态色、阴影、动效和 reduced-motion。
|
||||
- Button、IconButton、Field、Select、Chip、Tooltip、StatusBadge 和紧凑 MetricStrip。
|
||||
- Layout:
|
||||
- AppShell、PageHeader、PageCommandBar、StatusStrip、SectionFrame、InspectorDrawer 和 BoundedWorkspace。
|
||||
- 主区域内部滚动,避免 document 级长页和外层横向溢出。
|
||||
- Collections:
|
||||
- `DataGrid<T>`、`VirtualList<T>` 和 `ResourceCollection<T>`。
|
||||
- 图标卡片与列表/表格共享同一数据源、筛选、排序、选择和详情合同。
|
||||
- 支持 sticky header、列显隐、键盘选择、服务端 cursor pagination 和大集合窗口化。
|
||||
- Overlays:
|
||||
- Dialog、Drawer、Popover 和 ConfirmDialog 统一 Portal、Esc、focus trap、焦点恢复、scroll lock、busy 和 ARIA。
|
||||
- Content:
|
||||
- Log、Markdown、JSON、Text 和 Trace Viewer 统一搜索、复制、换行、行号、下载和全屏能力。
|
||||
- 日志支持 follow/pause 和跳底;JSON 默认折叠;Markdown 使用成熟 parser 与 sanitizer。
|
||||
- Feedback:
|
||||
- 统一 initial-loading、refreshing、partial、empty、error 和 ready。
|
||||
- 后台刷新保留上一份成功数据;错误默认给出可理解原因,把 code/requestId/traceId 放入详情。
|
||||
- Routing:
|
||||
- 实体身份和选择进入 REST path。
|
||||
- `view`、`density`、`q`、`filter`、`sort`、`cursor` 和详情标签进入 query。
|
||||
- localStorage 只能保存纯显示偏好,不能成为实体、权限或业务状态 authority。
|
||||
|
||||
## 6. 后端与微服务边界
|
||||
|
||||
- 基本原则:
|
||||
- 页面需要聚合显示时优先补 typed BFF/read model,不让前端跨多个服务猜测关键事实。
|
||||
- 只有独立数据所有权、生命周期、伸缩/连接故障域或权限边界成立时才拆微服务。
|
||||
- Cloud API 保持同源鉴权、路由、错误和 correlation 映射,不重新拥有各业务域真相。
|
||||
- 既有职责必须保留:
|
||||
- 项目与 MDTODO 继续由独立 `hwlab-project-management` 服务拥有。
|
||||
- 用户、组织、权限、额度、usage 和 billing 继续由用户管理域拥有。
|
||||
- HWPOD spec、资源、租约、路由和 operation result 归 HWPOD 服务域。
|
||||
- HWPOD Node 的心跳、能力、adapter 执行和原始硬件事实归 AI 网关域。
|
||||
- HWPOD 候选拆分:
|
||||
- 优先评估从 Cloud API 抽取一个 `hwlab-hwpod-service`,统一拥有 spec/registry 投影、node connection、拓扑、operation state/result 和诊断摘要。
|
||||
- Connection gateway 先作为该服务内部模块;只有连接规模和 churn 构成独立故障域时再拆。
|
||||
- Python 文件可继续由版本化静态 artifact 路径交付,不单独创建安装服务。
|
||||
- 用户自助 claim/registration 会引入新的身份与授权合同,未经单独 SPEC 不在本任务内发明。
|
||||
|
||||
## 7. 交付顺序
|
||||
|
||||
1. OA SPEC、页面/实体/用户旅程、API/DTO、ACL、深链和验收矩阵对齐。
|
||||
2. 工业设计系统、应用壳、通用集合、Overlay、Viewer、Async 和路由状态模块。
|
||||
3. typed API/read model 与必要的 HWPOD Service、项目、用户管理后端补强。
|
||||
4. HWPOD Devices、Nodes 与 Onboarding 重点切片。
|
||||
5. Dashboard、Projects 和 MDTODO 主工作流。
|
||||
6. 用户/组织、API key、usage、billing 和偏好页面。
|
||||
7. 管理与系统工具页面、认证页、404 和 OpenCode 外壳。
|
||||
8. 删除旧 UI、字段猜测、重复样式和不再使用的兼容实现。
|
||||
9. 真实入口、性能、无障碍、响应式和深链恢复验收。
|
||||
|
||||
## 8. 总体验收
|
||||
|
||||
- 产品与契约:
|
||||
- 每个页面组可追溯到唯一主责 SPEC 和稳定业务 ID。
|
||||
- 前端不再通过 `Record<string, unknown>`、字段名猜测、名称去重或临时多接口拼接生成关键事实。
|
||||
- Workbench 不被改写,MDTODO→Workbench 公共启动语义不回退。
|
||||
- 显示与交互:
|
||||
- 实体集合页均有图标卡片和列表/表格切换;非集合页有合理的显示密度或内容模式切换。
|
||||
- 卡片与列表显示相同的主状态和 blocker,不形成两套业务逻辑。
|
||||
- 选中项、视图、筛选、排序、分页和详情标签可深链并刷新恢复。
|
||||
- 日志、Markdown、JSON、错误、加载和局部刷新统一使用通用组件。
|
||||
- HWPOD:
|
||||
- 一 node 对零到多个 HWPOD 的关系来自 typed API。
|
||||
- service ready、node online、HWPOD available、leased/busy 和 capability mismatch 分别呈现。
|
||||
- 电路板卡片四条链路表达 target/workspace/debug/io;仅真实连接或单 node in-flight 驱动动效。
|
||||
- 动效支持 `prefers-reduced-motion`,状态不只依赖颜色。
|
||||
- 接入完成态按 downloaded、installed、desktop-visible、registered、workspace-ready 和 hwpod-ready 分阶段判定。
|
||||
- 布局、无障碍与性能:
|
||||
- `1920x1080`、`960x600` 和约 `390px` 手机宽度均有明确导航、滚动所有者和可操作主路径。
|
||||
- 无 document 级横向溢出;长表、长树和长日志 DOM 有界。
|
||||
- Dialog/Drawer 支持完整键盘、焦点圈定/恢复、Esc、ARIA 和危险操作确认。
|
||||
- 隐藏 pane 停止高频更新;动效不造成 layout shift 或持续高 CPU。
|
||||
- 原入口验证:
|
||||
- 使用 NC01/v03 YAML-selected Cloud Web 原入口和 `web-probe observe/analyze` 验证。
|
||||
- 覆盖桌面、紧凑桌面、移动端、深链刷新、权限差异、loading/empty/error/partial/ready 和大数据集。
|
||||
- HWPOD fixture/E2E 至少覆盖一 node 多 HWPOD、声明离线 node、在线无 spec node、invalid spec、capability mismatch、busy、update available 和诊断错误。
|
||||
@@ -0,0 +1,64 @@
|
||||
# HWLAB Web 产品体验
|
||||
|
||||
- 长期问题域:
|
||||
- HWLAB Cloud Web 的产品信息架构、通用前端能力、页面一致性和用户入口体验。
|
||||
- HWLAB 页面所需的同源 API、领域 read model 与合理微服务边界。
|
||||
- 规格真相:
|
||||
- `project-management/PJ2026-01/specs/` 下的 HWLAB L0、Cloud 阶段及对应 L1/L2 SPEC。
|
||||
- HWLAB v0.3 实现与真实入口验收以 `NC01/v03` 固定 source workspace 和运行面为准。
|
||||
- 范围边界:
|
||||
- 页面不得重新定义硬件、任务、用户、权限、账本或评价事实。
|
||||
- Workbench 主工作流不在本文件内重写,但共享应用壳变更不得造成其回退。
|
||||
|
||||
|
||||
## R1 [in_progress]
|
||||
|
||||
依据 UniDesk OA SPEC 全量重写 HWLAB v0.3 除 Workbench 主工作流外的 Cloud Web 页面:先抽取工业风、高信息密度、渐进披露且符合用户直觉的通用前端模块;MDTODO 保留成熟布局语义后重写;HWPOD/HWPOD Node 重点实现设备卡片/列表、node→HWPOD 管理和 Python 节点接入;必要时补强后端并按职责合理拆分微服务。完整范围、现状证据、战略判断和验收见[任务上下文](./details/hwlab-web-product-experience/R1_Context.md);执行锚点见[HWLAB #2514](https://github.com/pikasTech/HWLAB/issues/2514),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1_Task_Report.md)。
|
||||
|
||||
### R1.1 [in_progress]
|
||||
|
||||
完成 UniDesk OA SPEC 对齐与产品架构定锚:盘点非 Workbench 全路由、用户旅程、实体 ID、navId/ACL、DTO/API、深链、页面状态和原入口,以 HWLAB L0“云端硬件研发闭环”、Cloud 阶段“多人多端开箱即用/硬件接入”及各 L1/L2 职责判定页面主责、缺口和优先级;确认需新增或修订的 SPEC、架构图、数据流、时序和验收矩阵后再实现。依赖:无,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.1_Task_Report.md)。
|
||||
|
||||
### R1.2
|
||||
|
||||
依赖 R1.1,建立 HWLAB Cloud Web 工业设计系统与通用前端层:tokens、响应式 AppShell、PageCommandBar、StatusStrip、DataGrid/VirtualList/ResourceCollection、工业实体卡片、图标/列表或密度切换、Dialog/Drawer/Popover、Log/Markdown/JSON/Trace Viewer、AsyncBoundary、Inspector 与 BoundedWorkspace;统一 URL view state、键盘/ARIA、reduced-motion、响应式和大数据有界行为。执行见[HWLAB #2515](https://github.com/pikasTech/HWLAB/issues/2515),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.2_Task_Report.md)。
|
||||
|
||||
### R1.3
|
||||
|
||||
依赖 R1.1,可与 R1.2 并行;按硬件池、Agent编排、HarnessRL、客户端、用户管理和平台运维主责补齐 typed DTO、BFF/read model、服务端搜索/排序/cursor、详情与日志/operation 查询。评估抽取 hwlab-hwpod-service 统一 HWPOD registry、node connection、拓扑、operation 和诊断;Cloud API 只保留同源鉴权/路由/correlation,项目与用户事实继续归既有服务,拆分前先更新对应 SPEC,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.3_Task_Report.md)。
|
||||
|
||||
### R1.4
|
||||
|
||||
依赖 R1.2、R1.3,重写全站应用壳、登录、注册和 404:导航按用户工作流组织,保留或原子迁移 navId/ACL、同源 HttpOnly 会话与安全 redirect;桌面、紧凑桌面和移动端都有明确导航、上下文、命令区和滚动所有者。联动修正 UniDesk HWLAB 外链壳的硬编码 IP,使其从受控配置解析正式入口;共享壳变更不得改写或回退 Workbench 主工作流,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.4_Task_Report.md)。
|
||||
|
||||
### R1.5
|
||||
|
||||
依赖 R1.2、R1.3,重写 HWPOD“设备资源”子标签:以 typed inventory 展示 HWPOD 四要素、node、声明/实际能力、可用/占用/busy、主要 blocker 和最近 operation;同源支持电路板 SVG 图标卡片与高密度列表。四条链路分别表达 target/workspace/debug/io,仅真实连接、in-flight 或 mismatch 驱动克制动效,并完整支持 reduced-motion、详情深链和渐进披露 Inspector。执行见[HWLAB #2516](https://github.com/pikasTech/HWLAB/issues/2516),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.5_Task_Report.md)。
|
||||
|
||||
### R1.6
|
||||
|
||||
依赖 R1.2、R1.3,与 R1.5 协同重写“HWPOD Node”和“节点接入”子标签:管理已连接及声明离线 node,展示平台、版本、心跳、能力、in-flight、诊断和其挂载的零到多个 HWPOD;网页消费 update/download 元数据下载 Python 单文件,展示版本、大小、SHA 和安装条件。按 downloaded→installed→desktop-visible→registered→workspace-ready→hwpod-ready 分阶段引导,凭据仍只走 YAML sourceRef/受控 CLI,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.6_Task_Report.md)。
|
||||
|
||||
### R1.7
|
||||
|
||||
依赖 R1.2、R1.3,重写 Projects 与 MDTODO:Projects 提供项目卡片/表格、状态/来源筛选、项目详情、任务活动与 blocker 深链;MDTODO 保留成熟的有界三栏、Rxx 树→正文→报告、Source/File 工具栏、inline edit、报告关闭/调整/全屏、RESTful 深链和刷新恢复,并接入新的通用组件。删除 Workbench 私有 store 依赖,只通过公共 Project Management 与 Workbench Launch API 联动。执行见[HWLAB #2517](https://github.com/pikasTech/HWLAB/issues/2517),完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.7_Task_Report.md)。
|
||||
|
||||
### R1.8
|
||||
|
||||
依赖 R1.2、R1.3,重写 Dashboard、组织/用户协同、API Keys、Usage、Billing、Settings 与 Help:Dashboard 通过后端聚合 read model 提供继续项目/任务、HWPOD、额度和主要异常;集合页统一卡片/列表、筛选、分页和深链;创建/兑换等低频操作进入 Dialog。不得虚构未落地的支付、scope、轮换或跨设备偏好,缺失能力先更新用户管理 SPEC/API,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.8_Task_Report.md)。
|
||||
|
||||
### R1.9
|
||||
|
||||
依赖 R1.2、R1.3,重写 Users、Access、Secrets/External Secret、Admin Billing 与 Provider Profiles:统一集合→Inspector/深链详情→低频 Dialog,补 typed DTO、服务端分页、筛选、审计/验证历史和有界日志。Access 继续消费权限域真相;Secret 只展示对象、key、presence、fingerprint 与摘要,保留 dry-run/plan 和 YAML-first sourceRef,不新增运行面反解或前端 Apply,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.9_Task_Report.md)。
|
||||
|
||||
### R1.10
|
||||
|
||||
依赖 R1.2、R1.3,重写 Performance、Gate、Skills、OpenCode 外壳及其他非 Workbench 系统工具页:按“状态→问题→证据→动作”渐进披露,统一时间窗口、视图/密度、详情深链、日志/证据查看和异步状态;Performance 拆分大组件并保持有界可视化,Skills 不在缺少正式 API 时虚构删除/启停,OpenCode 保留同源 ticket、认证和安全 URL,只增强加载/错误/重试外壳,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.10_Task_Report.md)。
|
||||
|
||||
### R1.11
|
||||
|
||||
依赖 R1.4-R1.10,完成迁移收口:删除所有已被新设计系统替代的旧页面 shell、私有 Panel/Table/Dialog/Viewer、字段名猜测、名称去重、关键事实前端拼装、重复 CSS 和阻碍最新目标的兼容入口;把 Workbench 与普通页面样式按职责拆分,所有源码文件满足体积治理。保持稳定业务 ID、API、权限、Secret、深链和 Workbench 用户主路径无回退,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.11_Task_Report.md)。
|
||||
|
||||
### R1.12
|
||||
|
||||
依赖 R1.4-R1.11,在 NC01/v03 YAML-selected Cloud Web 原入口完成全量验收:覆盖 1920x1080、960x600、约 390px、键盘/焦点/ARIA、reduced-motion、深链刷新/前进后退、卡片/列表语义一致、loading/refreshing/partial/empty/error/ready、大表/长树/长日志性能和权限差异。用 web-probe observe/analyze 留存证据;HWPOD 覆盖一 node 多设备、离线 node、在线无 spec、invalid spec、mismatch、busy、更新和诊断错误,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R1.12_Task_Report.md)。
|
||||
@@ -49,7 +49,7 @@
|
||||
| 短名 | HWPOD服务 |
|
||||
| 层级 | L2 课题 |
|
||||
| 状态 | 已生效 |
|
||||
| 实现引用版本 | draft-2026-06-25-p0-web-caserun-e2e |
|
||||
| 实现引用版本 | draft-2026-06-25-p0-web-caserun-e2e; draft-2026-07-13-p0-cloud-console |
|
||||
| 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) |
|
||||
| 上级规格 | [PJ2026-0101 硬件池](PJ2026-0101-hardware-pool.md) |
|
||||
| 规格治理索引 | [规格治理](spec-governance.md) |
|
||||
@@ -92,6 +92,7 @@ HWPOD服务负责服务端资源注册、健康、租约、占用释放、权限
|
||||
| 路由 | 服务端把 HWPOD 操作请求转发到正确 HWPOD node 或 AI 网关的过程。 |
|
||||
| operation result | 服务端接收并归属的一次硬件操作结果。 |
|
||||
| CaseRun 调用方 | HarnessRL 为一次 CaseRun 持有的硬件操作调用上下文,至少携带 runId、caseId、actor、HWPOD 和租约摘要。 |
|
||||
| topology read model | 由 HWPOD 服务拥有的 node、HWPOD、声明/实际能力、readiness、占用和 blocker 的有界查询投影。 |
|
||||
|
||||
## 4. 系统边界和接口
|
||||
|
||||
@@ -165,3 +166,15 @@ HWPOD服务应把每次 operation result 归属到明确的 HWPOD、node、租
|
||||
结果归属不是长证据归档。服务端只负责保存和交接必要操作结果、摘要和查询指针;CaseRun 评价、回放、训练反馈和用户展示由对应模块在此事实上继续处理。
|
||||
|
||||
Web CaseRun 消费的 operation result 至少应能被 HarnessRL 引用到同一 run stage,并携带 op 类型、target path 或 probe 摘要、returnCode 或失败分类、日志/证据指针、valuesRedacted、requestId/trace 关联和 node-reported capability 摘要。HWPOD服务不生成 CaseRun aggregate,但必须提供足够稳定的 operation result 引用,使 aggregate、artifact manifest、Web run 卡和 web-probe report 指向同一硬件事实。
|
||||
|
||||
### 6.5 HWPOD-SVC-REQ-005 Topology Read Model
|
||||
|
||||
| 编号 | 短名 | 主责模块 | 关联模块 |
|
||||
| --- | --- | --- | --- |
|
||||
| HWPOD-SVC-REQ-005 | 拓扑投影 | PJ2026-01010301 资源注册、PJ2026-01010303 节点路由 | [AI网关](PJ2026-010104-ai-gateway.md)、[云端控制台](PJ2026-010405-cloud-console.md) |
|
||||
|
||||
HWPOD服务应提供有界 typed topology read model,统一表达 owning 配置声明但离线的 node、已连接 node、在线但未挂 spec 的 node、node 下零到多个 HWPOD、声明/实际 capability、in-flight、busy、最近 operation 和诊断摘要。
|
||||
|
||||
该投影必须分别表达 service ready、node online、HWPOD available、leased/busy 和 capability mismatch。列表接口只返回有界摘要并支持服务端筛选、排序和 cursor;完整 spec document、日志和诊断通过实体详情或专用查询渐进披露。
|
||||
|
||||
Cloud API 可以代理并映射主体、ACL、错误与 correlation,但不得在浏览器或 Cloud API 临时拼装第二份 topology authority。若连接规模要求抽取独立 HWPOD 服务,registry、topology、operation 和诊断事实必须随 owner 一次迁移。
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
| 短名 | AI网关 |
|
||||
| 层级 | L2 课题 |
|
||||
| 状态 | 已生效 |
|
||||
| 实现引用版本 | draft-2026-06-25-p0-web-caserun-e2e; draft-2026-07-10-g14-wsl-python-hwpod-node |
|
||||
| 实现引用版本 | draft-2026-06-25-p0-web-caserun-e2e; draft-2026-07-10-g14-wsl-python-hwpod-node; draft-2026-07-13-p0-cloud-console |
|
||||
| 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) |
|
||||
| 上级规格 | [PJ2026-0101 硬件池](PJ2026-0101-hardware-pool.md) |
|
||||
| 规格治理索引 | [规格治理](spec-governance.md) |
|
||||
@@ -66,6 +66,7 @@ AI网关负责靠近真实硬件执行受控动作并回传原始硬件事实,
|
||||
| gateway_busy | 网关达到并发上限或暂时无法领取新操作时返回的结构化忙碌状态。 |
|
||||
| 安全恢复 | 在写操作前后把真实设备恢复到可继续使用状态的 reset、重新连接或清理输出能力。 |
|
||||
| 原始硬件事实 | 由节点直接观测或执行得到的协议响应、板外读数、probe 结果和错误语义。 |
|
||||
| 接入 readiness | 节点从下载到 HWPOD 可用的分阶段状态,不以单一进程或连接信号替代。 |
|
||||
|
||||
## 4. 系统边界和接口
|
||||
|
||||
@@ -178,3 +179,22 @@ Python UI node 本地日志应与云端诊断保持可关联。节点在处理 C
|
||||
- nodeId、入口、pythonPath、运行目录、允许根、更新策略和启动策略以 owning YAML 为准;
|
||||
- `%USERPROFILE%\.hwlab\config.json` 仅是 CLI 渲染的桌面副本;
|
||||
- 规格不保存具体路径、地址、token、重连次数或时间参数。
|
||||
|
||||
### 6.6 HWPOD-GW-REQ-006 Python 节点接入元数据与 Readiness
|
||||
|
||||
- 主责模块:
|
||||
- PJ2026-01010401 节点健康。
|
||||
- 关联模块:
|
||||
- [HWPOD服务](PJ2026-010103-hwpod-service.md);
|
||||
- [云端控制台](PJ2026-010405-cloud-console.md)。
|
||||
- 发布元数据:
|
||||
- 服务端应公开 Python 单文件的版本、文件名、大小、SHA-256、发布说明和下载 URL;
|
||||
- 客户端只能展示和消费这些元数据,不在前端硬编码版本或文件指纹。
|
||||
- 接入阶段:
|
||||
- readiness 必须分别表达 `downloaded`、`installed`、`desktop-visible`、`registered`、`workspace-ready` 和 `hwpod-ready`;
|
||||
- WebSocket connected 只证明主动出站会话成立,不等于 workspace 或 HWPOD ready;
|
||||
- 每个未完成阶段应返回结构化 blocker 和下一步受控入口。
|
||||
- 安全边界:
|
||||
- 网页不得生成、显示或传递节点 Secret 值;
|
||||
- 节点身份、凭据、工作区根、解释器和启动策略继续由 owning YAML 与受控 CLI 拥有;
|
||||
- 不得为接入便利新增用户 PC 入站端口、直连地址或匿名注册兜底。
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
| 短名 | 客户端 |
|
||||
| 层级 | L1 方向 |
|
||||
| 状态 | 已生效 |
|
||||
| 实现引用版本 | draft-2026-06-25-p0-web-caserun-e2e; draft-2026-06-25-p0-project-management-mdtodo; draft-2026-06-25-p0-mdtodo-web-active-editing-hwpod-source |
|
||||
| 实现引用版本 | draft-2026-06-25-p0-web-caserun-e2e; draft-2026-06-25-p0-project-management-mdtodo; draft-2026-06-25-p0-mdtodo-web-active-editing-hwpod-source; draft-2026-07-13-p0-cloud-console |
|
||||
| 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) |
|
||||
| 上级规格 | [PJ2026-01 HWLAB 总规格](PJ2026-01-HWLAB.md) |
|
||||
| 规格治理索引 | [规格治理](spec-governance.md) |
|
||||
@@ -43,6 +43,8 @@
|
||||
- Cloud Web 通过 `/auth/session` 消费 canonical identity,并以业务 API 返回的 capability/blocker 展示授权状态。
|
||||
- Cloud Web 的 CaseRun 用户入口、run 状态卡、trace/aggregate/HWPOD 证据阅读入口和可操作 blocker 展示。
|
||||
- Cloud Web 的项目管理根导航、MDTODO 页面、HWPOD-bound Source 配置、Rxx 任务树、主动编辑控件、项目任务 DTO、Workbench launch context 和任务到 Workbench session 的公共 ID 链接。
|
||||
- Cloud Web 除 Workbench 外的统一应用壳、Dashboard、HWPOD 资源与 Node、节点接入、用户运营、管理和系统工具页面。
|
||||
- Cloud Web 的工业设计系统、通用集合、Overlay、Viewer、异步状态、显示模式、URL view state、响应式和无障碍合同。
|
||||
- HWLAB CLI 的运行端点解析、API key 鉴权入口、同源 API 调用、短连接命令、结构化输出、错误语义和脚本可用性。
|
||||
- 通过 HWLAB CLI 覆盖账号/额度、工作台、显式 Agent session、Agent 任务、trace/result、HWPOD/CaseRun 组合入口和必要管理入口的非视觉全流程复验。
|
||||
- web-probe 作为 Cloud Web 同源非视觉验收路径运行 CaseRun;它不拥有新的业务事实或后门接口。
|
||||
@@ -96,6 +98,7 @@
|
||||
| PJ2026-010402 | HWLAB CLI | [PJ2026-010402 HWLAB CLI](PJ2026-010402-hwlab-cli.md) | 短连接命令、同源 API 调用、结构化输出、错误语义和非视觉全流程复验 | 全部业务 L1 | 用户脚本、自动化脚本、内测复现 |
|
||||
| PJ2026-010403 | API契约 | [PJ2026-010403 API契约](PJ2026-010403-api-contract.md) | 同源 API path、schema、鉴权主体、错误码和兼容性 | 用户管理、Agent编排、硬件池、HarnessRL、平台运维 | Web、HWLAB CLI |
|
||||
| PJ2026-010404 | 项目管理 | [PJ2026-010404 项目管理](PJ2026-010404-project-management.md) | 项目根导航、MDTODO 页面、独立项目管理微服务、任务投影、Workbench link 和项目管理 observe/analyze 验收 | 用户管理、Agent编排、平台运维、API契约 | Web、HWLAB CLI、web-probe |
|
||||
| PJ2026-010405 | 云端控制台 | [PJ2026-010405 云端控制台](PJ2026-010405-cloud-console.md) | 非 Workbench 应用壳、领域页面、通用前端能力、typed read model 消费和原入口体验 | 用户管理、硬件池、Agent编排、HarnessRL、项目管理、平台运维 | Web 用户和管理员 |
|
||||
|
||||
## 6. 原子需求
|
||||
|
||||
@@ -167,6 +170,16 @@ MDTODO 页面启动 Workbench 时,只能调用公共 Workbench Launch API 并
|
||||
|
||||
该验收必须证明 Project Management 的同源 API 代理支持 MDTODO source/file/task 的写方法,而不是只支持 Workbench link 写入或只验证只读投影。若 Source 配置、HWPOD probe、reindex、title/body/status 编辑、新增、延续、删除任一操作需要直连 `hwlab-project-management` service、Kubernetes、Postgres 或 D601 SSH 才能成功,则客户端入口验收不成立。
|
||||
|
||||
### 6.6 CLIENT-L1-REQ-006 云端控制台
|
||||
|
||||
| 编号 | 短名 | 主责模块 | 关联模块 |
|
||||
| --- | --- | --- | --- |
|
||||
| CLIENT-L1-REQ-006 | 云端控制台 | [PJ2026-010405 云端控制台](PJ2026-010405-cloud-console.md) | [用户管理](PJ2026-0105-user-management.md)、[硬件池](PJ2026-0101-hardware-pool.md)、[项目管理](PJ2026-010404-project-management.md)、[平台运维](PJ2026-0106-platform-ops.md) |
|
||||
|
||||
客户端应提供统一的非 Workbench 云端控制台,使项目、任务、硬件、用户运营、管理和系统状态以一致的工业工作界面呈现,并能够通过 typed API、稳定 ID、深链、渐进披露和统一错误语义继续操作。
|
||||
|
||||
控制台的页面信息架构、通用组件、HWPOD 入口、显示模式、服务边界、响应式、无障碍和原入口验收由 [PJ2026-010405 云端控制台](PJ2026-010405-cloud-console.md) 约束。客户端只拥有交互和展示,不重新定义领域事实。
|
||||
|
||||
## 7. 过程控制
|
||||
|
||||
本规格不单独索引过程 issue;跨 L1 的内测、灰度和阶段活动索引统一保留在 [PJ2026-01 HWLAB 总规格](PJ2026-01-HWLAB.md) 的 `7. 过程控制`。客户端方向的阶段活动材料应引用本规格和各 L2 规格,不在本规格正文中展开执行流水。
|
||||
|
||||
@@ -0,0 +1,291 @@
|
||||
# PJ2026-010405 云端控制台
|
||||
|
||||
## 修改历史
|
||||
|
||||
| 版本 | 对应 commit id | 更新日期 | 变更说明 |
|
||||
| --- | --- | --- | --- |
|
||||
|
||||
当前正文仍在规格治理草稿中;未定稿前不新增版本号,不为单次编辑追加 `待提交` 版本。
|
||||
|
||||
## 正文
|
||||
|
||||
## PJ2026-010405 云端控制台需求规格
|
||||
|
||||
## 1. 文档控制
|
||||
|
||||
| 字段 | 内容 |
|
||||
| --- | --- |
|
||||
| 编号 | PJ2026-010405 |
|
||||
| 短名 | 云端控制台 |
|
||||
| 层级 | L2 课题 |
|
||||
| 状态 | 已生效 |
|
||||
| 实现引用版本 | draft-2026-07-13-p0-cloud-console |
|
||||
| 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) |
|
||||
| 上级规格 | [PJ2026-0104 客户端](PJ2026-0104-client.md) |
|
||||
| 关联规格 | [HWPOD服务](PJ2026-010103-hwpod-service.md)、[AI网关](PJ2026-010104-ai-gateway.md)、[项目管理](PJ2026-010404-project-management.md)、[用户管理](PJ2026-0105-user-management.md) |
|
||||
| 规格治理索引 | [规格治理](spec-governance.md) |
|
||||
|
||||
本文采用 ISO/IEC/IEEE 29148 需求规格模板的项目裁剪版,定义 HWLAB Cloud Web 除 Workbench 主工作流之外的统一产品壳、页面能力、数据消费边界和原入口验收。
|
||||
|
||||
## 2. 目的和范围
|
||||
|
||||
### 2.1 目的
|
||||
|
||||
云端控制台负责把项目、任务、硬件资源、用户运营、管理和系统状态投影为一致、可理解、可操作的 Web 工作界面,使用户在进入 Workbench 前后都能确认当前上下文、资源 readiness、主要 blocker 和下一步动作。
|
||||
|
||||
本课题服务 HWLAB 从单用户本地验证走向多人、多端、云端开箱即用的阶段目标。页面重写不是孤立视觉美化,而是把已有领域事实收敛为工业风、高信息密度、渐进披露且支持深链恢复的统一入口。
|
||||
|
||||
### 2.2 范围内
|
||||
|
||||
- 登录、注册、404 和登录后应用壳。
|
||||
- Dashboard、Projects、MDTODO、HWPOD、HWPOD Node 和节点接入。
|
||||
- API Keys、Usage、Billing、Settings、Help 和组织/用户协同入口。
|
||||
- Users、Access、Secrets、External Secret、Admin Billing 和 Provider Profiles。
|
||||
- Performance、Gate、Skills 和 OpenCode 外壳等非 Workbench 工具页。
|
||||
- 页面共享的工业设计系统、集合、Overlay、Viewer、异步状态和有界工作区组件。
|
||||
- 页面所需的 typed DTO、同源 BFF/read model、服务端搜索、排序、cursor 和详情查询。
|
||||
- 卡片/列表或合理密度切换、URL view state、响应式、无障碍和 reduced-motion。
|
||||
|
||||
### 2.3 范围外
|
||||
|
||||
- `/workbench*` 主工作流由 [PJ2026-010401 Web工作台](PJ2026-010401-web-workbench.md) 负责;本规格只要求共享应用壳不使其回退。
|
||||
- 项目和 MDTODO source-of-truth、任务投影与 Workbench launch context 由 [项目管理](PJ2026-010404-project-management.md) 负责。
|
||||
- HWPOD 资源、node topology、租约、路由和 operation result 由 [HWPOD服务](PJ2026-010103-hwpod-service.md) 负责。
|
||||
- 节点连接、能力、adapter 执行和原始硬件事实由 [AI网关](PJ2026-010104-ai-gateway.md) 负责。
|
||||
- 用户、组织、权限、API key、额度、usage 和 billing 事实由 [用户管理](PJ2026-0105-user-management.md) 负责。
|
||||
- 为视觉展示虚构支付、scope、轮换、claim、授权、硬件状态或系统能力。
|
||||
|
||||
## 3. 术语表
|
||||
|
||||
| 术语 | 定义 |
|
||||
| --- | --- |
|
||||
| 云端控制台 | HWLAB Cloud Web 中除 Workbench 主工作流外的统一用户与管理页面集合。 |
|
||||
| 应用壳 | 负责导航、用户/组织上下文、命令区、状态区、路由出口和主滚动所有者的共享页面框架。 |
|
||||
| 资源集合 | 以同一数据和选择合同提供图标卡片、列表或表格视图的实体集合。 |
|
||||
| Inspector | 在不离开集合上下文的情况下渐进披露实体详情、诊断和低频动作的侧边详情区域。 |
|
||||
| blocker | 由后端业务域返回、能够解释当前能力不可用或下一步动作的结构化阻塞。 |
|
||||
| view state | 纯显示状态,包括视图、密度、筛选、排序、cursor、选中对象和详情标签。 |
|
||||
| PCB 设备卡片 | 用电路板拓扑表达 HWPOD 四要素及真实状态的 SVG 实体卡片,不是装饰插画。 |
|
||||
| 节点接入阶段 | `downloaded`、`installed`、`desktop-visible`、`registered`、`workspace-ready` 和 `hwpod-ready` 的分阶段 readiness。 |
|
||||
|
||||
## 4. 系统边界和目标架构
|
||||
|
||||
### 4.1 边界
|
||||
|
||||
| 边界项 | 内容 |
|
||||
| --- | --- |
|
||||
| 外部使用者 | 硬件研发用户、组织管理员、平台管理员。 |
|
||||
| 外部输入 | 用户操作、路由、筛选、实体 ID、任务操作、资源选择和低频管理动作。 |
|
||||
| 受控资源 | 页面壳、组件、客户端路由状态、同源 API 调用和可访问性语义。 |
|
||||
| 外部输出 | 项目/任务/资源集合、详情、readiness、blocker、日志/证据摘要和用户动作结果。 |
|
||||
| 系统边界 | 云端控制台负责用户入口和展示合同,不拥有硬件、任务、身份、权限、账本或评价事实。 |
|
||||
|
||||
### 4.2 目标架构
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
User[用户或管理员] --> Shell[Cloud Web 应用壳]
|
||||
Shell --> Pages[领域页面]
|
||||
Pages --> UI[共享 UI 与 view state]
|
||||
Pages --> BFF[Cloud API 同源 BFF]
|
||||
BFF --> PM[Project Management]
|
||||
BFF --> HWPOD[HWPOD Service]
|
||||
BFF --> UserDomain[User Management]
|
||||
BFF --> Agent[AgentRun/HarnessRL]
|
||||
HWPOD --> Gateway[AI Gateway / Python Node]
|
||||
PM -. launchContext .-> Workbench[Workbench]
|
||||
```
|
||||
|
||||
- Cloud API 只承担同源会话、ACL、路由、错误和 correlation 映射。
|
||||
- 领域 read model 由拥有事实的服务产出;浏览器不得并发调用多个服务后猜测关键状态。
|
||||
- 前端组件只接收 typed DTO,不用 `Record<string, unknown>`、字段名候选、名称去重或临时拼装定义业务真相。
|
||||
|
||||
### 4.3 页面信息架构
|
||||
|
||||
- 工作入口:
|
||||
- Dashboard;
|
||||
- Projects;
|
||||
- MDTODO;
|
||||
- Workbench 公共入口。
|
||||
- 硬件资源:
|
||||
- HWPOD 设备资源;
|
||||
- HWPOD Node;
|
||||
- 节点接入。
|
||||
- 用户与运营:
|
||||
- 组织/用户上下文;
|
||||
- API Keys;
|
||||
- Usage;
|
||||
- Billing;
|
||||
- Settings;
|
||||
- Help。
|
||||
- 管理与系统:
|
||||
- Users、Access、Secrets、Admin Billing 和 Provider Profiles;
|
||||
- Performance、Gate、Skills 和 OpenCode 外壳。
|
||||
|
||||
## 5. 通用前端能力
|
||||
|
||||
### 5.1 视觉与布局
|
||||
|
||||
- 采用工业控制台方向:深石墨主色、暖白工作面、琥珀或电气青状态强调、细边界和克制层次。
|
||||
- 字体、颜色、间距、圆角、边界、阴影、状态和动效必须由 tokens 统一拥有。
|
||||
- 首屏直接显示可操作对象、主状态、主要 blocker 和高频动作,不放营销式 hero 或装饰指标墙。
|
||||
- AppShell、PageCommandBar、StatusStrip、SectionFrame、Inspector 和 BoundedWorkspace 统一页面骨架。
|
||||
- 根容器和工作区使用稳定高度、`min-height: 0` 和内部滚动,禁止 document 级横向溢出。
|
||||
|
||||
### 5.2 集合与切换
|
||||
|
||||
- `DataGrid<T>`、`VirtualList<T>` 和 `ResourceCollection<T>` 共享同一查询、选择、详情和动作合同。
|
||||
- 实体集合默认提供图标卡片与列表/表格切换。
|
||||
- 非实体集合页面提供紧凑/舒适密度或内容显示模式,不制造无意义图标视图。
|
||||
- 支持服务端搜索、排序、cursor、列显隐、sticky header、键盘选择和大集合窗口化。
|
||||
- 卡片与列表必须显示相同的身份、主状态、blocker 和动作,不得形成两套业务逻辑。
|
||||
|
||||
### 5.3 Overlay、内容和异步状态
|
||||
|
||||
- Dialog、Drawer、Popover 和 ConfirmDialog 统一 Portal、Esc、focus trap、焦点恢复、scroll lock、busy 和 ARIA。
|
||||
- Log、Markdown、JSON、Text 和 Trace Viewer 统一搜索、复制、换行、行号、下载和全屏能力。
|
||||
- 页面统一表达 `initial-loading`、`refreshing`、`partial`、`empty`、`error` 和 `ready`。
|
||||
- 后台刷新保留上一份成功数据;错误主界面显示原因和动作,code、requestId 和 traceId 进入详情。
|
||||
|
||||
### 5.4 路由和状态
|
||||
|
||||
- 实体身份和选择进入 REST path。
|
||||
- `view`、`density`、`q`、`filter`、`sort`、`cursor` 和详情标签进入 query。
|
||||
- 路由必须支持刷新、前进、后退和直接打开恢复。
|
||||
- localStorage 只能保存纯显示偏好,不能成为实体、权限或业务状态 authority。
|
||||
|
||||
## 6. HWPOD 用户入口
|
||||
|
||||
### 6.1 数据流
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Web as HWPOD 页面
|
||||
participant BFF as Cloud API BFF
|
||||
participant Svc as HWPOD Service
|
||||
participant Node as AI Gateway Node
|
||||
Web->>BFF: GET inventory/topology
|
||||
BFF->>Svc: 带主体与 correlation 的 typed query
|
||||
Svc-->>BFF: devices + nodes + blockers + cursor
|
||||
BFF-->>Web: 有界 DTO
|
||||
Web->>BFF: POST operation
|
||||
BFF->>Svc: 授权后的 operation request
|
||||
Svc->>Node: 按 nodeId 路由
|
||||
Node-->>Svc: in-flight / result / diagnostics
|
||||
Svc-->>Web: operationId 和可查询终态
|
||||
```
|
||||
|
||||
### 6.2 设备资源
|
||||
|
||||
- 每个 HWPOD 必须显示稳定 hwpodId、nodeId、四要素、声明/实际能力、可用/占用/busy、主要 blocker 和最近 operation。
|
||||
- PCB 设备卡片以四条可辨识链路表达 target、workspace、debug probe 和 io probe。
|
||||
- 动效只能由真实连接、单 node in-flight、operation 进度或 capability mismatch 驱动。
|
||||
- `prefers-reduced-motion` 下停止非必要循环动画;状态不得只依赖颜色。
|
||||
- 列表模式必须保留相同状态语义,并提供服务端排序、筛选和详情深链。
|
||||
|
||||
### 6.3 HWPOD Node
|
||||
|
||||
- Node 集合同时展示已连接节点和 owning 配置声明但离线的节点。
|
||||
- 每个 node 显示 nodeId、平台、版本、首见/末见、心跳、实际能力、in-flight、并发上限、诊断和挂载的零到多个 HWPOD。
|
||||
- `service-ready`、`node-online`、`hwpod-available`、`leased/busy` 和 `capability-mismatch` 必须分别呈现。
|
||||
- 在线但没有 spec、invalid spec 和声明/实际能力不一致必须形成可行动 blocker。
|
||||
|
||||
### 6.4 节点接入
|
||||
|
||||
- 页面消费 `/v1/hwlab-node/update` 和 `/v1/hwlab-node/download/hwlab-node.py` 的公开元数据。
|
||||
- 下载区显示版本、文件名、大小、SHA-256、发布说明和安装条件。
|
||||
- readiness 必须按 `downloaded`、`installed`、`desktop-visible`、`registered`、`workspace-ready` 和 `hwpod-ready` 分阶段展示。
|
||||
- 节点使用主动出站 WebSocket,不为用户 PC 增加入站端口或直连地址兜底。
|
||||
- 凭据仍只通过 YAML `sourceRef`/受控 CLI 下发;网页不得展示或生成可复用凭据。
|
||||
|
||||
## 7. 项目、用户和管理页面
|
||||
|
||||
### 7.1 Projects 与 MDTODO
|
||||
|
||||
- Projects 提供项目卡片/表格、状态/来源筛选、详情、任务活动和 blocker 深链。
|
||||
- MDTODO 保留有界三栏、Rxx 树到正文到报告、Source/File 工具栏、inline edit、报告关闭/调宽/全屏和 RESTful 深链。
|
||||
- MDTODO 只能通过公共 Project Management API 和 Workbench Launch API 联动,不 import Workbench 私有 store。
|
||||
- 页面迁移不得改变 revision/fingerprint 冲突保护、source probe、reindex 和 launch context 语义。
|
||||
|
||||
### 7.2 用户与运营
|
||||
|
||||
- Dashboard 通过后端聚合 read model 提供继续项目/任务、HWPOD、额度和主要异常。
|
||||
- API Keys、Usage、Billing 和用户集合统一使用服务端分页、筛选、深链和低频 Dialog。
|
||||
- 未落地的支付、scope、轮换和跨设备偏好不得由前端占位成可用能力。
|
||||
|
||||
### 7.3 管理与系统工具
|
||||
|
||||
- Users、Access、Secrets、Billing 和 Provider Profiles 使用集合到 Inspector/详情到低频 Dialog 的一致路径。
|
||||
- Secret 只展示对象、key、presence、fingerprint 和摘要,保留 dry-run/plan 与 YAML-first 边界。
|
||||
- Performance、Gate、Skills 和 OpenCode 外壳按“状态到问题到证据到动作”渐进披露。
|
||||
- Skills 不在缺少正式 API 时虚构删除或启停;OpenCode 保留同源 ticket、认证和安全 URL。
|
||||
|
||||
## 8. 后端与服务边界
|
||||
|
||||
- 页面所需聚合优先由 typed BFF/read model 提供,不让前端跨服务猜测事实。
|
||||
- 只有独立数据所有权、生命周期、伸缩或连接故障域、权限边界成立时才拆微服务。
|
||||
- 项目管理继续由独立 `hwlab-project-management` 拥有。
|
||||
- 用户和账本事实继续由用户管理域拥有。
|
||||
- HWPOD registry、topology、租约、operation 和诊断摘要由 HWPOD 服务域拥有。
|
||||
- AI 网关拥有 node 连接、心跳、实际能力、adapter 执行和原始硬件事实。
|
||||
- 若从 Cloud API 抽取 `hwlab-hwpod-service`:
|
||||
- Cloud API 只保留同源鉴权、路由和 correlation;
|
||||
- connection gateway 初期作为 HWPOD 服务内部模块;
|
||||
- 只有 socket 规模和 churn 构成独立故障域时再拆连接服务;
|
||||
- Python 文件继续通过版本化静态 artifact 交付,不创建独立安装服务。
|
||||
|
||||
## 9. 原子需求
|
||||
|
||||
### 9.1 CONSOLE-REQ-001 统一应用壳
|
||||
|
||||
云端控制台应提供按用户工作流组织的统一应用壳,并保留或原子迁移稳定 `navId`、ACL、同源 HttpOnly 会话和安全 redirect。
|
||||
|
||||
### 9.2 CONSOLE-REQ-002 通用页面能力
|
||||
|
||||
所有非 Workbench 页面应复用本规格定义的布局、集合、Overlay、Viewer、异步状态和路由能力;旧页面私有 Panel、Table、Dialog、Viewer 和重复 CSS 在迁移后删除。
|
||||
|
||||
### 9.3 CONSOLE-REQ-003 HWPOD 控制台
|
||||
|
||||
云端控制台应提供设备资源、HWPOD Node 和节点接入三个可深链子标签,并以 HWPOD 服务与 AI 网关的 typed 事实表达 node 到设备拓扑、readiness、blocker 和 operation。
|
||||
|
||||
### 9.4 CONSOLE-REQ-004 领域事实隔离
|
||||
|
||||
云端控制台不得通过字段猜测、名称去重、浏览器多接口拼装或 localStorage 生成硬件、任务、用户、权限、账本和评价事实。
|
||||
|
||||
### 9.5 CONSOLE-REQ-005 渐进披露与显示模式
|
||||
|
||||
集合页面应支持卡片与列表/表格切换;低频详情、诊断、日志、原始 JSON、配置和危险动作应进入 Inspector、Drawer 或 Dialog,并保持键盘和屏幕阅读器可达。
|
||||
|
||||
### 9.6 CONSOLE-REQ-006 响应式与性能
|
||||
|
||||
控制台应在桌面、紧凑桌面和手机宽度保持明确导航、滚动所有者与可操作主路径;长表、长树和长日志 DOM 必须有界,隐藏 pane 停止高频更新。
|
||||
|
||||
## 10. 验收
|
||||
|
||||
- 规格与契约:
|
||||
- 每个页面组可追溯到唯一主责规格和稳定业务 ID;
|
||||
- typed API 不再向页面暴露关键事实的字段猜测;
|
||||
- Workbench 与 MDTODO 公共启动语义不回退。
|
||||
- 视口与无障碍:
|
||||
- 覆盖 `1920x1080`、`960x600` 和约 `390px`;
|
||||
- 覆盖键盘、焦点圈定/恢复、Esc、ARIA 和 reduced-motion;
|
||||
- 无 document 级横向溢出。
|
||||
- 状态与性能:
|
||||
- 覆盖 loading、refreshing、partial、empty、error 和 ready;
|
||||
- 覆盖大表、长树、长日志和隐藏 pane;
|
||||
- 卡片/列表共享同一状态和 blocker。
|
||||
- HWPOD:
|
||||
- 覆盖一 node 多设备、声明离线 node、在线无 spec、invalid spec、capability mismatch、busy、update available 和诊断错误;
|
||||
- 验证 PCB 动效只由真实状态驱动;
|
||||
- 验证 Python 下载元数据和分阶段 readiness。
|
||||
- 原入口:
|
||||
- 使用 YAML 选中的 NC01/v03 Cloud Web origin;
|
||||
- 使用 `web-probe observe/command/collect/analyze` 保存 command、observer、截图和报告摘要;
|
||||
- 源码检查、构建通过和局部截图不能单独关闭执行任务。
|
||||
|
||||
## 11. 实现引用
|
||||
|
||||
- 本规格范围内新增或实质修改的源码文件应在文件头标注:
|
||||
- `SPEC: PJ2026-010405 云端控制台`;
|
||||
- `Implementation reference: draft-2026-07-13-p0-cloud-console`。
|
||||
- 自动生成文件、第三方 vendored 文件、纯配置、锁文件和不能承载注释头的产物可例外;其生成器或入口必须能够追溯本规格。
|
||||
Reference in New Issue
Block a user