fix(webui): 修总览 KPI 长期空值(我上轮懒加载改出来的)+星图改银色

### ★ 严重问题:总览页 8 个 KPI 里有 5 个是空的
线上实测(https://homeagent.jianfgit.xyz):
  ["运行中状态","1h 22m 18s运行","0插件","v1.4.0…版本","—LLM",
   "—记忆","—文档","—运行时"]
对照 state:{"status":true,"kernel":false,"settings":0,"runtime":true}

根因是**我上一个提交(d3315c6 按页签懒加载)引入的**:
总览的插件数/版本/LLM/记忆/文档/运行时全部读 `state.kernel`
(`updateOverview` 里写作 `(k && k.plugins)` 这类安全取值),
而我把 kernel 从 overview 的数据块里删掉了。
⇒ 缺数据时不报错、**只显示「插件 0、记忆 —、文档 —」**,
看起来像「服务坏了」而不是像 bug —— 这类静默降级最难自查。

★ 教训(已写进代码注释):依赖分析必须覆盖**整个调用链**。
我当初只 grep 了 `renderOverview` **直接**读的 state.*,漏了它间接
调用的 `updateOverview`。逐页重核后确认只有 overview 漏配,其余页签
(plugins/settings/kernel 各自要的)本来就是对的。

修复:overview 的 fetch 补回 kernel。kernel 拉过一次后不再重拉
(starmapFetchBlock 的节流),152KB 只在首屏付一次。
实测:["运行中状态","1m 15s运行","17插件","v1.4.0HomeAgent版本",
      "deepseekLLM","1200/893记忆","0文档","39 · 11M运行时"]

### 星图配色改银色(用户裁定)
SM_COLOR_DIM: 0x7d8a9e(灰蓝)→ 0xc8ced8(银色)。
实测 colors: ["7d8a9e"] → ["c8ced8"]

### 关于「页面还是绿色」这个现象
线上内联的颜色实测已是 0x7d8a9e,缓存头也正确
(cache-control: no-cache, no-store, must-revalidate),
浏览器复现同样是灰蓝色 ⇒ 那是**已打开标签页里的旧 JS**:
页面 HTML 变了,但没重新加载的标签页不会自己换。
本提交部署后需**刷新页面**(Ctrl+Shift+R 强刷)才会看到新配色。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
JianFeeeee
2026-09-27 23:20:01 +08:00
parent 5cc0f53df8
commit d084137def

View File

@ -516,7 +516,19 @@ function toggleSidebar() {
//
// 于是「切到哪页才拉哪页的数据」成为结构性正确,而不是靠 if 串联。
var TABS = {
overview: { fetch: ["status", "runtime"], render: ["renderOverview"] },
// ★ overview 必须拉 kernel:总览的 8 个 KPI 里有 5 个读它
// (插件数 / 版本 / LLM / 记忆 / 文档 / 运行时),取值都写成
// `(k && k.plugins)` 这种安全形式——于是缺数据时不报错,
// **只显示「插件 0、记忆 —、文档 —」**,看起来像“服务坏了”。
//
// 我先前只 grep 了 renderOverview 直接读的 state.*,**漏了它间接
// 调用的 updateOverview**,就把 kernel 从总览的数据块里删掉了。
// 线上实测印证:state.kernel=false 而 status/runtime 有值。
//
// 教训:依赖分析必须覆盖**整个调用链**(render → 内部调用的 update*),
// 只看入口函数的直接引用会漏。kernel 拉过一次后不再重拉
// (见 starmapFetchBlock 的节流),152KB 只在首屏付一次。
overview: { fetch: ["status", "runtime", "kernel"], render: ["renderOverview"] },
chat: {
fetch: ["status", "proxyServices", "terminals", "cmdHistory"],
render: ["renderChat"],
@ -5491,7 +5503,7 @@ var starmapLabelEl = null;
// 1. 默认色改为低饱和灰蓝(全图统一,不假装在分类)
// 2. 类型色只在**真的存在多种类型**时才按类型区分(见 smColorFor)
// 3. 图例按实际节点集合动态生成,不列出永不出现的类型
var SM_COLOR_DIM = 0x7d8a9e; // 中性灰蓝:单一类型时的全图色
var SM_COLOR_DIM = 0xc8ced8; // 银色:单一类型时的全图色(用户裁定)
var smTypeColors = {
// 以下类型在真实数据里几乎不出现(仅 social.go 会产出 person),
// 但保留定义:万一出现就能自动获得区分色 + 动态图例条目。