mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-09 09:04:57 +00:00
GUI 与服务端 WebUI 插件共享同一套 REST 接口,但两边独立演进、没有任何
强制手段。这次核实发现三处真实漂移(服务端 42 路由 / GUI 只用 29)。
1) 星图接上服务端专为它造的轻量活动端点
服务端 handleMemoryGraphPulse 的注释写了动机:生产实例全量图谱
408KB / 1151 节点,为了「知道哪些节点是新的」而每 N 秒拉全量是把
带宽和 JSON.parse 全花在重复数据上;pulse 只回 id+name+type+
mention_count+updated_at,几百字节 ~ 几 KB,差两个数量级。
WebUI dashboard 接了它,GUI 此前只在初始化拉一次全量且完全不轮询
⇒ 星图停在打开那一刻的快照,agent 后来学的东西它永远看不到。
现接入:/runtime 3s + /memory/graph/pulse 10s,两路轮询幂等、
切连接时停;新实体标「生长」;SSE 的 tool_call/stage/agent_output
也会触发脉冲(用工具名与回复前 60 字当 hint,让点亮落到本轮相关实体)。
pulse 检出「全量图里没有的新实体」时置脏,由下一次 renderChatStarmap
惰性重拉全量 —— 不在脉冲回调里直接拉,否则会把轻量活动源变成每 10s
拉一次 408KB 全量,正好是 pulse 端点要消除的浪费。
2) 前端依赖本地化,顺带修掉一处安全边界
四个库从 internal/plugins/webui/static/ 复制到 renderer/vendor/
(字节一致,由门禁钉住),index.html 不再引用任何公网 CDN。
与服务端同一理由(见 webui/starmap_vendor_test.go 的注释):
HomeAgent 支持离线/内网部署,换 CDN 只是把同一个赌注重下一遍。
★ renderMd() 的净化器缺失分支不再回退到手写正则(剥 <script>/on*=/
javascript:)—— 那不是完备的 HTML sanitizer,漏 <iframe srcdoc>、
SVG 内联事件、data: URI 等,而它渲染的是模型输出与记忆文本,
都算不可信输入。现在直接退纯文本:库已本地化,走不到该分支。
3) 新增 endpoint-align.test.mjs(进 npm test / CI)
扫描 app.js 的 api("...") 与 handler.go 的 mux.HandleFunc 对账,
7 条判据。与既有判据同一路子:读真实源码,不抄逻辑重写。
反向差集只报告不门禁(管理面端点接不接是产品决策),
只硬钉「服务端已明确为其设计」的 pulse —— 即本判据的由来。
已做变异测试:改错 pulse 路径、改回 CDN 均能判红。
protocol-align.test.mjs 是真浏览器判据(需 Electron+Xvfb+真后端),
CI 明确不跑,所以这类漂移此前无人发现。
顺带:connectSSE 由隐式全局赋值改为 function 声明(加 "use strict"
会在文件靠后处 ReferenceError,报错点离调用点很远)。
判据:cmd/gui 下 npm test 全绿(4 个 .mjs / 25 条)。
47 lines
1.2 KiB
JSON
47 lines
1.2 KiB
JSON
{
|
|
"name": "homeagent-gui",
|
|
"version": "1.4.0",
|
|
"author": "JianFeeeee <jianfeeeee@homeagent.local>",
|
|
"homepage": "https://gitcode.com/JianFeeeee/HomeAgent",
|
|
"description": "HomeAgent Desktop GUI - Multi-connection management dashboard",
|
|
"main": "main.js",
|
|
"scripts": {
|
|
"start": "electron . --no-sandbox",
|
|
"dev": "electron . --no-sandbox --dev",
|
|
"test": "node sse-backoff.test.mjs && node sse-backoff-behavior.test.mjs && node retry-guard.test.mjs && node endpoint-align.test.mjs",
|
|
"test-live": "node chat-perf.test.mjs && node protocol-align.test.mjs"
|
|
},
|
|
"dependencies": {
|
|
"koffi": "^3.1.6"
|
|
},
|
|
"devDependencies": {
|
|
"asar": "^3.2.0",
|
|
"electron": "^33.0.0",
|
|
"electron-builder": "^26.15.3",
|
|
"electron-packager": "^17.1.2",
|
|
"icojs": "^0.23.0",
|
|
"sharp": "^0.35.3"
|
|
},
|
|
"build": {
|
|
"appId": "com.homeagent.gui",
|
|
"productName": "HomeAgent",
|
|
"linux": {
|
|
"target": [
|
|
"deb",
|
|
"rpm",
|
|
"AppImage"
|
|
],
|
|
"category": "Utility",
|
|
"icon": "icon.svg"
|
|
},
|
|
"files": [
|
|
"main.js",
|
|
"preload.js",
|
|
"renderer/**/*",
|
|
"icon.svg",
|
|
"node_modules/**/*",
|
|
"!node_modules/electron-builder/**"
|
|
]
|
|
}
|
|
}
|