From 7212ab4aad194ef1628be7422aa8eff81dcabf88 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sat, 26 Sep 2026 14:34:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(webui):=20=E6=98=9F=E5=9B=BE=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E6=9C=AC=E5=9C=B0=E5=8C=96=20=E2=80=94=E2=80=94=20?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E4=BB=8E=E5=85=AC=E7=BD=91=20CDN=20=E6=8B=89?= =?UTF-8?q?=20three.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户点「星图」看到「3D 星图不可用(CDN 加载失败)」。 服务端 curl 那两个 URL 都是 **200** ⇒ 不是服务端的问题,是**浏览器** 访问不到公网 CDN(内网 / 出口受限 / 断网)。dashboard.html 从 cdnjs 与 jsdelivr 拉 4 个库:three.js、OrbitControls、marked、DOMPurify。 换 CDN 只是把同一个赌注重下遍。HomeAgent 明确支持离线与内网部署, 前端却有 4 个硬依赖在公网上 ⇒ 断网即坏,且用户无从修复。 顺带两个收益: - **安全**:DOMPurify 是净化 Markdown 的关键一环,它挂掉前端会退化到 「不净化」分支(dashboard.js 里有 typeof 检查)—— 那是安全降级, 比星图坏更值得修。 - **体积**:四个库共 ~700KB,embed 后由本服务同源提供,省掉 4 个跨域握手, 也不再受第三方可用性影响。二进制 84MB → 84.7MB(+0.8%)。 - `internal/plugins/webui/static/` 放四个库(固定版本,随二进制走) - `//go:embed static` + 新增 `/static/` 路由 - dashboard.html 的四个 src 改指 `/static/...` - 加载失败兜底 8s → 3s(本地是毫秒级;仍超时就说明真有问题) `/static/` **不走 requireWeb**:未登录时页面也要加载这些库才能渲染登录框, 加认证会让用户看到白屏(比 401 更难自查)。这些资源不含用户数据。 - TestDashboardHasNoExternalCDN:页面不得引用任何公网 CDN - TestStarmapDependenciesAreLocal:星图两个库必须来自本地 - TestVendorFilesExistInSourceTree:vendor 文件必须在(embed 的前提) - TestStaticVendorRoutesServeRealLibraries:路由**必须真的返回库内容** ★ 最后一条的判据强度是补出来的:初版只判状态码,变异「返回 200 + 空体」 时**仍然绿** —— 而空体在浏览器里的症状与 404 完全一样(都报加载失败)。 改为同时判体积与特征串(REVISION / OrbitControls / marked / DOMPurify) 后,变异「只写前 10 字节」判红。 变异验证 3 条:HTML 改回 CDN → 2 条判红;路由挂回 requireWeb → 503 判红; 截断响应体 → 体积判红。 全量 38 包全绿。 --- internal/plugins/webui/dashboard.html | 13 +- internal/plugins/webui/handler.go | 51 + internal/plugins/webui/starmap_vendor_test.go | 161 +++ .../plugins/webui/static/OrbitControls.js | 1045 +++++++++++++++++ internal/plugins/webui/static/marked.min.js | 6 + internal/plugins/webui/static/purify.min.js | 3 + internal/plugins/webui/static/three.min.js | 6 + 7 files changed, 1280 insertions(+), 5 deletions(-) create mode 100644 internal/plugins/webui/starmap_vendor_test.go create mode 100644 internal/plugins/webui/static/OrbitControls.js create mode 100644 internal/plugins/webui/static/marked.min.js create mode 100644 internal/plugins/webui/static/purify.min.js create mode 100644 internal/plugins/webui/static/three.min.js diff --git a/internal/plugins/webui/dashboard.html b/internal/plugins/webui/dashboard.html index d44c8a0..b6ca9ba 100644 --- a/internal/plugins/webui/dashboard.html +++ b/internal/plugins/webui/dashboard.html @@ -6,25 +6,28 @@ HomeAgent Dashboard