个人系统拓扑平台:一张图看清主机、服务、Agent 和供应商之间的关系。
Steed 是个人系统拓扑平台:把主机、服务、Agent、数据源和外部供应商画在同一张拓扑图里,按供应商或提供方分层,标注信任域。网页只负责浏览,图的结构通过带令牌的 Connect API 写入。
v0.4.0 移除了早期的 Agent 资产盘点并清空了旧架构图和 Connect 状态;新的单一拓扑模型见 Phase 1 和 Phase 2 设计。
- Topology 页面:在只读 React Flow 画布上浏览层、节点、卫星、边界和关系,按视图或属性筛选并查看详情。
- Connect 页面:签发、查看、轮换和吊销令牌,范围为
topology:read或topology:write。 - Connect API(
/api/v1/topology*):机器端使用 Bearer 令牌读取、校验、替换或增量修改拓扑,也可读取变更历史并在无冲突时撤销;写入使用修订号、幂等键和审计记录。
站点 的网页和浏览器 API 使用 Cloudflare Access 控制访问,需要获准的身份。/api/live 不经过 Access;/api/v1/* 也不经过 Access,而由 Worker 校验 Connect 令牌。浏览器 /api/topology 只读,结构写入须使用 Connect API。自行部署时,需要配置自己的 Access 应用、D1 数据库和 Connect 密钥。API 路由与前置条件见设计文档。
需要 Bun 和 Node.js 22.12+;Node 用于运行 Vite / Wrangler 等工具。所有示例从仓库根目录开始。
git clone https://github.com/nocoo/steed.git
cd steed
bun install --frozen-lockfile
bun run build初始化 Web Worker 使用的本地数据库,迁移文件在 apps/web/migrations:
cd apps/web
bunx wrangler d1 migrations apply DB --env dev --local --persist-to .wrangler/state/web
cd ../..在两个终端分别运行:
# 终端一:完整 Web Worker,回环端口 37035
bun run --cwd apps/web dev:worker# 终端二:Vite,端口 7035,经 https://steed.dev.hexly.ai 访问
bun run devVite 把 /api 代理到本地 Web Worker。通过现有 Caddy 代理访问 https://steed.dev.hexly.ai;启动前先查询 nmem 端口登记并检查 Caddy 映射和监听端口,Worker inspector 使用 38035。Access 开发豁免只允许回环地址和这个 HTTPS 源。本地 Connect 配置见架构图与 Connect 文档。
bun run build 构建 Web 静态资源;bun run typecheck 和 bun run lint 检查类型与代码风格。
apps/web/ React 页面、Web Worker、Access 校验、Connect API
apps/web/migrations/ D1 迁移
packages/api/ 共享的拓扑、Connect 与用户资料契约(zod)
生产部署构建 apps/web,使用其 production 环境发布到 Cloudflare Workers。
从仓库根目录运行:
| 测试层 | 命令 |
|---|---|
| 全部单元与组件测试 | bun run test |
| Web 组件与视图模型测试 | bun run --cwd apps/web test |
| 拓扑与 Connect HTTP 集成测试 | bun run test:e2e |
| 本地拓扑容量与延迟基准 | bun run bench:topology |
bun run test 生成包含 Worker 的覆盖率报告,bun run check-coverage 检查门槛;bun run test:watch 进入监听模式。Web 测试使用 jsdom 和 React Testing Library。test:e2e 依次运行拓扑和 Connect 两个 HTTP 测试,每次启动本地 Wrangler,在临时 D1 状态目录中应用迁移并使用临时回环端口。基准使用合成的 1000 节点、5000 边拓扑,在本地 HTTP 和 D1 上测量各操作的 p95。
当前没有已配置的浏览器端到端测试命令,浏览器完整操作链路仍需手动验证。
| 部分 | 实现 |
|---|---|
| Web 界面 | React、React Router、Vite、Tailwind CSS、Radix UI |
| 拓扑图 | React Flow |
| 服务与存储 | Cloudflare Workers、D1;浏览器入口使用 Cloudflare Access |
| 验证 | Vitest、React Testing Library、jsdom、TypeScript、ESLint |
依赖以各 workspace 的 package.json 和 bun.lock 为准。
MIT © 2026 Zheng Li