Files
HomeAgent/internal/plugins
JianFeeeee 9c93f232e3 fix(webui): 星图配色改中性灰蓝 + 图例按实际类型动态生成
### 为什么会出现「一片绿」

上一提交修好了「分类配色从未生效」那个 bug(服务端发 "Concept"、JS 键是
"concept" ⇒ 永不匹配 ⇒ 1150 个节点全回退兜底灰 0xcccccc)。修好之后
颜色值**一个字没改**(concept 键仍是 0x44ff88),于是 1148 个 Concept
节点第一次真的拿到了那个亮青绿 —— 1149 个节点里 1148 个是 Concept,
所以整张图变成绿的。

⇒ 结论:绿色不是渲染 bug,是「配色终于生效」后暴露出的真实数据形状。
   之前的灰色恰好是「全都没匹配上」的症状。

### 换中性色(用户裁定)
默认色改为 SM_COLOR_DIM = 0x7d8a9e(中性灰蓝)。亮青绿配 1149 个
自发光球确实扎眼。

### 顺带把「图例说谎」也修了
原图例写死「人物/概念/对象/地点/来源」五项,而实测图谱里只有
Concept(1148)与 Source(1)—— 列出四个永不出现的类型,等于告诉
用户存在实际不存在的分类。

现在:
- 图例按**实际出现**的类型动态生成,标注占比
- 占比 <1% 的不单列(实测 1/1149 = 0.087%,单列会显示成「来源 0%」,
  既难看又误导读者以为图里没有来源节点),归入「其他 N 个」
- 只有**一种有存在感**的类型时,附一句实话说明「节点同色不是分类图」

### 颜色规则也跟图例对齐
smColorFor:只有存在 >=1% 的第二类型时才按类型上色,否则全图中性色。
理由:99.9% 概念 + 0.1% 其他时按类型上色,得到的仍是一整片同色,
而那一两个异色点在视觉上就是噪点(实测 colors 只剩 ["7d8a9e"])。

不动服务端类型识别(用户裁定):nlp/extractor.go 至今不判类型、
graph.go:451 写死 Concept,根治要改记忆链路,本轮不碰。

### 途中修掉一个自己引入的 bug
图例空。首屏星图在**总览页**初始化,那时 #sm-legend 还不存在
(骨架由 renderStarmapTab 建),smLegend 内部 getElementById 返回 null
直接返回;而 renderStarmapTab 建完骨架后只调了 smUpdateStat()。
⇒ 浏览器实测图例 html 长度 0。在 renderStarmapTab 里补一次 smLegend()。

### 验证(真实 1149 节点数据集 + WebGL)
- 颜色:["7d8a9e"](单一中性色)—— 改前 ["44ff88"] 一片绿
- 图例文本:「概念 100%  其他 1 个(图谱实体几乎都是同一类型,节点同色;
  出现新类型后会自动分类)」
- 统计:1149 节点 / 865 关系;控制台零异常
- go vet 干净;全量测试通过

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-27 07:14:34 +08:00
..
2026-07-21 21:07:37 +08:00