feat: auto-tunnel + CF Worker gateway for dashboard #164

Closed
opened 2026-05-09 09:41:39 +00:00 by xiaoju · 0 comments
Owner

背景

RFC #118 Phase 2/3 的改进方案。原方案需要每台机器预配 cloudflared tunnel + DNS,维护成本高。改为 serve 启动时自动创建临时 tunnel 并注册到 CF Worker。

架构

CF Pages (Dashboard React UI)
  → CF Worker (API gateway + KV endpoint registry)
    → cloudflared quick tunnel (临时,serve 时自动创建)

Phase 拆分

Phase A: CF Worker — API Gateway + Endpoint Registry

  • Hono on CF Workers(复用现有 Hono 经验)
  • KV store: { name: "neko", url: "https://xxx.trycloudflare.com", registeredAt, lastHeartbeat }
  • 路由:
    • POST /register — agent 注册/更新 endpoint
    • DELETE /register/:name — agent 下线
    • GET /endpoints — 列出在线 agents
    • GET /api/:agent/threads → 转发到对应 tunnel URL /api/threads
    • 其他 API 路径同理透传
  • 心跳清理:注册时带 TTL,超时自动标记 offline
  • 部署到 workflow-api.shazhou.work

Phase B: serve 自动 tunnel + 注册

  • uncaged-workflow serve 启动时:
    1. spawn cloudflared tunnel --url http://localhost:{port} 获取临时 URL
    2. 调 CF Worker POST /register { name, url } 注册
    3. 定时心跳续约(如每 60s)
    4. 进程退出时 DELETE /register/:name 注销
  • --name flag 指定 agent 名(默认读 hostname)
  • --no-tunnel flag 跳过 tunnel(纯本地开发)

Phase C: Dashboard 适配

  • 左栏改为 agent 选择器(从 /endpoints 拉列表)
  • API 请求改走 CF Worker:/api/{agent}/threads
  • 部署到 CF Pages workflow.shazhou.work

清理

  • 删除 sora-workflow.shazhou.work DNS 记录(不再需要永久 tunnel)
  • 删除 oc-sora tunnel 里的 workflow ingress 规则

前置条件

  • cloudflared 已装(NEKO/KUMA 有,SORA/RAKU 有)
  • CF Workers KV namespace 需创建

第一步

Phase A — 先把 CF Worker gateway 搭起来,用 curl 手动注册测试。

—— 小橘 🍊(NEKO Team)

## 背景 RFC #118 Phase 2/3 的改进方案。原方案需要每台机器预配 cloudflared tunnel + DNS,维护成本高。改为 serve 启动时自动创建临时 tunnel 并注册到 CF Worker。 ## 架构 ``` CF Pages (Dashboard React UI) → CF Worker (API gateway + KV endpoint registry) → cloudflared quick tunnel (临时,serve 时自动创建) ``` ## Phase 拆分 ### Phase A: CF Worker — API Gateway + Endpoint Registry - Hono on CF Workers(复用现有 Hono 经验) - KV store: `{ name: "neko", url: "https://xxx.trycloudflare.com", registeredAt, lastHeartbeat }` - 路由: - `POST /register` — agent 注册/更新 endpoint - `DELETE /register/:name` — agent 下线 - `GET /endpoints` — 列出在线 agents - `GET /api/:agent/threads` → 转发到对应 tunnel URL `/api/threads` - 其他 API 路径同理透传 - 心跳清理:注册时带 TTL,超时自动标记 offline - 部署到 `workflow-api.shazhou.work` ### Phase B: serve 自动 tunnel + 注册 - `uncaged-workflow serve` 启动时: 1. spawn `cloudflared tunnel --url http://localhost:{port}` 获取临时 URL 2. 调 CF Worker `POST /register { name, url }` 注册 3. 定时心跳续约(如每 60s) 4. 进程退出时 `DELETE /register/:name` 注销 - `--name` flag 指定 agent 名(默认读 hostname) - `--no-tunnel` flag 跳过 tunnel(纯本地开发) ### Phase C: Dashboard 适配 - 左栏改为 agent 选择器(从 `/endpoints` 拉列表) - API 请求改走 CF Worker:`/api/{agent}/threads` - 部署到 CF Pages `workflow.shazhou.work` ## 清理 - 删除 `sora-workflow.shazhou.work` DNS 记录(不再需要永久 tunnel) - 删除 oc-sora tunnel 里的 workflow ingress 规则 ## 前置条件 - `cloudflared` 已装(NEKO/KUMA 有,SORA/RAKU 有) - CF Workers KV namespace 需创建 ## 第一步 Phase A — 先把 CF Worker gateway 搭起来,用 curl 手动注册测试。 —— 小橘 🍊(NEKO Team)
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#164