Arona WebUI:我为什么做了一个 AI Gateway 管理面板
项目地址:Arona WebUI
技术栈:Node.js、Vanilla JS、WebSocket、OpenClaw Gateway Protocol。
Arona WebUI 是我做的一个 OpenClaw AI Gateway 管理面板。项目没有引入复杂的前端框架,起因也很简单:网关运行起来之后,状态、配置、日志和定时任务分散在不同入口里,日常查看和操作不太顺手。
我先遇到的问题
我自己使用 AI Gateway 时,经常需要确认几件事:网关到底有没有正常连接,当前用了哪个模型,最近有没有报错,定时任务是否按预期执行。
openclaw的使用场景多在三方channel渠道里,比如飞书、tg、slack等,并不能可视化的看到当前模型在执行什么具体的命令操作,更无从可知token的消耗速度、缓存是否命中等;而且当网关无响应的时候这些三方channel就彻底与openclaw失联……针对这些问题,才开始着手开发Arona WebUI
最初版本围绕三类动作展开:
- 看状态:连接、CPU、内存、模型用量和日志。
- 改配置:模型配置和定时任务。
- 发操作:通过页面向网关发送控制命令。
这个范围看起来不大,但已经覆盖了从观察到操作的一条完整路径。
功能顺序是怎么定的
对管理工具来说,如果连网关是否在线都不知道,配置页面做得再完整也很难用。所以当前版本的顺序是:先让状态可见,再让配置可改,最后把常用操作接进来。
页面上目前包含这些模块:
- 网关连接状态。
- CPU 和内存监控。
- 模型用量统计。
- 流式日志查看。
- 模型配置。
- 定时任务。
- 网关命令下发







这里有一个产品上的取舍。权限系统、多网关编排和大规模数据分析当然都有价值,只是当前版本更需要先把个人使用链路跑通,所以暂时没有把它们放进来。
技术方案
项目使用 Node.js 原生 API 搭建服务端,前端使用 Vanilla JS 和 ES Modules,没有引入构建工具。整体链路比较直接:
1 | 浏览器页面 |
为什么选 WebSocket
这个面板会持续接收日志、连接状态和任务结果。要是一直靠轮询,代码和状态处理都会变得麻烦。
WebSocket 能同时处理两类消息:页面向网关发送命令,网关把事件和结果推回来。实时日志和状态更新也可以沿用同一条连接,页面不需要反复请求才能知道有没有新内容。
为什么先不用前端框架
这个项目的规模和目标都比较明确,我想先把浏览器、Node.js 服务和网关之间的通信关系理清楚。Vanilla JS 的好处是依赖少、部署简单,代码也更贴近实际的数据流。
代价同样明显:模块边界、状态更新和 DOM 渲染都需要自己维护。后续如果增加多网关、权限管理和复杂表单,我会重新评估是否需要引入更完整的前端工程方案。
LLM 在里面做了什么
我使用 Claude Code 和 Codex 辅助开发,但没有把它们当成“输入一句话就交付全部代码”的工具。
我自己负责确定场景、功能优先级、信息架构和验收标准,也需要理解 OpenClaw 的消息协议,确认连接、命令和返回事件是否符合预期。LLM 更适合帮我处理这些工作:
- 生成模块的初始代码。
- 补齐重复性逻辑。
- 根据错误日志提供排查方向。
- 整理文档和测试清单。
实际流程通常是先拆出一个小任务,让模型给出实现方案,再逐步生成代码和验证。这样做比直接生成一个“完整系统”更容易发现问题,也不容易把不需要的复杂度一并带进来。
现在做到什么程度
当前版本已经实现了实时监控、模型配置、定时任务、日志查看和网关命令下发等核心能力。项目代码已经公开在 GitHub,仓库目前有 60+ Star。
这里的 Star 更像是项目完成度和公开展示度的辅助证据,并不代表商业用户规模。Arona WebUI 目前主要还是我自己使用和迭代的工具,这个边界需要说清楚。
还缺什么
这个版本离更成熟的产品还有距离,比较明显的缺口包括:
- 身份认证和权限控制还不完善。
- 多网关管理还没有形成完整方案。
- 网络断开后的自动重连和错误恢复需要加强。
- 端到端测试和性能指标还不够系统。
如果继续迭代,我会先处理连接恢复和权限边界,再考虑扩展更多配置能力。对于这类工具,出了问题之后能不能看懂、能不能恢复,通常比再多一个配置入口更重要。


