RFC: Workflow Dashboard — HTTP API + Cloudflare Web UI #118

Closed
opened 2026-05-08 02:58:59 +00:00 by xingyue · 1 comment
Owner

背景

目前 workflow 引擎只能通过 CLI 操作,无法远程查看 threads 或从 Web 界面触发 workflow。希望做一个统一的 Web Dashboard,让所有 agent(SORA、NEKO、KUMA 等)的 workflow 可以从一个界面集中查看和操作。

架构

CF Pages (React UI)
  → CF Workers (API gateway + endpoint registry)
    → cloudflared tunnel → SORA :9876/api
    → cloudflared tunnel → NEKO :9876/api
    → cloudflared tunnel → KUMA :9876/api

每台机器运行 uncaged-workflow serve,通过 Cloudflare Tunnel 暴露为子域名(如 sora-workflow.shazhou.work)。CF 前端统一聚合。

为什么选 Cloudflare Tunnel

  • 已在 CF 生态(Uncaged = Workers),Pages/Workers 调 tunnel endpoint 零跨域
  • 各机器网络环境不同(Azure / 局域网 / Tailscale),Tunnel 统一穿透
  • 需要双向通道(查看 + 调度 thread),push 模型做不到
  • CF Access 天然集成认证

Phase 拆分

Phase 1: uncaged-workflow serve — 本地 HTTP API

新包 @uncaged/workflow-server 或嵌入 @uncaged/cli-workflow

读接口:

Endpoint 对应 CLI 说明
GET /api/workflows workflow list 列出所有注册的 workflow
GET /api/workflows/:name workflow show workflow 详情 + 版本历史
GET /api/threads thread list 列出 threads(支持 ?name= 过滤)
GET /api/threads/:id thread show thread 详情 + steps
GET /api/threads/running thread ps 运行中的 threads
GET /api/cas/:hash cas get 读取 CAS 内容

写接口:

Endpoint 对应 CLI 说明
POST /api/threads thread run 启动新 thread
POST /api/threads/:id/kill thread kill 终止 thread
POST /api/threads/:id/pause thread pause 暂停 thread
POST /api/threads/:id/resume thread resume 恢复 thread

实时接口:

Endpoint 对应 CLI 说明
GET /api/threads/:id/live thread live SSE 实时 thread 输出

技术选型:Hono(轻量,TS 原生,兼容 CF Workers 运行时以便未来复用)。

Phase 2: Cloudflare Tunnel 集成

  • 每台机器配置 cloudflared tunnel 指向本地 serve 端口
  • 子域名规则:{agent}-workflow.shazhou.work
  • CF Access 策略控制访问权限

Phase 3: Cloudflare Web UI

  • CF Pages + React(或 Astro)
  • CF Workers 做 API gateway,管理 endpoint 注册表(D1 或 KV)
  • 左栏选 agent,右栏查看 workflows/threads
  • 支持从 UI 触发 thread run

第一步

先做 Phase 1(本地 API),可以用 curl 测试。后面的 Phase 独立推进。

