安卓手机上的 Lagoon 打磨得越来越顺手之后,一个新的念头又冒了出来:当我手里拿着 iPad、坐在 MacBook 前面,或者在任何一台没装安卓 App 的电脑上打开浏览器时,能不能也用同样清爽的界面统管所有开发机?

之前一直没直接做纯网页版,是因为浏览器有两道绕不过去的墙:一是各台开发机未必开了允许跨域(CORS),二是部署在公网 HTTPS 下的网页根本没法直接连内网 http:// 的开发机端口(会被浏览器 Mixed Content 策略当场拦截),我更不可能为了图省事把开发机端口裸露在公网上。

跨入 v3.0:JDK 21 虚拟线程中枢与双端共享 Kotlin 内核

要想在任意浏览器里安全直连,中间必须有一个部署在自己内网或服务器上的轻量网关。2026 年 10 月 26 日(PR #139 至 #141,Commit ca414f2),我直接把版本号从 0.3 跨到了 v3.0.0,正式推出了自托管中枢 Lagoon Hub 与 React 19 PWA 网页端。

写 Lagoon Hub 时我特意克制了引入庞大的 Spring 或 Ktor 框架的冲动,直接基于 JDK 21 内置的 HttpServer 加上虚拟线程(Virtual Threads) 写出了一套极简高性能的服务端,由它在后台代持全部开发机的长连接。更爽的是代码复用:我把核心协议与解析逻辑抽成了 :app(Android)和 :hub(JVM)共用的 shared/ Kotlin 源码集,并用 12 组黄金测试样例把双端行为锁死。网页端还完整支持了基于 VAPID + aes128gcm 的标准 Web Push 加密通知,哪怕关掉浏览器标签页,收到权限审批通知时也能在系统通知栏里直接点“允许一次”或“拒绝”。

v3.1 一键加密配对与 155 个 MIUIX 图标 1:1 还原

随后的 10 月 27 日到 28 日(v3.1.0-rc.1 至 rc.6),我又一鼓作气把双端联动体验推到了极致:新增了 lgk1.* 接入密钥(默认监听端口定为 25246),在安卓手机上只要粘贴一条形如 <hub>/#key=lgk1... 的链接,就能通过 AES-256-GCM 端到端加密,把中枢上配好的全部开发机一键导入手机。同时,我还把根会话完成与后台 Shell/子会话状态拆开独立追踪,并从原生库里提取出 155 个 MIUIX 矢量图标 和 QoderGlyph 1:1 移植到了网页端,让浏览器和安卓 App 看起来就像同一个模子里刻出来的。