## 背景 目前 workflow 引擎只能通过 CLI 操作,无法远程查看 threads 或从 Web 界面触发 workflow。希望做一个统一的 Web Dashboard,让所有 agent(SORA、NEKO、KUMA 等)的 workflow 可以从一个界面集中查看和操作。 ## 架构 ``` CF Pages (React UI) → CF Workers (API gateway + endpoint registry) → cloudflared tunnel → SORA :9876/api → cloudflared tunnel → NEKO :9876/api → cloudflared tunnel → KUMA :9876/api ``` 每台机器运行 `uncaged-workflow serve`,通过 Cloudflare Tunnel 暴露为子域名(如 `sora-workflow.shazhou.work`)。CF 前端统一聚合。 ## 为什么选 Cloudflare Tunnel - 已在 CF 生态(Uncaged = Workers),Pages/Workers 调 tunnel endpoint 零跨域 - 各机器网络环境不同(Azure / 局域网 / Tailscale),Tunnel 统一穿透 - 需要双向通道(查看 + 调度 thread),push 模型做不到 - CF Access 天然集成认证 ## Phase 拆分 ### Phase 1: `uncaged-workflow serve` — 本地 HTTP API 新包 `@uncaged/workflow-server` 或嵌入 `@uncaged/cli-workflow`。 **读接口:** | Endpoint | 对应 CLI | 说明 | |----------|---------|------| | GET /api/workflows | workflow list | 列出所有注册的 workflow | | GET /api/workflows/:name | workflow show | workflow 详情 + 版本历史 | | GET /api/threads | thread list | 列出 threads(支持 ?name= 过滤) | | GET /api/threads/:id | thread show | thread 详情 + steps | | GET /api/threads/running | thread ps | 运行中的 threads | | GET /api/cas/:hash | cas get | 读取 CAS 内容 | **写接口:** | Endpoint | 对应 CLI | 说明 | |----------|---------|------| | POST /api/threads | thread run | 启动新 thread | | POST /api/threads/:id/kill | thread kill | 终止 thread | | POST /api/threads/:id/pause | thread pause | 暂停 thread | | POST /api/threads/:id/resume | thread resume | 恢复 thread | **实时接口:** | Endpoint | 对应 CLI | 说明 | |----------|---------|------| | GET /api/threads/:id/live | thread live | SSE 实时 thread 输出 | 技术选型:Hono(轻量,TS 原生,兼容 CF Workers 运行时以便未来复用)。 ### Phase 2: Cloudflare Tunnel 集成 - 每台机器配置 cloudflared tunnel 指向本地 serve 端口 - 子域名规则:`{agent}-workflow.shazhou.work` - CF Access 策略控制访问权限 ### Phase 3: Cloudflare Web UI - CF Pages + React(或 Astro) - CF Workers 做 API gateway,管理 endpoint 注册表(D1 或 KV) - 左栏选 agent,右栏查看 workflows/threads - 支持从 UI 触发 thread run ## 第一步 先做 Phase 1(本地 API),可以用 curl 测试。后面的 Phase 独立推进。
Author
Owner

RFC #118 完成总结 🎉

所有 Phase 已完成:

Phase 1: uncaged-workflow serve — 本地 HTTP API

  • PR #119 — 读接口(workflows/threads/CAS)
  • PR #129 — 写接口(run/kill/pause/resume)+ SSE live

Phase 2: Cloudflare Tunnel 集成

  • sora-workflow.shazhou.worklocalhost:7860 via oc-sora tunnel
  • DNS CNAME + ingress 配置完成,公网可访问

Phase 3: Web Dashboard

  • PR #127 — Dashboard MVP(React 19 + Vite 8 + Tailwind v4)
  • PR #134 — SSE 实时流接入

后续优化(独立 issue 跟踪)

  • #120 — serve 加固(错误处理/CORS/body limit)
  • #128 — Dashboard 增强(测试/路由/重连)
  • #130 — SSE 增量读取优化
  • 其他机器(NEKO/KUMA/LUMING)tunnel 配置

Close RFC #118。

## RFC #118 完成总结 🎉 所有 Phase 已完成: ### ✅ Phase 1: `uncaged-workflow serve` — 本地 HTTP API - PR #119 — 读接口(workflows/threads/CAS) - PR #129 — 写接口(run/kill/pause/resume)+ SSE live ### ✅ Phase 2: Cloudflare Tunnel 集成 - `sora-workflow.shazhou.work` → `localhost:7860` via `oc-sora` tunnel - DNS CNAME + ingress 配置完成,公网可访问 ### ✅ Phase 3: Web Dashboard - PR #127 — Dashboard MVP(React 19 + Vite 8 + Tailwind v4) - PR #134 — SSE 实时流接入 ### 后续优化(独立 issue 跟踪) - #120 — serve 加固(错误处理/CORS/body limit) - #128 — Dashboard 增强(测试/路由/重连) - #130 — SSE 增量读取优化 - 其他机器(NEKO/KUMA/LUMING)tunnel 配置 Close RFC #118。
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#118